2010年4月21日水曜日

リッチテキストへの変更内容を反映させる

現在開いている文書のリッチテキストフィールドへバックエンドで変更を加えても、文書を開き直さないと変更内容が反映されません。

そこで内容を動的に反映するために文書を開き直すサンプルを作ってみました。

このサンプルではリッチテキストフィールドの編集例として "Body" の一番下の位置へファイルを添付しています。
このエージェントのプロパティでは実行の対象を"なし"にしてください。

Sub Initialize
    Dim ws As New NotesUIWorkspace
    Dim ss As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim db As NotesDatabase
    Dim rtitem As NotesRichTextItem
    Dim unid$, pathname$
    Dim neo As NotesEmbeddedObject
    Dim editmode As Boolean
    
    Set uidoc = ws.CurrentDocument
    If uidoc Is Nothing Then Exit Sub
    '開き直すときのモードを現在の状態と一致させる
    editmode = uidoc.EditMode
    
    '編集モードなら変更を反映させるため保存する
    If editmode Then Call uidoc.Save
    
    'バックエンドでリッチテキストフィールドを編集して保存
    pathname = "C:\TEMP\HOGE.TXT"
    Set doc = uidoc.Document
    Set rtitem = doc.GetFirstItem( "Body" )
    Set neo = rtitem.EmbedObject( 1454, "", pathname )
    Call doc.Save( False, False )
    unid = doc.UniversalID
    
    'フロントエンド文書を閉じる。保存プロンプトは出さない
    If editmode Then doc.SaveOptions = "0"
    Call uidoc.Close
    
    'バックエンド文書を取得し直してフロントエンドで開く
    Set db = ss.CurrentDatabase
    Set doc = db.GetDocumentByUNID( unid )
    Call ws.EditDocument( editmode, doc )
End Sub
現在開いている文書が編集モードでも読み込みモードでも動作します。