Notesアプリケーションで,ユニーク番号など内部的に採番するような処理がエラーになって値が入らなかった場合にどうやってリカバリーするかという話があって,一時的にフィールド定義を編集可能にして値を入れて,すぐにフィールド定義を計算結果に戻せばイイじゃん!みたいな案が出たので,それは微妙すぎるからもっとスマートな方法でやろうっていう指摘をした.
やり方としてはLotusScriptで動的に値を更新すれば良く,実装方針はまぁその処理をどのぐらいの頻度で使うのかとか,その処理を流すが誰なのかとか,Designerなしでも流せるようにしたいのかとか,大体このあたりを考慮して考えれば特に定石みたいなものはないと思う.
- LotusScript内に更新するフィールド名と値をベタ書きして流す
- LotusScriptでInputBoxを呼び出して,更新するフィールド名と値を入力させて流す
- 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 |