2011/09/20

LotusScriptでホットスポットを追加してみた

LotusScriptを使って、リッチテキストフィールドへホットスポットのURLリンク(リソースリンク)を追加することはできないものかと思案していましたが、ようやく解決できました。

先日の懇談室のスレではNotesクライアントの設定次第でホットスポットにならないことがありますが、こちらはたぶん大丈夫。

やり方はちょっとズルイかもしれません。

1. リッチテキストに追加するホットスポットの定義が書かれたxmlをDBへインポートして文書を作ります
2. ビューで選択した文書のリッチテキストフィールドへ1で作成した文書のリッチテキストフィールドを追加し、保存します
3. 1で作成した文書を削除します

ここでxmlをどのように記述すればよいの?というギモンが湧きます。

実際に手動でホットスポットを作成した文書を作っておき、NotesDXLExporterクラスを使ってXML形式のファイルへ書き出してみました。
書き出したXMLファイルから要らなそうな記述を削除したものが、下のコードの docxml = | から</document>| までの部分です。
Sub Initialize
 Dim ss As New NotesSession
 Dim db As NotesDatabase
 Dim dc As NotesDocumentCollection
 Dim doc As NotesDocument, tmpdoc As NotesDocument
 Dim rtitem As NotesRichTextItem
 Dim stream As NotesStream
 Dim importer As NotesDXLImporter
 Dim docxml As String
 
 Set db = ss.CurrentDatabase
 
 'xmlの内容はExportした文書を参考に。
 docxml = |
<document form="tmpHotspotResourceLink">
<item name="Body">
<richtext>
<par def="1">
<par def="1">
<urllink showborder="false">
<code event="value">
<formula>"http://www.google.co.jp"</formula>
</code>
<run>検索サイトへのリンク</run>
</urllink>
</par>
</par></richtext>
</item>
</document>|
 
 '文書作成用のxmlをストリームへ書き込み、文書へ変換する
 Set stream = ss.CreateStream
 Call stream.WriteText( docxml )
 Set importer = ss.CreateDXLImporter( stream, db )
 importer.DocumentImportOption = 2 'DXLIMPORTOPTION_CREATE
 Call importer.Process
 
 '変換した文書のリッチテキストフィールドの内容を選択文書へ追加する
 nid = importer.GetFirstImportedNoteId
 Set tmpdoc = db.GetDocumentByID( nid ) '変換した文書
 Set dc = db.UnprocessedDocuments
 Set doc = dc.GetFirstDocument '選択文書
 Set rtitem = doc.GetFirstItem( "Body" ) 'ホットスポットを追加するフィールド
 Call rtitem.AppendRTItem( tmpdoc.GetFirstItem( "Body" ) )
 Call doc.Save( True, True )
 
 '変換した文書を削除する
 Call tmpdoc.Remove( False )
End Sub


xmlのうち、<urllink>タグがホットスポット、<formula>タグがリンク先のURLで、<run>タグがリンクとして表示する文言になります。

応用すればホットスポットボタンも追加できそうですね。

※Lotus Notes 8.0.1 Basic にて動作確認しました

0 件のコメント:

コメントを投稿