Suche…


Parameter

Parameter Einzelheiten
SuiteScript 2.0 -
scriptContext { Object }
scriptContext.newRecord { N/record.Record } Ein Verweis auf den Datensatz, der aus der Datenbank geladen wird
scriptContext.type { UserEventType } Der Aktionstyp, der dieses Benutzerereignis ausgelöst hat
scriptContext.form { N/ui/serverWidget.Form } Ein Verweis auf das UI-Formular, das gerendert wird
SuiteScript 1.0 -
type { Object } Der Aktionstyp, der dieses Benutzerereignis ausgelöst hat
form { nlobjForm } Ein Verweis auf das UI-Formular, das gerendert wird
request { nlobjRequest } die HTTP-GET-Anforderung; Nur verfügbar, wenn durch Browseranfragen ausgelöst

Bemerkungen

beforeLoad

Das Before Load Ereignis wird durch eine Leseoperation in einem Datensatz ausgelöst. Jedes Mal, wenn ein Benutzer, ein Skript, ein CSV-Import oder eine Web-Service-Anforderung versucht, einen Datensatz aus der Datenbank zu lesen, wird das Before Load Ereignis ausgelöst.

beforeLoad Aktionen auf, die ein beforeLoad Ereignis auslösen:

  • Erstellen
  • Bearbeiten
  • Ansicht / Laden
  • Kopieren
  • Drucken
  • Email
  • Schnellansicht

Typische Anwendungsfälle für beforeLoad

  • Ändern Sie das Benutzeroberflächenformular, bevor es dem Benutzer angezeigt wird
  • Legen Sie Standardfeldwerte fest
  • Datenvorverarbeitung

Benutzerereignisse werden nicht verkettet

In Benutzerereignissen geschriebener Code löst keine Benutzerereignisse in anderen Datensätzen aus. Das Laden des verknüpften beforeLoad aus dem beforeLoad eines Verkaufsauftragsdatensatzes löst beispielsweise nicht den beforeLoad des beforeLoad . Auch wenn Sie einen anderen Transaktionsdatensatz laden, werden dessen Benutzerereignisse nicht ausgelöst.

NetSuite tut dies, um zu verhindern, dass sich Benutzerereignisse in einer Endlosschleife auslösen. Wenn Sie Benutzerereignisse tun müssen , in einer verketteten Sequenz feuern, andere Script - Typen (zB RESTlets, Suitelets, Geplante Skripts) müssen injiziert zwischen den Ereignissen werden.

Event Handler gibt void

Der Rückgabetyp des beforeLoad Ereignishandlers ist void . Daten, die von unserem Event-Handler zurückgegeben werden, haben keine Auswirkungen auf das System. Wir müssen nichts von unserer Handler-Funktion zurückgeben, da wir mit dem zurückgegebenen Wert nichts tun können.

Minimal: Protokollieren Sie eine Nachricht vor dem Laden

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

Ändern des Benutzeroberflächenformulars

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

Schränken Sie die Ausführung basierend auf der Aktion ein, die das Benutzerereignis ausgelöst hat

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

Schränken Sie die Ausführung basierend auf dem Kontext ein, der das Benutzerereignis ausgelöst hat

In SuiteScript 1.0 rufen wir den aktuellen Ausführungskontext mit nlapiGetContext().getExecutionContext() und vergleichen das Ergebnis mit den entsprechenden rohen Strings.

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

In SuiteScript 2.0 erhalten wir den aktuellen Ausführungskontext, indem wir das N/runtime Modul importieren und seine Eigenschaft executionContext . Wir können dann seinen Wert mit den Werten der runtime.ContextType Aufzählung anstatt mit rohen Strings vergleichen.

// 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow