計算結果フィールドをLotusScriptで更新する

Notesアプリケーションで,ユニーク番号など内部的に採番するような処理がエラーになって値が入らなかった場合にどうやってリカバリーするかという話があって,一時的にフィールド定義を編集可能にして値を入れて,すぐにフィールド定義を計算結果に戻せばイイじゃん!みたいな案が出たので,それは微妙すぎるからもっとスマートな方法でやろうっていう指摘をした.

やり方としてはLotusScriptで動的に値を更新すれば良く,実装方針はまぁその処理をどのぐらいの頻度で使うのかとか,その処理を流すが誰なのかとか,Designerなしでも流せるようにしたいのかとか,大体このあたりを考慮して考えれば特に定石みたいなものはないと思う.

  1. LotusScript内に更新するフィールド名と値をベタ書きして流す
  2. LotusScriptでInputBoxを呼び出して,更新するフィールド名と値を入力させて流す
  3. LotusScriptからフォームで呼び出している自動採番関数を呼び出して流す

サンプルコード

LotusScript的には最もシンプルな 1. のコードのサンプルを公開しておく.

' MB_YESNO = 4
' MB_ICONQUESTION = 32
boxType& = 4 + 32
answer% = MessageBox("Do you want to continue?", boxType&, "Continue?")

' IDYES = 6
' IDNO = 7
If (answer% = 6) Then
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = ws.CurrentDocument
    uidoc.EditMode = True
    Call uidoc.FieldSetText("FIELD_NAME", "FIELD_VALUE")
    Call uidoc.Save
    Call uidoc.Close
Elseif (answer% = 7) Then
   ' NOP
End If

データ型接尾辞

ちなみに,LotusScriptでよく質問を受ける変数名の後の記号は「データ型接尾辞」と言って,明示的に型宣言をしなくともその型で変数が宣言されるような仕組みで,熟練したLotusScripterや,Designerヘルプに載ってるコードなどで,よく使われていると思う.

dtSuffix データ型
@ Currency
# Double
% Integer
& Long
! Single
$ String