DXL 活用の調査・検証で、実現できたことや発見したことご紹介する『DXL Step-by-Step』シリーズの第 23 回です。第 14 回から前回まで、段落に関する DXL の調査結果をまとめてきました。解説ばかりだとつまらないので、この間の復習を兼ねて、サンプルプログラムを作りたいと思います。
共通関数の準備
第 17 回『段落の定義② 余白の設定』で、DXL 用のライブラリ lsDXL を新規作成しました。そろそろサンプルコードが長くなってきますので、共通で利用できる関数は、このライブラリに集約しようと思います。
lsDXL ライブラリでは、インターフェースを明確にするため、外部からアクセスさせたい関数だけを Public 宣言する前提としています。
◇ 共通変数
まずはライブラリ全般の準備として以下のコードを追加します。
Option Declare Private xns As NotesSession Sub Initialize 'ライブラリのプライベート変数の初期化 Set xns = New NotesSession End Sub |
NotesSession のオブジェクトは、さまざまなシーンで使用しますし、値が変化しないので、ライブラリ内で共通の変数としています。
◇ DXL の保存(インポート)
DXL をノーツオブジェクトとして保存する関数です。
これまで第 4 回『文書の更新』では文書として保存する関数、第 10 回『イメージリソースの新規作成』では設計要素を保存する関数として登場した xImportDXL 関数です。
汎用的な関数となるよう、作成するドミノオブジェクトが ”設計” or ”文書” なのかを引数で指定するようにしています。また、保存エラーがあった場合、エラーメッセージを表示して、False を返すようにしました。
Public Function DXL_Import(vdprs As NotesDOMParser, ByVal viOption As Integer, ByVal vbIsDesign As Boolean) As Boolean Dim nst As NotesStream Dim ndb As NotesDatabase Dim dimp As NotesDXLImporter On Error GoTo Err_Proc 'DXL の抽出準備 Set nst = xns.CreateStream() Call vdprs.SetOutput(nst) Call vdprs.Serialize() '保存(インポート) Set ndb = xns.CurrentDatabase Set dimp = xns.CreateDXLImporter() If vbIsDesign = True Then '設計の保存 dimp.DesignImportOption = viOption Else '文書の保存 dimp.DocumentImportOption = viOption End If 'DXL の保存 Call dimp.Import(nst.ReadText(), ndb) DXL_Import = True Exit_Proc: Exit Function Err_Proc: MsgBox Error$, 16, "DXL_Import" DXL_Import = False Resume Exit_Proc End Function |
◇ デバッグ用の関数
最後に万一 DXL の保存(インポート)でエラーが発生した場合に、保存しようとした DXL を出力できるよう、デバッグ用の関数を準備します。
元となるのは、第 6 回『エージェント(設計要素)の DXL』で登場した xSaveDXL 関数です。デバッグ用ということで、関数名は Debug_SaveDXL としています。
Public Function Debug_SaveDXL(vdprs As NotesDOMParser) As Boolean Dim ndb As NotesDatabase Dim nd As NotesDocument Dim nrti As NotesRichTextItem Set ndb = xns.CurrentDatabase Set nd = ndb.CreateDocument() nd.Form = "DXL" Set nrti = nd.CreateRichTextItem("Body") Call nrti.AppendText(xGetDXL(vdprs)) Debug_SaveDXL = nd.Save(True, False) End Function Function xGetDXL(vdprs As NotesDOMParser) As String Dim nst As NotesStream Set nst = xns.CreateStream() Call vdprs.SetOutput(nst) Call vdprs.Serialize() xGetDXL = nst.ReadText() End Function |
なお、サブ関数の xGetDXL はそのまま変更せずに移設しました。
前回 | DXL Step-by-Step | 次回 |
0 件のコメント:
コメントを投稿