Buscar..


Parámetros

Parámetro Detalles
SuiteScript 2.0 -
scriptContext { Object }
scriptContext.newRecord { N/record.Record } Una referencia al registro que se está cargando desde la base de datos
scriptContext.type { UserEventType } El tipo de acción que desencadenó este evento de usuario
scriptContext.form { N/ui/serverWidget.Form } Una referencia al formulario de UI que se procesará
SuiteScript 1.0 -
type { Object } El tipo de acción que desencadenó este evento de usuario
form { nlobjForm } Una referencia al formulario de UI que se procesará
request { nlobjRequest } la solicitud HTTP GET; solo disponible cuando es activado por solicitudes del navegador

Observaciones

beforeLoad

El evento Before Load se desencadena por cualquier operación de lectura en un registro. Cada vez que un usuario, una secuencia de comandos, una importación de CSV o una solicitud de servicio web intentan leer un registro de la base de datos, se Before Load evento Before Load .

Registrar acciones que desencadenan un evento beforeLoad :

  • Crear
  • Editar
  • Ver / Cargar
  • Dupdo
  • Impresión
  • Email
  • Vista rápida

Casos de uso típicos para beforeLoad de la beforeLoad

  • Modificar el formulario de interfaz de usuario antes de que el usuario lo vea
  • Establecer valores de campo predeterminados
  • Preprocesamiento de datos

Eventos de usuario no encadenan

El código escrito en Eventos del usuario no activará ningún evento del Usuario en otros registros. Por ejemplo, cargar el registro de cliente asociado desde la beforeLoad de un registro de orden de venta no activará la beforeLoad del registro de beforeLoad . Incluso si está cargando otro registro de transacción, sus eventos de usuario no se activarán.

NetSuite hace esto para evitar que los eventos de usuario se activen entre sí en un bucle infinito. Si necesita eventos de usuario para disparar en una secuencia encadenada, tendrán que ser inyectado en los eventos entre otros tipos de script (por ejemplo, RESTlets Suitelets, scripts programados).

Event Handler devuelve void

El tipo de retorno del controlador de eventos beforeLoad es void . Cualquier dato devuelto por nuestro controlador de eventos no tiene ningún efecto en el sistema. No necesitamos devolver nada de nuestra función de manejador, ya que no podemos hacer nada con su valor devuelto.

Mínimo: registrar un mensaje en antes de cargar

// 1.0
function beforeLoad(type, form, request) {
    nlapiLogExecution("DEBUG", "Before Load", "type=" + type);
}

// 2.0
/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
define(["N/log"], function (log) {
    function beforeLoad(context) {
        log.debug({
            "title": "Before Load",
            "details": "type=" + context.type
        });
    }

    return {
        "beforeLoad": beforeLoad
    };
});

Modificar el formulario de la interfaz de usuario

// 1.0
// Revealing Module pattern, structures 1.0 similar to 2.0
var myNamespace = myNamespace || {};
myNamespace.example = (function () {

    /** @appliedtorecord employee */
    var exports = {};
    
    function beforeLoad(type, form, request) {
        showBonusEligibility(form);
    }

    function showBonusEligibility(form) {
        var field = form.addField("custpage_is_bonus_eligible",
            "checkbox", "Eligible for Bonus?");
        field.setDefaultValue(isEligibleForBonus(nlapiGetNewRecord()) ? "T" : "F");
    }

    function isEligibleForBonus(rec) {
        // Implement actual business rules for bonus eligibility here
        return true;
    }
    
    exports.beforeLoad = beforeLoad;
    return exports;
})();

// 2.0
/**
 * @appliedtorecord employee
 * @NScriptType UserEventScript
 * @NApiVersion 2.x
 */
define(["N/log", "N/ui/serverWidget"], function (log, ui) {
    var exports = {};
    
    function beforeLoad(context) {
        showBonusEligibility(context.form);
    }
    
    function showBonusEligibility(form) {
        var field = form.addField({
            "id": "custpage_is_bonus_eligible",
            "label": "Eligible for Bonus?",
            "type": ui.FieldType.CHECKBOX
        });
        field.defaultValue = (isEligibleForBonus() ? "T" : "F");
    }

    function isEligibleForBonus(rec) {
        // Implement actual business rules for bonus eligibility here
        return true;
    }
    
    exports.beforeLoad = beforeLoad;
    return exports;
});

Restrinja la ejecución en función de la acción que desencadenó el evento de usuario

// 1.0
// Utilize the type argument and raw Strings to filter your
// execution by the action
function beforeLoad(type, form, request) {
    // Don't do anything on APPROVE
    // Note that `type` is an Object, so we must use ==, not ===
    if (type == "approve") {
        return;
    }
    
    // Continue with normal business logic...
}

// 2.0
/**
 * @appliedtorecord employee
 * @NScriptType UserEventScript
 * @NApiVersion 2.x
 */
define([], function () {
    var exports = {};
    
    // Utilize context.type value and context.UserEventType enumeration
    // to filter your execution by the action
    function beforeLoad(context) {
        // Don't do anything on APPROVE
        if (context.type === context.UserEventType.APPROVE) {
            return;
        }
        
        // Continue with normal business logic...
    }
    
    exports.beforeLoad = beforeLoad;
    return exports;
});

Restrinja la ejecución según el contexto que activó el evento de usuario

En SuiteScript 1.0, recuperamos el contexto de ejecución actual utilizando nlapiGetContext().getExecutionContext() , luego comparamos el resultado con las cadenas en bruto apropiadas.

// 1.0 in Revealing Module pattern
var myNamespace = myNamespace || {};
myNamespace.example = (function () {
    var exports = {};
    
    function beforeLoad(type, form, request) {
        showBonusEligibility(form);
    }
    
    function showBonusEligibility(form) {
        // Doesn't make sense to modify UI form when the request
        // did not come from the UI
        var currentContext = nlapiGetContext().getExecutionContext();
        if (!wasTriggeredFromUi(currentContext)) {
            return;
        }
        
        // Continue with form modification...
    }
    
    function wasTriggeredFromUi(context) {
        // Current context must be compared to raw Strings
        return (context === "userinterface");
    }
    
    function isEligibleForBonus() {
        return true;
    }
    
    exports.beforeLoad = beforeLoad;
    return exports;
})();

En SuiteScript 2.0, obtenemos el contexto de ejecución actual importando el N/runtime del módulo y la inspección de su executionContext propiedad. Luego podemos comparar su valor con los valores de enumeración en tiempo de runtime.ContextType lugar de cadenas sin runtime.ContextType .

// 2.0
/**
 * @NScriptType UserEventScript
 * @NApiVersion 2.x
 */
define(["N/ui/serverWidget", "N/runtime"], function (ui, runtime) {
    var exports = {};
    
    function beforeLoad(scriptContext) {
        showBonusEligibility(scriptContext.form);
    }
    
    function showBonusEligibility(form) {
        // Doesn't make sense to modify the form if the 
        if (!wasTriggeredFromUi(runtime.executionContext)) {
            return;
        }
        
        // Continue with form modification...
    }

    function wasTriggeredFromUi(context) {
        // Context can be compared to enumeration from runtime module
        return (context === runtime.ContextType.USER_INTERFACE);
    }
    
    exports.beforeLoad = beforeLoad;
    return exports;
});


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow