当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2009年11月4日水曜日

文書から別の文書を開く

今日のは「忘れてた・・・」シリーズです。
以前、プログラミングして、ここでは使えないんだな。と認識していたのですが、いつものサンプルDBに登録するのを忘れていて、すっかり忘れていたのですが・・・

文書を開いていて、そこから別の文書を開くというものです。
通常、文書リンクアイコンがあれば、それをクリックすることで別の文書を開くことができます。
しかし、文書リンクではなく、文書のUNIDしか情報を持っていない場合はどうすればよいのでしょうか?

文書UNIDから文書を開く方法として、真っ先に思い浮かぶのは
@Command([OpenDocument])
だと思います。

しかし!
デザイナーヘルプをよく見ると・・・
「データベースが文書ビューレベルで開いていて、そのビューに開きたい文書が含まれていなければなりません。」
となっています。
つまり、このコマンドはビュー上でしか動作しないのです。

これでは、文書から別の文書を開くと言う方法には使えません。


そこで、考えるのがLotusScriptを使って、どうにかできないか?ということです。
文書を開くには、ComposeDocumentもしくはEditDocumentを使います。
が、ComposeDocumentは新規文書の作成なので、ここでは使えません。
となると、EditDocumentです。
しかし、EditDocumentは、開く文書が特定できている必要があります。

今、分かっているのは開きたい文書のUNIDです。
ということで、開きたい文書を特定します。
開きたい文書は、同一DB内にあるとすれば、
NotesDatabase#GetDocumentByUNIDを使って、文書を特定することができます。

後は、この文書をEditDocumentで開くだけです。
簡単にできますね。


以下は、これを実現したサンプルです。
サンプルなので、UNIDはコードの中に埋め込んであります。
実際に使うときは、NotesUIDocument#FieldGetTextメソッドを使って取り出してください。
Sub Click(Source As Button)
 Dim unid As String
 Dim session As New NotesSession
 Dim curdb As NotesDatabase
 Dim opendoc As NotesDocument
 Dim uiws As New NotesUIWorkspace
 Dim uidoc As NotesUIDocument
 
 unid = "1234567890abcdef1234567890abcdef"
 Set curdb = session.CurrentDatabase
 Set opendoc = curdb.GetDocumentByUNID( unid )
 
 Set uidoc = uiws.EditDocument( False, opendoc, True, , False, True )
End Sub


文書リンクを埋め込むにはリッチテキストフィールドが必要ですが、この方法なら
テキストフィールドを用意しておくだけで良いので、扱いが容易になります。

知らなかった人はお試しあれ。

0 件のコメント: