クライアント API 実行コンテキスト

実行コンテキストは、コードが実行されるイベント コンテキストを定義します。 実行コンテキストは、フォームまたは グリッド でイベントが発生したときに渡されます。 イベント ハンドラーでこれを使用して、 formContext または gridContext の決定などのさまざまなタスクを実行したり、保存イベントを管理したりします。

実行コンテキストは、次に示す方法のいずれかで渡されます:

  • UIを使用したイベント ハンドラーの定義: 実行コンテキストは、イベント ハンドラーによってJavaScriptライブラリ関数に渡すことのできる [オプション] パラメーターです。 イベント実行コンテキストを渡す関数名を指定する際に、ハンドラーのプロパティダイアログの最初のパラメーターとして実行コンテキストを渡すオプションを使用します。 実行コンテキストは、この関数に渡される最初のパラメーターです。


  • コードを使用してイベント ハンドラーを定義: 実行コンテキストは、コードを使用する関数セットに渡す最初のパラメーターとして自動的に渡されます。 コードのイベント ハンドラーを定義するために使用可能なメソッドの一覧については、 コードを使用してイベントに関数を追加、または削除を参照してください。

実行コンテキスト オブジェクトは、コンテキストをさらに操作するための多くのメソッドを提供します。 詳細については、実行コンテキスト (クライアントAPI参照) を参照してください。

コンテキストオブジェクトを非同期的に使用する

イベントに渡されるコンテキストは、イベント中にのみ期待どおりに動作することが保証されます。 イベントの終了後もコンテキストへの参照を保持すると、コンテキスト メソッドが予期しない動作をするようなアクションが発生する可能性があります。

たとえば、実行コンテキストへの参照を保持している間に、イベント ハンドラーが長時間かかる非同期アクションをディスパッチすると、Promiseが解決されてコンテキスト メソッドが呼び出されるまでに、エンド ユーザーが現在のページから移動してしまう可能性があります。 この状況では、元のイベント ハンドラーが実行された時点で属性に値があったとしても、 formContext.getAttribute(<name>).getValue() のようなメソッドが返される null 可能性があります。

次の例は、イベント ハンドラー関数がイベントの完了後に実行コンテキストを使用するため、さらにチェックを追加して注意する必要がある場所を示しています。

プロミスのコンテキストにアクセスする

promise が解決された後、コンテキストが予期しない形で変化する可能性があります。

function onLoad(executionContext) {
    var formContext = executionContext.getFormContext();
    fetch("https://www.contoso.com/").then(
        function (result) {
            // Using formContext or executionContext here may not work as expected
            // because onLoad has already completed when the promise is resolved.
            formContext.getAttribute("name").setValue(result);
        }
    );
}

awaitステートメントの後のコンテキストへのアクセス

awaitasync関数 内で使用した後、コンテキストが予期しない方法で変更される可能性があります。

async function onLoad(executionContext) {
    var formContext = executionContext.getFormContext();
    var result = await fetch("https://www.contoso.com/");
    // Using formContext or executionContext here might not work as expected
    // because the synchronous part of onLoad has already completed.
    formContext.getAttribute("name").setValue(result);
}

タイムアウト関数内のコンテキストへのアクセス

setTimeout または setInterval を使用して一部のコード実行を延期すると、コンテキストが予期しない方法で変更される可能性があります。

function onLoad(executionContext) {
    var formContext = executionContext.getFormContext();
    if (notReady) {
        setTimeout(function () {
            // Using formContext or executionContext here may not work as expected
            // because onLoad has already completed when this delayed function executes.
            var name = formContext.getAttribute("name").getValue();
        }, 100);
    } else {
        formContext.getAttribute("name").setValue("abc");
    }
}

クライアントAPIフォームコンテキスト
クライアントAPIグリッドコンテキスト
リボン アクションのフォームとグリッドのコンテキスト

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。