Recherche…


Paramètres

Paramètre Détails
SuiteScript 2.0 -
scriptContext { Object }
scriptContext.newRecord { N/record.Record } Une référence à l'enregistrement chargé depuis la base de données
scriptContext.type { UserEventType } Le type d'action qui a déclenché cet événement utilisateur
scriptContext.form { N/ui/serverWidget.Form } Une référence au formulaire d'interface utilisateur qui sera rendu
SuiteScript 1.0 -
type { Object } Le type d'action qui a déclenché cet événement utilisateur
form { nlobjForm } Une référence au formulaire d'interface utilisateur qui sera rendu
request { nlobjRequest } la requête HTTP GET; disponible uniquement lorsqu'il est déclenché par des requêtes du navigateur

Remarques

beforeLoad

L'événement Before Load est déclenché par toute opération de lecture sur un enregistrement. Chaque fois qu'un utilisateur, un script, une importation CSV ou une demande de service Web tente de lire un enregistrement de la base de données, l'événement Before Load est déclenché.

Enregistrez les actions qui déclenchent un événement beforeLoad :

  • Créer
  • modifier
  • Afficher / charger
  • Copie
  • Impression
  • Email
  • Aperçu rapide

Cas d'utilisation typiques pour beforeLoad

  • Modifier le formulaire de l'interface utilisateur avant que l'utilisateur ne le voit
  • Définir les valeurs de champs par défaut
  • Prétraitement des données

Les événements utilisateur ne sont pas enchaînés

Le code écrit dans les événements utilisateur ne déclenche aucun événement utilisateur sur d' autres enregistrements. Par exemple, le chargement de l’enregistrement Client associé à l’ beforeLoad - beforeLoad d’un enregistrement de commande client ne déclenchera pas le beforeLoad l’enregistrement beforeLoad . Même si vous chargez un autre enregistrement Transaction, ses événements utilisateur ne seront pas déclenchés.

NetSuite fait cela pour éviter que des événements utilisateur se déclenchent dans une boucle infinie. Si vous avez besoin d' événements utilisateur pour tirer dans une séquence enchaînée, d' autres types de script (par exemple RESTlets, Suitelets, Scripts programmés) devront être injectés entre les événements.

Le gestionnaire d'événements renvoie un void

Le type de retour du gestionnaire d'événements beforeLoad est void . Toute donnée renvoyée par notre gestionnaire d'événement n'a aucun effet sur le système. Nous n'avons pas besoin de renvoyer quelque chose de notre fonction de gestionnaire car nous ne pouvons rien faire avec sa valeur renvoyée.

Minimal: enregistrer un message sur Before Load

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

Modifier le formulaire d'interface utilisateur

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

Restreindre l'exécution en fonction de l'action qui a déclenché l'événement utilisateur

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

Restreindre l'exécution en fonction du contexte qui a déclenché l'événement utilisateur

Dans SuiteScript 1.0, nous récupérons le contexte d'exécution actuel à l'aide de nlapiGetContext().getExecutionContext() , puis nous comparons le résultat aux chaînes brutes appropriées.

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

Dans SuiteScript 2.0, nous obtenons le contexte d'exécution actuel en important le module N/runtime et en inspectant sa propriété executionContext . Nous pouvons ensuite comparer sa valeur aux valeurs de l'énumération runtime.ContextType plutôt qu'aux chaînes brutes.

// 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow