При попытке создать новую запись сценария в NetSuite я получаю сообщение об ошибке «Не удалось выполнить оценку сценария: все модули API SuiteScript недоступны при выполнении обратного вызова определения». Я не могу найти никакой реальной информации о том, что может вызвать это, и я не вижу ничего в моем пользовательском модуле, который выглядит подозрительно. Я не могу опубликовать код здесь, так как модуль имеет длину около 2000 строк и содержит некоторый собственный код. Как и в случае с другим пользовательским модулем, который я создал, у которого были проблемы на этапе «Загрузить файл сценария», если я удалю ссылку на модуль в сценарии, процесс продолжится, а затем я смогу go вернуться к сценарию и вернуть модуль ссылка, в которой после этого все, кажется, работает правильно.
Единственная информация, которая мне показалась полезной, заключалась в том, что ошибка могла быть вызвана ссылкой на модуль вне обратного вызова define, но это не так. Модуль имеет два больших объекта, созданных внутри, и они возвращаются из обратного вызова. Единственное, о чем я могу думать, это то, что этот модуль вызывает другой пользовательский модуль, но я не видел ничего такого, что говорит, что я не могу этого сделать.
Итак, в целом, на что мне обратить внимание устранить эту ошибку? Я действительно не могу найти ничего полезного или подходящего для этой ситуации.
РЕДАКТИРОВАТЬ
Хорошо, так что я считаю, что я обнаружил, что причина заключается в вызове функции поиска извне объекта / функции, возвращаемой для обратного вызова. Вот упрощенная версия того, что происходит, поскольку многие поля и значения управляются:
/**
* custom.module.js
* @NApiVersion 2.x
* @NModuleScope Public
*/
define(['N/search'],
/**
* @param {search} search
*/
function(search) {
var fields = new Array("a","b","c","d","e");
var lValues = search.lookupFields({
type : "customrecord_ng_cs_settings"
, id : "1"
, columns : fields
});
var _values = {
a : lValues.a
, b : lValues.b
, c : lValues.c
, d : lValues.d
, e : lValues.e
};
var _funcs = {
func_a : function() {
// do stuff
}
, func_b : function() {
// do stuff
}
, func_c : function() {
// do stuff
}
};
return {
value : _values
, func : _funcs
};
});
Мне нужно поддерживать такую структуру, поскольку не все, что возвращается в _values, на самом деле является результатом поиска / поиска , Я собираюсь быть вынужденным заключить конструкцию этого объекта в функцию? И приведет ли это к тому, что поиск будет происходить каждый раз, когда требуется значение? Это преобразование из сценария 1.0, и оно загружается и устанавливается только один раз в начале, поэтому все данные хранятся там все время без необходимости повторной выборки.
Итак, я вижу следующие параметры:
- Преобразует выходные данные обратного вызова в функцию и выполняет что-то вроде
в начале каждого сценария:
var _values = customModule.values();
Найдите способ переработать код, чтобы любой скрипт, использующий модуль, мог по-прежнему получать доступ к значениям следующим образом:
var _a = customModule.values.a;
Я бы очень предпочел вариант № 2. Возможно ли это?