Поиск…


параметры

параметр подробности
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;
});


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow