ShowTable of Contents
概要
XPagesで文書に格納されているアイテムの値を取得する場合、以下の3つの場面が考えられます。
ここでは、そのアイテムが「日付/時刻」タイプであった場合の取得方法や取り扱い時の注意点について述べます。
1.画面上の日付コントロールの値を取得
2.NotesXSPDocumentの値を取得
3.NotesDocumentの値を取得
値の取得方法
画面上の日付コントロールの値
getComponent( "コントロール名" ).getValue();
で取得できます。
コントロール名は、「すべてのプロパティ」で表示される「id」項目の値を指します。
NotesXSPDocumentの値
document1.getItemValueDate( "アイテム名" );
document1.getItemValueDateTime( "アイテム名" );
の2種類の方法で取得できます。
document1はデータソース名を表します。
アイテム名は、文書上のアイテムの名前です(通常は、フォームのフィールド名と同じです)。
NotesDocumentの値
doc.getItemValueDateTimeArray( "アイテム名" );
で取得できます。
docはJavaScriptのDominoクラスにあるNotesDocumentオブジェクトです。
データ型
getComponent( "コントロール名" ).getValue();
document1.getItemValueDate( "アイテム名" );
で取得される値は、java.util.Dateクラスというデータ型になります。
document1.getItemValueDateTime( "アイテム名" );
で取得される値は、
lotus.domino.local.DateTimeクラスというデータ型になります。これは、JavaScriptのDominoクラスの一つであるNotesDateTimeクラスの事を指します。
doc.getItemValueDateTimeArray( "アイテム名" );
で取得される値は、
java.util.Vectorクラスという配列のデータ型になります。
ノーツ文書は複数値を保有することが出来るため、このような形になっていると考えられます。
なお、この配列の各要素は、それぞれNotesDateTimeか、もしくはNotesDateRangeクラスになっています。
NotesDateRangeは日付/時刻を「複数値を許可」にして、時刻だけの設定にした場合に有効になるもので、2つの時刻の範囲(Range)を示しています。
このように、java.util.Dateとlotus.domino.local.DateTimeという2種類の結果が存在することが分かります。
これらは型が異なるため、比較や計算などの演算は行えません。
また、@Adjust()や@Year()、@Month()等の@関数の引数はjava.util.Dateクラスだったり、
NotesDatabase.getCreated()やNotesDocument.replaceItemValue()の引数はNotesDateTimeクラスだったりするので、
片方だけ使えれば良いと言うことはありません。
そこで、データ型の変換が必要になります。
データ型の変換
java.util.Dateからlotus.domino.local.DateTimeへの変換
session.createDateTime( "java.util.Date型の値" );
でNotesDateTimeクラスのオブジェクトにすることが出来ます。
lotus.domino.local.DateTimeからjava.util.Dateへの変換
notesDateTime.toJavaDate();
notesDateTimeはNotesDateTimeクラスのオブジェクトを指します。
これで、java.util.Dateクラスに変換出来ます。
データ型の確認
取得した変数のデータ型が分からない場合は、
getClass()というメソッドを使うことで判断出来ます。
これは、どのクラスにも共通して利用できるメソッドなので、便利です。
例えば、
var hiduke = getComponent( "date1" ).getValue();
print( "hidukeのクラスは、" + hiduke.getClass() );
とすれば、Dominoサーバコンソールにdate1コントロールのデータ型が表示されます。