[尝试在NetSuite中创建新的脚本记录时,出现错误“无法评估脚本:执行您的定义回调时,所有SuiteScript API模块都不可用”。我找不到可能导致此问题的任何真实信息,并且在我的自定义模块中看不到任何可疑的信息。我无法在此处发布代码,因为该模块的长度接近2,000行,并且其中包含一些专有代码。与我构建的另一个自定义模块相同,该模块在“上传脚本文件”阶段出现问题,如果我删除了脚本中对该模块的引用,则过程继续进行,然后可以返回到脚本并返回该模块引用,之后一切似乎都能正常工作。
我发现唯一有用的信息是,该错误可能是由在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。有可能吗?
您不能在入口点之外运行任何SuiteScript模块代码。您需要将数据检索封装在一个函数中,然后在入口点的开头调用该函数。
[如果要避免多次获取,可以在函数中利用备注,也可以利用N/cache
或N/session
来存储数据。