投稿

8月, 2015の投稿を表示しています

XPagesで日付の複数値を取り扱う場合は要注意

イメージ
皆さん、こんにちは。


今日は2015年8月13日です。夏休み中という方も多いかと思いますが、私は仕事してます。

可哀そうに・・・と思ったら、上のボタンを押してください。



さて、今日もXPagesの話です。
そして、私の嫌いな?日付データの取り扱いについてです。


ノーツには「日付/時刻」型というフィールドタイプがあります。
このフィールドは「日付のみ」とか「時刻のみ」という形でデータを保存できます。
しかし、XPagesでは、そういった形式での保存が難しいです(できないわけではない)。

格納方法については、IBM ChampionのKazunori Tatsukiさんのブログに
XPagesでフィールドに”年月日のみ”、”時刻のみ”の値を設定する方法という形で掲載されています。


さて、これで一安心だ!と喜んでいたのですが、思わぬところで躓いてしまいました。

日付を格納しているフィールドを"複数値可"にしていたのです。
上記のブログにある日付フィールドの取得方法はNotesXSPDocumentのgetItemValueDateTimeという命令です。
これは、複数値の形式に対応していません。

困りましたね。
そこで、NotesXSPDocumentではなく、バックエンドクラスのNotesDocumentクラスの命令を使ってみることにしましょう。
NotesDocumentクラスには日付フィールドの値を取得するためのgetItemValueDateTimeArrayという命令があります。
こちらは、文書内の日付フィールド(アイテム)をjava.util.Vectorという配列のオブジェクトで返してくれます。
配列の一つ一つの要素はNotesDateTime型もしくはNotesDataRange型になります。
今回は、日付の範囲ではなく、単なる複数値なので、NotesDateTime型の配列になります。
取得できたら、iterator命令とwhile命令で配列の分繰り返し処理を行います(LotusScriptでいうところのForall関数と考えてください)。

フォームに「Hiduke1」という複数値を許可した日付/時刻フィールドがある場合の保存時の処理を書いてみました。
try {     var notesDoc:NotesDocument = doc…