現時点での Nomad は残念ながら DXL には未対応です。これが原因となり今回作成した名刺取り込みエージェント(リッチテキストに貼り付けられたインラインイメージを読み取る部分)は、そのまま Nomad では動作しません。そこで、今回は Nomad からでも名刺取り込みができるよう細工にをします。
Nomad 用エージェントの構成
前述の通り、Nomad で DXL は動作しません。そこで、DXL 部分の処理をサーバで実行するように変更します。具体的な対応としては、名刺読込の処理を 2 分割して、UI の処理を Nomad、それ以外をサーバで行うようにします。
UI 用エージェントの作成
新規でエージェントを作成します。
名前 | (Agent_Kicker) |
別名 | Agent_Kicker |
トリガー | イベント - エージェントリストの選択 |
対象 | なし |
セキュリティ | 実行時のセキュリティレベル 2. 制限された操作を許可する |
Option Declare Private xns As NotesSession Private xndb As NotesDatabase Sub Initialize Dim nuiw As New NotesUIWorkspace Dim nuid As NotesUIDocument Dim nd As NotesDocument Dim sID As String Dim na As NotesAgent Set xns = New NotesSession Set xndb = xns.CurrentDatabase '名刺を添付した文書を保存して文書ID取得 Set nuid = nuiw.CurrentDocument Set nd = nuid.Document sID = nd.Noteid Set nd = Nothing '一旦文書開放(これがないと再取得できない) Call nuid.Close(True) 'エージェントをサーバ実行 Set na = xndb.GetAgent("ReadNameCard_OnServer") Call na.RunOnServer(sID) 'エージェントで更新した文書を再取得して表示 Set nd = xndb.GetDocumentByID(sID) nd.Form = "mfNameCard" Set nuid = nuiw.EditDocument(True, nd) End Sub |
RunOnServer メソッドを使用して、サーバでエージェントを実行させています。引数で渡した文書 ID でサーバエージェントでも現在の文書を取得できるようにしています。ただ、サーバ上で文書を取得するためには保存されている必要があるので、UI の文書を先に保存しています。
サーバエージェント実行後は、エージェントによる更新(サーバ上に保存)した結果を得るため、文書の再取得を行っています。また、再表示する際には、Nomad 用のフォームで開くよう、Form フィールドを書き換えています。
サーバ用エージェントの作成
新規でエージェントを作成します。
名前 | (ReadNameCard_OnServer) |
別名 | ReadNameCard_OnServer |
トリガー | イベント - エージェントリストの選択 |
対象 | なし |
セキュリティ | 実行時のセキュリティレベル 2. 制限された操作を許可する |
Option Declare Use "lsReadNameCard" Private xns As NotesSession Private xndb As NotesDatabase Sub Initialize Dim na As NotesAgent Dim nd As NotesDocument Set xns = New NotesSession Set xndb = xns.Currentdatabase Set na = xns.CurrentAgent '呼び出し元の文書を取得 Set nd = xGetPramDoc(na) 'AI で名刺を読み込み Call ReadNameCard(nd) '名刺管理フィールドセット nd.ExchangeDate = Today nd.Status = "3" '文書の保存(画面の表示は呼び出し元が担当) Call nd.Save(True, False) End Sub Private Function xGetPramDoc(vna As NotesAgent) As NotesDocument Dim nd As NotesDocument Set nd = xndb.GetDocumentByID(vna.ParameterDocID) Set xGetPramDoc = nd End Function |
名刺読み込みのメインルーチンはノーツクライアント用と共通で、スクリプトライブラリの ReadNameCard 関数をコールしているだけです。
サーバ用エージェントでは、名刺情報取得後、文書を保存しています。これにより、呼び出し元のエージェントで結果を取得できるようにしています。
Nomad 用フォームの修正
エージェントが完成したら Nomad 用フォームの[名刺読込]アクションで実行するエージェントを切り替えます。エージェントを実行する前に、@コマンドで文書を保存しています。
@Command([FileSave]); @Command([ToolsRunMacro]; "Agent_Kicker") |
次回の予定
今回のエージェント作成で Nomad 用の部品は完成しました。次回は、Nomad 用フレームセットを作成して、アプリとして仕上げます。
前回 | 作ってみよう | 次回 |
0 件のコメント:
コメントを投稿