netsuite
Benutzerereignis: Vor dem Ladeereignis
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
- 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;
});