2011年9月20日火曜日

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

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

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

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

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

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

実際に手動でホットスポットを作成した文書を作っておき、NotesDXLExporterクラスを使ってXML形式のファイルへ書き出してみました。
書き出したXMLファイルから要らなそうな記述を削除したものが、下のコードの docxml = | から</document>| までの部分です。
  1. Sub Initialize  
  2.  Dim ss As New NotesSession  
  3.  Dim db As NotesDatabase  
  4.  Dim dc As NotesDocumentCollection  
  5.  Dim doc As NotesDocument, tmpdoc As NotesDocument  
  6.  Dim rtitem As NotesRichTextItem  
  7.  Dim stream As NotesStream  
  8.  Dim importer As NotesDXLImporter  
  9.  Dim docxml As String  
  10.    
  11.  Set db = ss.CurrentDatabase  
  12.    
  13.  'xmlの内容はExportした文書を参考に。  
  14.  docxml = |  
  15. <document form="tmpHotspotResourceLink">  
  16. <item name="Body">  
  17. <richtext>  
  18. <par def="1">  
  19. <par def="1">  
  20. <urllink showborder="false">  
  21. <code event="value">  
  22. <formula>"http://www.google.co.jp"</formula>  
  23. </code>  
  24. <run>検索サイトへのリンク</run>  
  25. </urllink>  
  26. </par>  
  27. </par></richtext>  
  28. </item>  
  29. </document>|  
  30.    
  31.  '文書作成用のxmlをストリームへ書き込み、文書へ変換する  
  32.  Set stream = ss.CreateStream  
  33.  Call stream.WriteText( docxml )  
  34.  Set importer = ss.CreateDXLImporter( stream, db )  
  35.  importer.DocumentImportOption = 2 'DXLIMPORTOPTION_CREATE  
  36.  Call importer.Process  
  37.    
  38.  '変換した文書のリッチテキストフィールドの内容を選択文書へ追加する  
  39.  nid = importer.GetFirstImportedNoteId  
  40.  Set tmpdoc = db.GetDocumentByID( nid ) '変換した文書  
  41.  Set dc = db.UnprocessedDocuments  
  42.  Set doc = dc.GetFirstDocument '選択文書  
  43.  Set rtitem = doc.GetFirstItem( "Body" ) 'ホットスポットを追加するフィールド  
  44.  Call rtitem.AppendRTItem( tmpdoc.GetFirstItem( "Body" ) )  
  45.  Call doc.Save( TrueTrue )  
  46.    
  47.  '変換した文書を削除する  
  48.  Call tmpdoc.Remove( False )  
  49. End Sub  


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

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

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

0 件のコメント:

コメントを投稿