netsuite
ユーザーイベント:Loadイベントの前
サーチ…
パラメーター
パラメータ | 詳細 |
---|---|
SuiteScript 2.0 | - |
scriptContext | { Object } |
scriptContext.newRecord | { N/record.Record }データベースからロードされるレコードへの参照 |
scriptContext.type | { UserEventType }このユーザーイベントをトリガしたアクションの種類 |
scriptContext.form | { N/ui/serverWidget.Form }レンダリングされるUIフォームへの参照 |
SuiteScript 1.0 | - |
type | { Object }このユーザイベントをトリガしたアクションタイプ |
form | { nlobjForm }レンダリングされるUIフォームへの参照 |
request | HTTP GET要求を{ nlobjRequest }します。ブラウザの要求によってトリガされた場合のみ利用可能 |
備考
beforeLoad
Before Load
イベントは、レコードの読み取り操作によってトリガーされます。ユーザー、スクリプト、CSVインポート、またはWebサービス要求がデータベースからレコードを読み取ろうとするたびに、 Before Load
イベントが発生します。
beforeLoad
イベントをトリガーするアクションを記録する:
- 作成する
- 編集
- ビュー/ロード
- コピー
- 印刷
- Eメール
- クイックビュー
beforeLoad
典型的な使用例
- ユーザーが表示する前にUIフォームを変更する
- デフォルトのフィールド値を設定する
- データ前処理
ユーザーイベントは連鎖しません
ユーザーイベントで書かれたコードは、 他のレコードのユーザーイベントをトリガーしません。たとえば、Sales OrderレコードのbeforeLoad
から関連するCustomerレコードをロードしても、CustomerレコードのbeforeLoad
はトリガーされません 。別のトランザクションレコードを読み込んでいても、そのユーザーイベントは発生しません。
NetSuiteはこれを実行して、無限ループ内でお互いにトリガするユーザイベントを回避します。連鎖シーケンスで起動するためにユーザーイベントが必要な場合は、他のスクリプトタイプ(RESTlets、Suitelets、Scheduled Scriptsなど)をイベントの間に挿入する必要があります。
イベントハンドラが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
};
});
UIフォームの変更
// 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()
を使用して現在の実行コンテキストを取得し、結果を適切な生のStringと比較します。
// 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
ではなく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;
});