今回は、フィールドの値の取得方法についてまとめます。
まずは、DXL でフィールドの中身がどのように表現されているか確認しましょう。下図の通り、"text" というエレメントがあり、その中に値が表示されています。
これを LotusScript でアクセスするためには、次のようなプログラムとなります。なお、フィールドのノードの取得は前回作成の関数を利用しています。
'document ノードの取得 Set den = ddn.DocumentElement 'フィールドのノードを取得 Dim denFld As NotesDOMElementNode Set denFld = xGetField(delmn, "address1") 'フィールドの値を取得 Dim denVal As NotesDOMElementNode Dim dtn As NotesDOMTextNode Set denVal = denFld.FirstChild Set dtn = denVal.FirstChild MsgBox dtn.NodeValue |
まず、"item" ノードから見て、最初の子ノードが必要なので、FirstChild プロパティで取得しています。子ノードは、DXL でいうと次の通りです。
<text>鳥取県</text> |
ここから値の "鳥取県" を取得するには、子ノードである denVal の NodeValue プロパティで取得できそうなのですが、これだと正しく取得できません。値部分(ただのテキスト文字列)は、DXL 上ノード扱いとなっています。ノードの種類は、テキストノードで、サンプルコードの通り、NotesDOMTextNode オブジェクト経由でアクセスします。
このテキストノードは、"text" ノードから見て最初のノードとなるので、FirstChild プロパティで取得しています。
そして、テキストノード(dtn)の NodeValue プロパティがフィールドの値となります。
フィールドの値にアクセスするだけなのですが、階層が深くて、少しややこしいですね。
フィールドの型
今回の郵便番号マスタ文書では、団体コード(code)と都道府県コード(prefcode)は数値フィールドとしていました。この DXL は次の通りで、タグ名が "number" となっていました。
<item name="code"> <number>31302</number> </item> <item name="prefcode"> <number>31</number> </item> |
DXL はテキスト文字列ですから、フィールドの型もタグ(文字列)で表されていて、値も文字列で現れています。LotusScript で値を操作するには、タグに合わせて文字列の値をその型に変換する必要があります。
参考までに、リスト値の場合を紹介します。次の例は、3つに分けて保存されている住所の情報を "address" というフィールドにリスト値で保存した場合です。"item" タグの下に "textlist" というタグがあり、その下に値が列挙されています。
<item name='address'> <textlist> <text>鳥取県</text> <text>岩美郡岩美町</text> <text>相谷</text> </textlist> </item> |
また、名前フィールドの場合は次の通り、属性に "names" というタグが追加されています。
<item name='Name' names='true'> <textlist> <text>CN=Admin Notes/O=Domino</text> <text>CN=User01 Training/O=Domino</text> </textlist> </item> |
このように、DXL はデータの型や値により、柔軟に構造が変わります。どのような構造となるのか詳細を知るには、DTD を読み解くか、実験を繰り返し調査するしかないようです。
また、階層は一定でないことことから、LotusScript でプログラミングするには少し厄介ですね。
最後に
今回の『DXL ことはじめ』シリーズはこれで終了です。
DXL がどんなものか、LotusScript でアクセスするためにはどうするのか、どのようなクラスが用意されているのかが概要を説明しました。
事例としたのは既存文書の読み込みでしたが、書き込み(更新)や新規作成も可能です。リッチテキストの中身の操作もできます。また、設計要素も DXL でアクセスでき、更新や新規作成が可能です。
このような具体的な使い方については別の機会にまとめたいと思います。
前回 | DXL ことはじめ |
0 件のコメント:
コメントを投稿