Compartir vía


Contexto de ejecución de la API de cliente

El contexto de ejecución define el contexto del evento en el que se ejecuta el código. El contexto de ejecución se pasa cuando ocurre un evento en un formulario o cuadrícula. Úselo en su controlador de eventos para realizar varias tareas, como determinar formContext o gridContext, o administrar el evento de guardado.

El contexto de ejecución se pasa de una de las formas siguientes:

  • Definiendo controladores de eventos con la interfaz de usuario: el contexto de ejecución es un parámetro opcional que se puede pasar a una función de biblioteca JavaScript a través de un controlador de eventos. Utilice la opción Pasar el contexto de ejecución como primer parámetro en el cuadro de diálogo Propiedades del controlador cuando especifique el nombre de la función para pasar el contexto de ejecución de eventos. El contexto de ejecución es el primer parámetro que se pasa a una función.


  • Definiendo controladores de eventos mediante código: el contexto de ejecución se pasa automáticamente como el primer parámetro a funciones definidas con este código. Para obtener una lista de métodos que se pueden usar para definir controladores de eventos en código, vea Agregar o quitar funciones a eventos mediante código.

El objeto de contexto de ejecución proporciona muchos métodos para seguir trabajando con el contexto. Más información: Contexto de ejecución (referencia de la API de cliente).

Uso asincrónico de objetos de contexto

Solo se garantiza que el contexto pasado a un evento funcione como se espera durante el evento. Cuando se mantiene una referencia a un contexto después de que finaliza el evento, pueden ocurrir acciones que hagan que los métodos de contexto se comporten de manera inesperada.

Por ejemplo, si su controlador de eventos envía una acción asincrónica que toma una cantidad de tiempo prolongada mientras mantiene una referencia al contexto de ejecución, el usuario final podría alejarse de la página actual en el momento en que se resuelva la promesa y usted invoque el método de contexto. Esta situación podría provocar que métodos como formContext.getAttribute(<name>).getValue() devuelvan null, incluso si en el momento en que se ejecutó el controlador de eventos original, el atributo tenía un valor.

Los siguientes ejemplos muestran dónde se deben agregar más controles y tener cuidado porque la función del controlador de eventos utiliza el contexto de ejecución después de que se completa el evento.

Acceder al contexto de una promesa

El contexto podría cambiar de manera inesperada después de que se resuelve una promesa .

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

Acceder al contexto después de una declaración await

El contexto podría cambiar de manera inesperada después de usar await dentro de una función asíncrona.

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

Acceder al contexto en una función de tiempo de espera

El contexto podría cambiar de manera inesperada después de usar setTimeout o setInterval para posponer la ejecución de algún código.

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

Contexto de formulario de la API del cliente
Contexto de cuadrícula de la API del cliente
Contexto de formulario y cuadrícula en las acciones de la cinta

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).