サーチ…


パラメーター

パラメータ詳細
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;
});


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow