いいね!数

0

閲覧数
538

フィールドAに入ってる日付と今日の日付を比較して、今日の日付より前の日付だったときに

エラーを出したいと思っています。

できれば、エラーメッセージコントロールを使ってエラーを出したいのですが、これはコードを

全てのプロパティ-validatorsに書けば良いのでしょうか?

その場合は、validatorsのうちどれを使えばいいのか教えてください。

それともほかの方法を使うのでしょうか?

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:2017/01/19 14:04:15

回答・コメント

いいね!数

0

エラーメッセージコントロールって、@ErrorMessage()でエラー表示させるやつですよね。

validatorは使ったことないから間違ってるかもしれないけど、あれってvalidatorと組み合わせるものだったかな?

サーバサイドの保存処理や画面遷移の処理内で、各入力値のチェック処理をガリガリ書いて、そこから得られたエラーメッセージを@ErrorMessage()で表示させるのが一般的なやり方と思います。

/Yac

回答日時:2017/01/19 19:28:20

いいね!数

0

yac4423さん、

ご回答をありがとうございます。

 

@ErrorMessage関数があったんですね。すっかり忘れてました。

そこで、以下の式をquerySaveDocumentイベントに書いてみたのですが、うまくいきません。

//入力チェック
var StatusStr = document1.getValue("Status");
var sflg = document1.getValue("SaveFlg");
var date = document1.getValue("DELETE");
if((date!=null||date!="")&&StatusStr=="公開"&&sflg!="期限無保存"){
tdate   = @Today().getTime(); 
date = document1.getValue("DELETE").getTime();      
if(tdate >= date){  --------------------------①
@ErrorMessage("削除日は今日以降の日付を入力してください","DELETE");
}
}

print文で確かめたところ、①のif文までは通っているようなのですが、@ErrorMessage関数が

うんともすんとも言いません。普通に保存されてしまいます。

何か間違っているでしょうか?

回答日時:2017/01/20 11:44:45

いいね!数

0

@ErrorMessage というものがあるんですね。初めて知りました。
ヘルプを見ると Extension Libraly の拡張関数のようですので Extension Libraly を使用する設定にしておく必要があると思いますが、
そこは大丈夫ということでいいですよね。

(@ErrorMessage の箇所を通ったとして)保存されるのは return false; で返していないからかと。
 

回答日時:2017/01/20 17:58:48

いいね!数

0

「querySaveDocumentイベント」なんてことをいってるということは、フォームのquerySaveDocumentイベントに保存時のコード書いてるのかな?

あれほどシンプルアクションなんか使うなと忠告したのに。

シンプルアクションなんてなんの応用もきかないから、今回のようなエラーメッセージを出したいみたいなちょっと変わったことをやろうとするとうまくいかない。本質的な理解を妨げるしね。

 

保存ボタンのイベントハンドラにチェック処理を書いて、そこに@ErrorMessage()を書くんですよ。チェック不正の時はdocument1.save()を呼ばなければ保存されない。

あと@ErrorMessage()には<xp:message>のIDを指定します。

保存ボタンの部分更新対象に<xp:message>を含む要素のIDを指定するか、「すべて更新」を指定するのも忘れずに。@ErrorMessaage()でせっかく内容を書き換えても、更新されないと意味ないので。

あと、<xp:message>を使うとそれっぽいスタイルを指定してくれるだけなんで、エラーメッセージをviewScopeにいれといて、<xp:label>をrenderedでエラーメッセージの表示/非表示を切り替えてるのと本質的には変わりません(たぶん)。

/Yac

回答日時:2017/01/21 10:57:17

いいね!数

0

ykawaさん、yac4433さん、

アドバイスありがとうございます。

文書を保存じた後にビューに戻る「保存」ボタンと、メールなどのリンクからとんだ時用に保存後に

ページを閉じる「保存」ボタンと2つの「保存」ボタンを用意しているため、ついついquerySaveDocumentに

コードを書いてしまいます。

今回、「保存」ボタンにコードを書き写してみました。保存した後に前のページに戻るために

シンプルアクションの「前のページに戻る」を使用したのですが、エラーメッセージが出ることなく、

前のページに戻ってしまいました。「前のページに戻る」を取ると思うようにエラーメッセージが表示

されます。

前のページに戻る、ページを閉じるなどのアクションはこの場合、どうしたら良いのでしょうか?

 

回答日時:2017/01/23 13:22:02

いいね!数

0

> 前のページに戻る、ページを閉じるなどのアクションはこの場合、どうしたら良いのでしょうか?

contextというグローバルオブジェクトがこの辺の操作をサポートしてくれます。

後は自分で調べて、他の人のために、ここで解説してみてくださいね。

ただ、「前のページに戻る」というのは一意に決まらないので、あまり使うべきじゃない。保存後の文書を表示モードで開きなおすか、文書の一覧ページに移動すべきでしょう。

http://xpages.jp/QA/qa.nsf/x_anspage.xsp?docId=74E4FC19F593847049257F8100033460

URL指定で特定のページ(URL)に移動(遷移)するメソッドもcontextに用意されてます。

 

> 2つの「保存」ボタンを用意しているため、ついついquerySaveDocumentにコードを書いてしまいます。

同じような処理をコピペで書かないという姿勢は大事ですね。そういう場合はSSJSのスクリプトライブラリを作っておき、そこに保存の共通処理を書いておき、各ボタンのイベントハンドラからその共通関数を呼ぶようにすればいいだけ。

各種フィールドのチェック処理もこのスクリプトライブラリ内に書けばいい。間違ってもボタンのイベントハンドラのコード部にだらだら書いちゃダメですよ。

以下のページが参考になるかな(手前ミソでなんですが)。

http://tech-notes.dyndns.org/domino/humcom/humcom_method_pageMod.html

/Yac

回答日時:2017/01/23 23:26:49

いいね!数

0

yac4423さん

参考になるご回答ありがとうございます。

保存ボタンが2つになる場合はスクリプトライブラリを使えばいいんですね。なぜか

思いつきませんでした。。

頂いたURL(http://tech-notes.dyndns.org/domino/humcom/humcom_method_pageMod.html)参考になります。

 

前のページに戻るというアクションについては、”文書の一覧ページを開く”ことにしました。

context.redirectToPage(“Main”)

 このほうが安定していていいですね。

回答日時:2017/01/24 9:50:56