1

次のコードを使用して、別のフォームのアクションでドキュメントを作成しています。

Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim NewItemDoc As NotesUIDocument
    Dim ParentUNID As String

    ParentUNID = ws.CurrentDocument.Document.UNID(0)

    Set NewItemDoc = ws.ComposeDocument("","","Item")

    Call NewItemDoc.Document.ReplaceItemValue("ParentUNID", ParentUNID)
End Sub

ItemフォームQueryOpenとイベントハンドラーにコードがありPostOpenますが、まったく実行されていません。私が使用したとき、@Command([Compose])そこに呼ばれました。

ロータススクリプトをデバッグするとき、それらのイベントハンドラーをステップスルーしません。

ロータススクリプトで同等のものを入手するにはどうすればよいですか?QueryOpenつまり、PostOpenイベントをトリガーするにはどうすればよいですか?

4

1 に答える 1

2

これに関するあなたの経験から2つだけ。

「オプション宣言」を忠実に使用し、常に(常に)サブ、関数、UIイベントにエラートラップを含めます。リアルタイムセーバー。コードサンプルを使用すると、UIエラー処理に使用する古典的なコードは次のとおりです。

Sub Click(Source As Button)
    on error goto errHandle
    Dim ws As New NotesUIWorkspace
    Dim NewItemDoc As NotesUIDocument
    Dim ParentUNID As String

    ParentUNID = ws.CurrentDocument.Document.UNID(0)

    Set NewItemDoc = ws.ComposeDocument("","","Item")

    Call NewItemDoc.Document.ReplaceItemValue("ParentUNID", ParentUNID)
    Exit Sub 
  errhandle:
    MessageBox Lsi_info(2) + " : " + Str(Err) + " - " + Error(Err) + ", at line " + Str(Erl)
    Exit Sub 
End Sub

印刷ステートメントまたはより洗練されたものを使用して、エラーをログに記録することもできます。欠かせない。LSI_Info関数(ここでさらに詳しい情報)はしばらく前から存在していて、私が使用するのに問題になることはありませんでした。

次に、LotusScriptから新しいフォームを起動すると、LotusScriptデバッガーは新しいフォームで実行されません。これは、LotusScriptデバッガーが一度に1つの「UIプロセススレッド」でのみ実行され、(ダイアログボックスではなく)新しいUIフォームを起動すると、新しいインスタンスが実行されるためです。ここでは、「プロセススレッド」という用語をかなり大まかに使用します。これは、UIフォームが互いに独立していて相互作用しないことを区別しようとしているため、デバッガーが新しいフォームに従わないためです。

モーダルであるダイアログボックスの動作とは異なります。デバッガーもダイアログボックスに移動しません(警告メッセージが表示されることを忘れないでください)。フォームを閉じると、元のUIスレッドに直接リンクされているため、デバッガーは元のフォームに戻ります。

于 2011-10-05T22:43:12.340 に答える