繁体   English   中英

SuiteScript 2.0 中的自定义模块

[英]Custom Module in SuiteScript 2.0

我有一个 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 块中。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM