Javascript 获得;执行“定义回调”时,所有SuiteScript API模块均不可用;使用自定义模块创建NetSuite脚本时
尝试在NetSuite中创建新脚本记录时,出现错误“评估脚本失败:在执行定义回调时,所有SuiteScript API模块都不可用”。我找不到任何可能导致这种情况的真实信息,在我的自定义模块中也看不到任何可疑的东西。我不能在这里发布代码,因为模块的长度接近2000行,并且有一些专有代码。正如我构建的另一个自定义模块在“上载脚本文件”阶段出现问题一样,如果我在脚本中删除对该模块的引用,该过程将继续,然后我可以返回到脚本并返回模块引用,之后一切似乎都正常工作 我发现唯一有用的信息是,错误可能是由于引用define回调之外的模块引起的,但事实并非如此。模块中构造了两个大对象,它们是从回调返回的。我能想到的另一件事是,这个模块调用另一个自定义模块,但我没有看到任何东西表明我不能这样做 那么,总的来说,我应该寻找什么来解决这个错误呢?我真的找不到任何有用的或适用于这种情况的东西 编辑 好的,我相信我发现原因是由于在回调返回的对象/函数之外调用了搜索函数。以下是发生的情况的简化版本,因为管理了许多字段和值:Javascript 获得;执行“定义回调”时,所有SuiteScript API模块均不可用;使用自定义模块创建NetSuite脚本时,javascript,netsuite,suitescript2.0,Javascript,Netsuite,Suitescript2.0,尝试在NetSuite中创建新脚本记录时,出现错误“评估脚本失败:在执行定义回调时,所有SuiteScript API模块都不可用”。我找不到任何可能导致这种情况的真实信息,在我的自定义模块中也看不到任何可疑的东西。我不能在这里发布代码,因为模块的长度接近2000行,并且有一些专有代码。正如我构建的另一个自定义模块在“上载脚本文件”阶段出现问题一样,如果我在脚本中删除对该模块的引用,该过程将继续,然后我可以返回到脚本并返回模块引用,之后一切似乎都正常工作 我发现唯一有用的信息是,错误可能是由于引
/**
* 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
};
});
我需要维护这种结构,因为并非所有返回的_值实际上都是搜索/查找结果。我会被迫将这个对象的构造封装在一个函数中吗?这会导致每次需要一个值时都进行查找吗?这是从1.0脚本转换而来的,并且在开始时只加载和设置一次,因此数据在整个时间都在那里,而不必重复获取
因此,我看到以下选项:
在每个脚本的开头都有以下内容:
我更喜欢选项2。是否可能?您不能在入口点之外运行任何SuiteScript模块代码。您需要将数据检索封装在一个函数中,然后在入口点的开头调用该函数
如果要避免多次回迁,可以在函数中利用memonization,或者
N/cache
或N/session
来存储数据。是的,似乎就是这样。我设法将事情混过来,这样我就可以调用一个函数来构建数据,同时仍然保留现有的数据结构引用。
var _values = customModule.values();
var _a = customModule.values.a;