2023/12/24

リッチテキスト:#14)既存リッチテキストフィールドの取得

ノーツの特徴的な機能であるリッチテキストを LotusScript で操作する方法を紹介している連載『リッチテキストの基本操作』の 14 回目です。これまでは以下の通り、文書もリッチテキストフィールドも新規作成していました。

   Set nd = ndb.CreateDocument()
   Set nrti = nd.CreateRichTextItem("Body")

今回からは既に存在するリッチテキストフィールドを操作する方法を紹介します。


ヘルプのサンプル

Domino Designer ヘルプで、NotesRichTextItem クラスの例 を確認すると、4つ目に既存のリッチテキストフィールドにアクセスするコードが紹介されています。そのまま転記すると、次のようなサンプルです。

   Dim doc As NotesDocument
   Dim rtitem As Variant
   '...set value of doc...
   Set rtitem = doc.GetFirstItem( "ProjectDescription" )
   If rtitem.Type = RICHTEXT Then
      Call rtitem.AddNewLine( 1 )
      Call rtitem.AppendText( "Book is 64 pages, full color.")
   End If
   Call doc.Save( False, True )

もちろん、このコードに間違いはなく正しく動作するのですが、リッチテキストが入る変数 rtitem が Variant で宣言されています。これだと、実際にコーディングする際にプロパティやメソッドの入力でタイプアヘッドが使用できず不便ですね。


NotesRichTextItem クラスの利用

既存文書の Body というリッチテキストフィールドを取得する部分だけを NotesRichTextItem クラスを使用して記述すると次のようになります。

Sub Initialize
   Dim nuiw As New NotesUIWorkspace
   Dim nuid As NotesUIDocument
   Dim nd As NotesDocument
   Dim nrti As NotesRichTextItem

   Set nuid = nuiw.CurrentDocument
   Set nd = nuid.Document

   Set nrti = nd.GetFirstItem("Body")
End Sub

GetFirstItem メソッドでフィールドを取得していますので、NotesRichTextItem クラスを使用していること以外はヘルプと同じですね。

ただ、ここで注意点があります。

GetFirstItem メソッド のヘルプによると、戻り値は NotesItem クラスのオブジェクトとなっています。そして、NotesRichTextItem クラス のヘルプでは、NotesItem クラスを継承していると記載されています。

ですので上記コードは、GetFirstItem メソッドで取得した Body フィールドのオブジェクトが、たまたまリッチテキストだったため、NotesRichTextItem と型が一致してエラーにならなかったということになります。

試しにテキストフィールドを指定した場合、次のようなエラーが発生します。

ちなみにデバッグモードで実行するとエラーの表示が次のように変わります。なぜメッセージが変わるのかはわかりませんが、このエラーの方が端的でわかりやすいですよね...


フィールドの型の判定

上記のようなエラーを回避するよう丁寧にプログラムを記述すると次のようになります。ヘルプに倣って、フィールドタイプを判定しリッチテキストの場合だけ、NotesRichTextItem の変数に代入しています。

Sub Initialize
   Dim nuiw As New NotesUIWorkspace
   Dim nuid As NotesUIDocument
   Dim nd As NotesDocument
   Dim ni As NotesItem
   Dim nrti As NotesRichTextItem


   Set nuid = nuiw.CurrentDocument
   Set nd = nuid.Document

   Set ni = nd.GetFirstItem("Body")
   If ni.Type = RICHTEXT Then
      Set nrti = ni
            ・・・
   End If
End Sub

このようにしておけば後続の処理の記述でもタイプアヘッドが使用でき効率的に開発できます。


前回 リッチテキストの基本操作 次回

0 件のコメント:

コメントを投稿