Partager via


Contexte d’exécution de l’API client

Le contexte d’exécution définit le contexte d’événement dans lequel votre code s’exécute. Le système transmet le contexte d’exécution lorsqu’un événement se produit sur un formulaire ou une grille. Utilisez-le dans votre gestionnaire d’événements pour effectuer différentes tâches, telles que la détermination de formContext ou gridContext, ou la gestion de l’événement d’enregistrement.

Vous pouvez passer le contexte d’exécution de la manière suivante :

  • Définition de gestionnaires d’événements à l’aide de l’interface utilisateur : le contexte d’exécution est un paramètre facultatif que vous pouvez transmettre à une fonction de bibliothèque JavaScript via un gestionnaire d’événements. Utilisez l'option Transmettre le contexte d’exécution comme premier paramètre dans la boîte de dialogue Propriétés du gestionnaire en spécifiant le nom de la fonction pour transmettre le contexte d'exécution de l'événement. Le contexte d’exécution est le premier paramètre transmis à une fonction.


  • Définition de gestionnaires d’événements à l’aide de code : le système transmet automatiquement le contexte d’exécution en tant que premier paramètre aux fonctions définies à l’aide du code. Pour obtenir la liste des méthodes que vous pouvez utiliser pour définir des gestionnaires d’événements dans le code, consultez Ajouter ou supprimer des fonctions aux événements à l’aide du code.

L’objet de contexte d’exécution fournit des méthodes permettant d’utiliser le contexte. Pour plus d’informations, consultez la référence des méthodes de contexte d’exécution de l’API cliente.

Utilisation asynchrone des objets de contexte

Le contexte transmis par le système à un événement n’est fiable que pendant la durée de cet événement. Lorsque vous conservez une référence à un contexte après la fin de l’événement, des actions peuvent se produire qui provoquent un comportement inattendu des méthodes de contexte.

Par exemple, si votre gestionnaire d’événements distribue une action asynchrone qui prend beaucoup de temps pendant que vous maintenez une référence au contexte d’exécution, l’utilisateur final pourrait quitter la page actuelle pendant que la promesse est résolue et que vous appeliez la méthode contextuelle. Cette situation peut entraîner le renvoi de formContext.getAttribute(<name>).getValue() par les méthodes telles que null, même si au moment de l’exécution du gestionnaire d’événements d’origine, l’attribut avait une valeur.

Les exemples suivants montrent où vous devez ajouter d’autres vérifications et faire preuve de prudence, car la fonction de gestionnaire d’événements utilise le contexte d’exécution une fois l’événement terminé.

Accéder au contexte dans une promesse

Le contexte peut changer de manière inattendue après la résolution d’une promesse.

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);
        }
    );
}

Accéder au contexte après une instruction await

Le contexte peut changer de manière inattendue après l’utilisation d’await dans une fonction asynchrone.

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);
}

Accéder au contexte dans une fonction de temporisation

Le contexte peut changer de manière inattendue après l’utilisation de setTimeout ou setInterval pour différer l’exécution du code.

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");
    }
}

Contexte de formulaire de l’API client
Contexte de grille de l’API client
Contexte de formulaire et de grille dans les actions du ruban