【问题标题】:Custom Module in SuiteScript 2.0SuiteScript 2.0 中的自定义模块
【发布时间】:2020-02-28 01:39:59
【问题描述】:

我有一个 JavaScript 库文件,在为 NetSuite 创建 SuiteScripts 时,我会在整个脚本中使用它。我正在努力让自己为 2.0 做好准备,并开始向它推送新项目并远离 SuiteScript 1.0。所以,我将我的库文件转录为 2.0.0。但是,每当我创建一个新脚本并引用我的库时,我总是会收到以下消息:

SuiteScript 2.0 entry point scripts must implement one script type function.

但是,如果我从脚本中删除引用,它可以让我加载它并创建脚本记录。然后我可以放回参考并毫无问题地上传修改后的脚本文件。我一生都无法理解为什么会发生这种情况。如果重要的话,这里是文件中的 JSDoc 标头:

/** 
 * my.library.v2.js
 * @NApiVersion 2.x
 * @NModuleScope Public 
 */

脚本也可以在它自己的 JSDoc 标头之后像这样开始:

define(['N/error', 'N/record', 'N/runtime', 'N/search', './my.library.v2'],
function(error, record, runtime, search, myLib) {
    function doStuff(context) { /* do a bunch of stuff */ }
    return { pageInit : doStuff };
});

同样的问题,我在运行一些脚本时也遇到了麻烦。一旦我超越了前面提到的问题,当我将此模块应用于客户端脚本时,一切都会完美运行。但是,我无法成功获取服务器端脚本来启动该库。我经常收到此错误:

com.netsuite.suitescript.exception.NLServerSideScriptException: TypeError: Cannot call method "split" of undefined

让我失望的是这个库里面没有调用 String.split() 。而且我无法记录错误可能源自何处,因为它是在将模块加载到服务器脚本时发生的。我知道这就是正在发生的事情,因为无论操作类型如何都会发生这种情况,并且我创建的脚本总是有条件在进入细节之前检查特定的操作类型。例如,如果我让它检查“打印”操作,但打开记录以“编辑”。我什至将整个函数包裹在 try/catch 块中。

我在追查这些问题的原因方面运气不佳,所以我希望这两个问题都源于同一个原因。

【问题讨论】:

    标签: javascript netsuite suitescript2.0


    【解决方案1】:

    如果您可以发布/提供您的自定义模块,这将有助于缩小问题范围,但据我所知,您包含的一些模块在服务器端脚本中不可用,例如 @987654322 @。该模块仅在客户端脚本上可用,并且不会让您加载/创建您提到的服务器端脚本。因此,如果您删除这些模块并尝试更新/创建服务器端脚本,它应该可以工作。

    同样,有些模块只能用于服务器端脚本,如 N/task 模块,如果您尝试在客户端脚本上加载/要求它们,则会返回错误。

    【讨论】:

    • 由于各种原因,我无法共享库文件,包括将超过 3000 行代码粘贴到帖子中可能很麻烦。但我确实已经考虑了特定于客户端或服务器端功能的模块,并使其相当不可知,因为大多数库不需要 SuiteScript。这些是唯一添加的模块:['N/error', 'N/log', 'N/record', 'N/search', 'N/runtime']
    • 当模块中的某个地方出现错误时,我已经看到了这一点。尝试将其放入同一文件中的函数中,以查看是否仍然可能出现错误。另外我认为 jsdoc 中的模块范围应该类似于 Same Organisation
    • @MichaelMcCauley 您是否在脚本中的任何位置使用findSublistLineWithValue?如果是,请确保您搜索的值不是nil,即未定义或空值,因为我认为我遇到了类似的情况,这是由于正在搜索的值不存在,即它是空字符串。这应该可以修复您的 Cannot call method "split" of undefined 错误消息。
    • @Avi 不,没有一次调用任何包含文本“子列表”的内容。
    • @Sundance.101 这可能需要很长时间才能以这种方式整理出来。这个模块中写入了很多我经常重用的函数。我实际上正在考虑这样做,但并不期待。
    【解决方案2】:

    好的,所以代表我出现了错误。我的函数定义之一缺少“函数”。由于函数是作为对象的属性添加的,我可以理解为什么它一直被忽视,如果你不够小心,你的眼睛就会滑过问题。数组原型也存在问题,但我认为 SuiteScript 2.0 不需要原型。它是为与 SuiteScript 1.0 一起使用而开发的,因为与 NetSuite 中用于服务器端引擎的功能相比,许多方便的对象功能在 JS 版本发布之前尚未实现。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      相关资源
      最近更新 更多