Sök…


parametrar

Parameter detaljer
SuiteScript 2.0 -
scriptContext { Object }
scriptContext.newRecord { N/record.Record } En referens till posten som laddas från databasen
scriptContext.type { UserEventType } UserEventType som utlöste den här användarhändelsen
scriptContext.form { N/ui/serverWidget.Form } En referens till UI-formuläret som kommer att ges
SuiteScript 1.0 -
type { Object } Åtgärdstyp som utlöste den här användarhändelsen
form { nlobjForm } En referens till UI-formuläret som kommer att återges
request { nlobjRequest } HTTP GET-begäran; endast tillgängligt när det utlöses av webbläsarförfrågningar

Anmärkningar

beforeLoad

Händelsen Before Load utlöses av alla läsoperationer på en post. Varje gång en användare, ett skript, en CSV-import eller en webbtjänstförfrågan försöker läsa en post från databasen blir händelsen Before Load avbruten.

Spela in åtgärder som utlöser en beforeLoad händelse:

  • Skapa
  • Redigera
  • Visa / ladda
  • Kopia
  • Skriva ut
  • E-post
  • Snabbtitt

Typiska användningsfall för beforeLoad

  • Ändra UI-formuläret innan användaren ser det
  • Ställ in standardfältvärden
  • Förbehandling av data

Användarhändelser kedjer inte

Kod skriven i användarhändelser kommer inte att utlösa några användarhändelser i andra poster. Att till exempel ladda den tillhörande kundposten från beforeLoad i en försäljningsorderpost kommer inte att utlösa beforeLoad . Även om du laddar en annan transaktionspost kommer inte användarhändelserna att avfyras.

NetSuite gör detta för att undvika att användarhändelser utlöser varandra i en oändlig slinga. Om du behöver användarhändelser till brand i en Chained sekvens kommer andra typer script (t.ex. RESTlets, Suitelets, schemalagda skript) måste sprutas in mellan händelserna.

Event Handler återgår void

beforeLoad händelsehanteraren föreLadd är void . All information som returneras från vår händelsehanterare har ingen effekt på systemet. Vi behöver inte returnera någonting från vår hanterarfunktion eftersom vi faktiskt inte kan göra något med dess returnerade värde.

Minimal: Logga in ett meddelande om Innan du laddar

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

Ändra UI-formuläret

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

Begränsa körningen baserat på åtgärden som utlöste användarhändelsen

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

Begränsa körningen baserat på det sammanhang som utlöste användarhändelsen

I SuiteScript 1.0 hämtar vi det aktuella exekveringssättet med nlapiGetContext().getExecutionContext() , jämför vi resultatet med lämpliga råa strängar.

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

I SuiteScript 2.0 får vi den aktuella exekveringssituationen genom att importera N/runtime modulen och inspektera den executionContext egenskapen. Vi kan sedan jämföra dess värde med värdena på runtime.ContextType uppräkning snarare än rå strängar.

// 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow