netsuite
Gebruikersgebeurtenis: vóór gebeurtenis laden
Zoeken…
parameters
Parameter | Details |
---|---|
SuiteScript 2.0 | - |
scriptContext | { Object } |
scriptContext.newRecord | { N/record.Record } Een verwijzing naar het record dat uit de database wordt geladen |
scriptContext.type | { UserEventType } Het actietype dat deze gebruikersgebeurtenis heeft geactiveerd |
scriptContext.form | { N/ui/serverWidget.Form } Een verwijzing naar het UI-formulier dat wordt weergegeven |
SuiteScript 1.0 | - |
type | { Object } Het actietype dat deze gebruikersgebeurtenis heeft geactiveerd |
form | { nlobjForm } Een verwijzing naar het UI-formulier dat wordt weergegeven |
request | { nlobjRequest } het HTTP GET-verzoek; alleen beschikbaar wanneer geactiveerd door browserverzoeken |
Opmerkingen
beforeLoad
De gebeurtenis Before Load
wordt geactiveerd door elke leesbewerking op een record. Telkens wanneer een gebruiker, een script, een CSV-import of een webserviceaanvraag een record uit de database probeert te lezen, wordt de gebeurtenis Before Load
geactiveerd.
Neem acties op die een beforeLoad
gebeurtenis activeren:
- creëren
- Bewerk
- Bekijken / laden
- Kopiëren
- Afdrukken
- Snelle kijk
Typische use cases voor beforeLoad
- Wijzig het UI-formulier voordat de gebruiker het ziet
- Stel standaard veldwaarden in
- Voorbewerking van gegevens
Gebruikersevents ketenen niet
Code geschreven in Gebruikersgebeurtenissen zal geen Gebruikersgebeurtenissen in andere records activeren. Bijvoorbeeld, het laden van de bijbehorende klant record uit de beforeLoad
van een verkooporder plaat zal niet leiden tot de klant record beforeLoad
. Zelfs als u een ander transactierecord laadt, worden de gebruikersgebeurtenissen niet geactiveerd.
NetSuite doet dit om te voorkomen dat gebruikersgebeurtenissen elkaar in een oneindige lus activeren. Als u wel gebruikersevenementen nodig hebt om in een kettingreeks te schieten, moeten andere scripttypen (bijv. RESTlets, Suitelets, Geplande scripts) tussen de gebeurtenissen worden geïnjecteerd.
Event Handler keert void
terug
Het beforeLoad
van de gebeurtenishandler beforeLoad
is void
. Gegevens die worden geretourneerd door onze gebeurtenishandler hebben geen effect op het systeem. We hoeven niets te retourneren vanuit onze handlerfunctie, omdat we eigenlijk niets kunnen doen met de geretourneerde waarde.
Minimaal: een bericht aanmelden vóór 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
};
});
Het UI-formulier wijzigen
// 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;
});
Beperk de uitvoering op basis van de actie die de gebruikersgebeurtenis heeft geactiveerd
// 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;
});
Beperk de uitvoering op basis van de context die de gebruikersgebeurtenis heeft geactiveerd
In SuiteScript 1.0 halen we de huidige uitvoeringscontext op met nlapiGetContext().getExecutionContext()
en vergelijken we het resultaat met de juiste onbewerkte tekenreeksen.
// 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 krijgen we de huidige uitvoeringscontext door de N/runtime
module te importeren en de eigenschap executionContext
inspecteren. We kunnen de waarde vervolgens vergelijken met de waarden van de runtime.ContextType
opsomming in plaats van onbewerkte tekenreeksen.
// 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;
});