netsuite
Событие пользователя: до загрузки
Поиск…
параметры
параметр | подробности |
---|---|
SuiteScript 2.0 | - |
scriptContext | { Object } |
scriptContext.newRecord | { N/record.Record } Ссылка на запись, загружаемую из базы данных |
scriptContext.type | { UserEventType } Тип действия, вызвавшее это событие пользователя |
scriptContext.form | { N/ui/serverWidget.Form } Ссылка на форму пользовательского интерфейса, которая будет отображаться |
SuiteScript 1.0 | - |
type | { Object } Тип действия, вызвавший это событие пользователя |
form | { nlobjForm } Ссылка на форму пользовательского интерфейса, которая будет отображаться |
request | { nlobjRequest } запрос HTTP GET; доступно только при срабатывании запросов браузера |
замечания
beforeLoad
Событие « Before Load
запускается с помощью любой операции чтения в записи. Каждый раз, когда пользователь, сценарий, импорт CSV или запрос веб-службы пытаются прочитать запись из базы данных, запускается событие Before Load
.
Записывайте действия, которые вызывают событие beforeLoad
:
- Создайте
- редактировать
- Просмотр / загрузка
- копия
- Распечатать
- Эл. адрес
- Быстрый просмотр
Типичные случаи использования для beforeLoad
- Измените форму пользовательского интерфейса перед тем, как пользователь ее увидит.
- Установка значений по умолчанию для поля
- Предварительная обработка данных
Пользовательские события не связаны
Код, записанный в Пользовательских событиях, не будет запускать какие-либо пользовательские события в других записях. Например, при загрузке связанной записи клиента из beforeLoad
из записи о beforeLoad
не будет запускаться запись beforeLoad
записи beforeLoad
. Даже если вы загружаете другую запись транзакции, ее пользовательские события не будут запущены.
NetSuite делает это, чтобы пользовательские события не запускали друг друга в бесконечном цикле. Если вам нужно пользовательские события , чтобы стрелять в прикованной последовательности, другие типы сценариев (например , RESTlets, Suitelets, Запланированные скрипты) должны быть введены между событиями.
Обработчик событий возвращает void
Возвращаемый тип обработчика события beforeLoad
void
. Любые данные, возвращаемые нашим обработчиком событий, не влияют на систему. Нам не нужно возвращать что-либо из нашей функции обработчика, поскольку мы ничего не можем сделать с ее возвращаемым значением.
Минимальное: регистрировать сообщение перед загрузкой
// 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
};
});
Изменение формы пользовательского интерфейса
// 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;
});
Ограничить выполнение на основе действия, вызвавшего событие пользователя
// 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;
});
Ограничить выполнение на основе контекста, вызвавшего событие пользователя
В SuiteScript 1.0 мы извлекаем текущий контекст выполнения, используя nlapiGetContext().getExecutionContext()
, затем мы сравниваем результат с соответствующими исходными строками.
// 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;
})();
В SuiteScript 2.0, мы получаем текущий контекст выполнения путем импорта N/runtime
модуля и проверки его executionContext
свойства. Затем мы можем сравнить его значение со значениями runtime.ContextType
а не с исходными строками.
// 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;
});