[使用自定义模块创建NetSuite脚本时,获取“在执行您的定义回调时,所有SuiteScript API模块都不可用”

问题描述 投票:0回答:1

[尝试在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脚本转换而来的,并且仅在开始时加载和设置一次,因此数据始终都存在,而无需重复获取。

所以,我看到以下选项:

  1. 将回调输出转换为函数并执行类似的操作每个脚本开始处的以下内容:
    var _values = customModule.values();
  1. 找到某种方法来重做代码,以便任何使用该模块的脚本仍然可以通过以下方式访问值:
    var _a = customModule.values.a;

我非常希望选择#2。有可能吗?

javascript netsuite suitescript2.0
1个回答
0
投票

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

[如果要避免多次获取,可以在函数中利用备注,也可以利用N/cacheN/session来存储数据。

© www.soinside.com 2019 - 2024. All rights reserved.