Javascript 获得;执行“定义回调”时,所有SuiteScript API模块均不可用;使用自定义模块创建NetSuite脚本时

Javascript 获得;执行“定义回调”时,所有SuiteScript API模块均不可用;使用自定义模块创建NetSuite脚本时,javascript,netsuite,suitescript2.0,Javascript,Netsuite,Suitescript2.0,尝试在NetSuite中创建新脚本记录时,出现错误“评估脚本失败:在执行定义回调时,所有SuiteScript API模块都不可用”。我找不到任何可能导致这种情况的真实信息,在我的自定义模块中也看不到任何可疑的东西。我不能在这里发布代码,因为模块的长度接近2000行,并且有一些专有代码。正如我构建的另一个自定义模块在“上载脚本文件”阶段出现问题一样,如果我在脚本中删除对该模块的引用,该过程将继续,然后我可以返回到脚本并返回模块引用,之后一切似乎都正常工作 我发现唯一有用的信息是,错误可能是由于引

尝试在NetSuite中创建新脚本记录时,出现错误“评估脚本失败:在执行定义回调时,所有SuiteScript API模块都不可用”。我找不到任何可能导致这种情况的真实信息,在我的自定义模块中也看不到任何可疑的东西。我不能在这里发布代码,因为模块的长度接近2000行,并且有一些专有代码。正如我构建的另一个自定义模块在“上载脚本文件”阶段出现问题一样,如果我在脚本中删除对该模块的引用,该过程将继续,然后我可以返回到脚本并返回模块引用,之后一切似乎都正常工作

我发现唯一有用的信息是,错误可能是由于引用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
    };

});
我需要维护这种结构,因为并非所有返回的_值实际上都是搜索/查找结果。我会被迫将这个对象的构造封装在一个函数中吗?这会导致每次需要一个值时都进行查找吗?这是从1.0脚本转换而来的,并且在开始时只加载和设置一次,因此数据在整个时间都在那里,而不必重复获取

因此,我看到以下选项:

  • 将回调输出转换为函数并执行类似于
    在每个脚本的开头都有以下内容:
  • 找到一些方法来重新编写代码,以便任何使用该模块的脚本 仍然可以通过以下方式访问值:

  • 我更喜欢选项2。是否可能?

    您不能在入口点之外运行任何SuiteScript模块代码。您需要将数据检索封装在一个函数中,然后在入口点的开头调用该函数


    如果要避免多次回迁,可以在函数中利用memonization,或者
    N/cache
    N/session
    来存储数据。

    是的,似乎就是这样。我设法将事情混过来,这样我就可以调用一个函数来构建数据,同时仍然保留现有的数据结构引用。
        var _values = customModule.values();
    
        var _a = customModule.values.a;