前回は、文書の中身の全体である document ノードと属性の取得を整理しました。属性では、文書 ID や フォーム名など、文書のプロパティ的な要素が取得できました。フォーム名は、フィールド内に保持しているのですが、DXL では特別扱いされているようですね。
今回は、フィールドの取得法についてまとめます。
フィールドは、document ノードの直下にエレメントノードとして存在します。通常のフィールドは、"item" というタグのエレメントノードで、"name" というアットリビュートにフィールド名がセットされています。
それでは、フィールドの取得方法を確認しましょう。
NotesDOMElementNode クラスには、タグ名で配下のエレメントを検索するメソッドがあります。以下のプログラムは、DXL から全フィールド順に取得して、フィールド名を順にメッセージボックスで表示します。
'document ノードの取得 Dim denDoc As NotesDOMElementNode Set denDoc = ddn.DocumentElement Dim dnl As NotesDOMNodeList Dim denFld As NotesDOMElementNode Dim dan As NotesDOMAttributeNode Dim i As Integer Set dnl = denDoc.GetElementsByTagName("item") For i = 1 To dnl.NumberOfEntries Set denFld = dnl.GetItem(i) Set dan = denFld.GetAttributeNode("name") MsgBox "フィールド名 = " & CStr(dan.NodeValue) Next |
検索は、GetElementsByTagName メソッドで、引数に検索するタグ名を文字で指定します。
戻り値は、NotesDOMNodeList のオブジェクトです。このクラスは、属性の場合の NotesDOMNamedNodeMap と同様に、コレクションのように振舞います。このクラスを使用して、フィールドのエレメントノードを順に取得します。
フィールド名は属性として記録されていますので、"name" を取得して、メッセージボックスに表示しています。
実際のコーディングでは、フィールド名を指定して、ノードを取得するのが一般的かと思います。次のような関数を作っておくと便利かもしれませんね。
document ノード と 取得したいフィールド名を引数にして、見つかったフィールドを NotesDOMElementNode のオブジェクトで返します。
Function xGetField(vdenDoc As NotesDOMElementNode, vsFldName As String) As NotesDOMElementNode Dim dnl As NotesDOMNodeList Dim denFld As NotesDOMElementNode Dim dan As NotesDOMAttributeNode Dim i As Integer Set xGetField = Nothing Set dnl = vdenDoc.GetElementsByTagName("item") For i = 1 To dnl.NumberOfEntries Set denFld = dnl.GetItem(i) Set dan = denFld.GetAttributeNode("name") If dan.NodeValue = vsFldName Then Set xGetField = denFld Exit For End If Next End Function |
前回 | DXL ことはじめ | 次回 |
0 件のコメント:
コメントを投稿