前回「今日から始める LotusScript (6) - ビューと文書の処理」の続きです。
今回は、文書の処理とエージェントの操作についてです。
文書の処理
文書の処理パターンは、多岐にわたります。当資料では簡単な処理を例として記述します。
上記以外にも編集モードで表示している文書の操作(NotesUIDocument クラス)、エージェントではなく、フォーム(PostOpen や QuerySave など)やボタン(Click)のイベントに記述する場合もあります。
文書に含まれるフィールドを LotusScript では、アイテム(Item)と呼びます。
フィールドを表すクラスは、NotesItem と NotesRichTextItem(リッチテキスト)クラスです。
フィールドを扱う方法は、以下になります。
- 「拡張クラス」構文を使用
- NotesDocument クラスの GetItemValue, AppendItemValue, ReplaceItemValue メソッドなどを使用
- NotesItem クラスにアクセスして、各種プロパティやメソッドを使用
※ 1と2の方法では、NotesItem クラスにアクセスする必要はありません。
Step4-1:文書を新規作成する(NotesDatabase クラス/CreateDocument メソッド, NotesDocument クラス/Save メソッド)
6行目
NotesDatabase クラスの CreateDocument メソッドを使用して、新規文書となる NotesDocument オブジェクトを変数 doc に格納
7-10行目
変数 doc のフィールドに値を設定
“doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文)
フィールドが存在しない場合、新規にフィールドが作成される
但し、プロパティやメソッドなどの予約語と被るフィールドは作成不可
また、文字列や数値以外の読者や作成者フィールドとして設定する場合、上記方法ではなく NotesItem クラスを使った方法で作成/設定する必要あり
11行目
NotesDocument クラスの Save メソッドを使用して、変数 doc を保存
保存を忘れないようにすること
実行結果

Step4-2:文書を更新する(NotesDocument クラス)
[Step3-1:ビューの列の値を使用して文書を検索する] を一部修正。
[製品ID] が“L01”の文書の [価格] を2倍にする。
12行目
“doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文)
[価格(Price)]フィールドは複数値ではないが、フィールドのデータは複数値を考慮して配列で返ってくる
そのため、後に“(0)”を付けて“doc.Price(0)”として配列の最初の値を取得、2を掛けている
13行目
NotesDocument クラスの Save メソッドを使用して、変数 doc を保存
保存を忘れないようにすること
実行結果

Step4-3:文書を削除する(NotesDocument クラス/Remove メソッド)
[Step3-1:ビューの列の値を使用して文書を検索する] を一部修正。
[製品ID] が“C01”の文書を削除する。
12行目
NotesDocument クラスの Remove メソッドを使用して変数 doc の文書を削除
第1引数に True を指定した場合、スクリプトが文書を開いた後に他のユーザーが文書を変更した場合でも削除
Step4-4:文書を新規作成する [作成者フィールドの追加] (NotesItem クラス)
5行目
NotesItem クラスの変数 item を宣言
12行目
第1引数はフィールドを作成する文書を設定(変数 doc)
第2引数は作成するフィールドの名前
第3引数は設定する値
第4引数はフィールドの種類
今回は作成者とするため“AUTHORS”を指定(名前の場合“NAMES”/読者の場合“READERS”)
13行目
NotesItem クラスの IsSummary プロパティを True に設定
ビューやフォルダにフィールドの値を表示する場合、IsSummary プロパティが True の必要があるが、NotesItem クラスから作成したフィールドの IsSummary プロパティは、デフォルトが False である。よって、明示的に True を設定
実行結果

エージェントの操作
エージェントを表すのは、NotesAgent クラスです。
様々なプロパティやメソッドがありますが、最初は以下のメソッドのみ覚えておけばよいでしょう。
注意事項
エージェントを再帰的に実行することはできません。(自分自身を呼び出すことはできません)
ユーザーは呼び出し先エージェントと直接対話することはできません。呼び出し先エージェント内で、Print ステートメントを使用した場合、クライアントのステータスバーには表示されず、クライアントの log.nsf に出力されます。
呼び出し先エージェントをデバッグすることはできません。
戻り値は、エージェントを呼び出せたかどうかの結果であり、呼び出し先エージェントがエラーが無く実行されたかどうかは関係ありません。
Step5-1:別のエージェントを実行する(NotesAgent)
4行目
NotesAgent クラスの変数 agent を宣言
6行目
NotesDatabase クラスの GetAgent メソッドからエージェント(*1)を取得、変数 agent に格納
7行目
NotesAgent クラスの Run メソッドを実行して、6行目で取得したエージェントを実行
結果をステータスバーに表示
*1 「Step2-1:ダイアログボックスを表示 NotesUIWorkspace クラス」で作成したエージェント
次回は、最後のまとめの予定です。