ノーツの特徴的な機能であるリッチテキストを 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 件のコメント:
コメントを投稿