今回はノードを複製する方法についてまとめます。同じフォーマットの表を複数個所に配置するなど応用方法はさまざまですね。
ノードの複製
ノードを複製するには、 Clone メソッドを使用します。
Clone (NotesDOMNode - LotusScript®)前回紹介した RemoveChild メソッドと同様で、このメソッドも NotesDOMNode クラスのメソッドとなります。ですので、それを継承している NotesDOMEmenetNode でも使用できます。
構文は次の通りです。
Set notesDOMNode = notesDOMNode .Clone( deepClone ) |
引数 deepClone で True を指定するとサブノードを含めて複製します。False だとそのノードだけとなるのですが、DXL ツリーの階層構造を考えると、通常は True での利用となりますね。
複製したノードの状態
CreateElementNode メソッドで新規作成したノードは、DXL ツリーには属さず宙に浮いたような状態であると #51)ノード操作 ④ - ノードの新規作成 で紹介しました。複製したノードも同様の状態となり、ParentNode が存在しない状態となります。
DXL ツリーに配置するためには、AppendChild メソッドや #52)ノード操作 ⑤ - ノードを挿入する方法 で紹介した方法を追加って、希望する位置に配置する必要があります。
複製時の注意
例えば、リッチテキストフィールド直下にある 2 つ目の表を複製して一番後ろに挿入したいとします。そのサンプルは次の通りです( #55)ノード操作 ⑧ - ノードの検索 で紹介した関数を使用)。
・・・ 'リッチテキスト直下の2つ目のテーブルを取得 Dim denTbl As NotesDOMElementNode Set denTbl = xGetNthChildByName(denRT, "table", 2) 'テーブルの後ろの段落を得取得 Dim denPar As NotesDOMElementNode Set denPar = xGetNextSiblingByName(denTbl, "par") 'テーブルを複製して追加 Dim denNew As NotesDOMElementNode Set denNew = denTbl.Clone(True) Call denTbl.ParentNode.AppendChild(denNew) 'テーブルの後ろに段落を追加 Set denNew = denPar.Clone(True) Call denTbl.ParentNode.AppendChild(denNew) ・・・ |
xGetNthChildByName(denRT, "table", 2) で 2 つ目の表を取得して、denTbl.Clone(True) で複製しています。ただ、ポイントはココではありません。表を配置後、その後ろに段落(par ノード)を配置しています。table ノードは前後に par ノードが必要となるための対応なのですが、ノードをコピーして配置するだけではなく、前後関係に配慮して DXL ツリーとして破綻しないよう注意することが重要です。
前回 | DXL Step-by-Step | 次回 |
0 件のコメント:
コメントを投稿