2023/07/12

DXL ことはじめ:#2)文書を DXL で表示してみよう!

前回は DXLの概要について説明しました。今回は LotusScript で既存文書を DXL に変換する方法を説明します。


サンプルプログラムの紹介

このサンプルプログラムは、ビューで選択した文書を DXL に変換し、同じ DB 内に文書として保存します。その文書は、Form が "DXL" で、Body というリッチテキスト内に変換した DXL を保存します。

なお、変換元の文書は、『Project KEEP 体験』シリーズで使用した郵便番号マスタをサンプルとして使用しています。


◇ 処理の実行

変換したい文書を開き、エージェント(後述)を実行します。


◇ 実行結果

次のような文書が新規に作成され、変換された DXL を確認できます。

前回デザイナーで DXL を確認した際には、GUI で階層化されて表示されていたので、XML らしくありませんでしたが、この結果を見ると、マークアップランゲージらしくタグで構造化されたテキストデータということがよくわかります。

DXL の中身をざっと見ると、文書のプロパティで確認できるような情報のみとなっています。項目のラベルやフォームのタイトルなどはフォームの設計ですので、含まれていません。ノーツは文書とフォームは別管理であることがよくわかりますね。


サンプルプログラム

次のプログラムで DXL 変換を実行します。エージェントとして記述し、選択文書に対して実行する設定とします。

Option Declare

Private xns As NotesSession
Private xndb As NotesDatabase

Sub Initialize
   Dim ndc As NotesDocumentCollection
   Dim nd As NotesDocument
   Dim sDXL As String

   Set xns = New NotesSession
   Set xndb = xns.CurrentDatabase
   Set ndc = xndb.UnprocessedDocuments

   Set nd = ndc.GetFirstDocument '1文書目を処理
   sDXL = xGetDXL(nd) 'DXL に変換
   Call xSaveDXL(sDXL) 'DXL を文書に保存
End Sub

Function xGetDXL(vnd As NotesDocument) As String
   Dim dexp As NotesDXLExporter

   'Dominoデータ → DXL
   Set dexp = xns.CreateDXLExporter
   xGetDXL = dexp.Export(vnd) 'DXL をテキストで取得
End Function

Function xSaveDXL(vsDXL As String) As Boolean
   Dim nd As NotesDocument
   Dim nrti As NotesRichTextItem

   Set nd = xndb.CreateDocument()
   nd.Form = "DXL"
   nd.Title = "DXL #2"
   Set nrti = nd.CreateRichTextItem("Body")
   Call nrti.AppendText(vsDXL)

   xSaveDXL = nd.Save(True, False)
End Function

DXL に変換する部分は、関数 xGetDXL にまとめられています。使用しているクラスやメソッドを確認しましょう。


NotesDXLExporter クラス

このクラスは、Domino データ(文書や設計要素)を DXL に変換(エクスポート)するためのオブジェクトです。

NotesDXLExporter (LotusScript®)

このクラスは、DXL に関して様々な機能を提供するのですが、単に Domino データを DXL 化するだけであれば、Export メソッドを使用するだけです。

このメソッドは、引数で指定した Domino データ(今回は文書)を DXL に変換して、その結果を文字列で返します。

Export (NotesDXLExporter - LotusScript®)

前回 DXL ことはじめ 次回

0 件のコメント:

コメントを投稿