我对 SuiteScript 来说是个新手,对 Javascript 来说也只是个新手。
我有一个文件,其中包含我的所有功能等,我将其上传到 NetSuite 并部署 - 一切都很好。但我想创建并使用一个类,从我上传的文件创建它的实例。
那么我该怎么做呢?类声明是否需要位于另一个 Javascript 文件中?我可以在一个文件中完成所有操作吗?如果我可以在一个文件中完成所有操作,语法是什么?我无法让它在一个文件中工作;它总是抛出一个错误。如果我可以将其全部放入另一个文件中,该文件中的语法是什么?那么如何将其包含在第一个文件中?
这是我的 Javascript 文件的缩短版本:
define(['N/search'],
function (search)
{
function fieldChanged(scriptContext)
{
// Code here where I create and run a search. I want to put each result
// from the search into an instance of the class I want to create and
// store all of those instances in an array.
}
return {
fieldChanged: fieldChanged
};
});
我知道,类声明看起来像这样:
class Result
{
constructor(name)
{
this.name = name;
}
}
但是我该将该声明放在哪里呢?
抱歉,如果这是一个非常愚蠢的问题。
底线,您需要打字稿并确保使用下面的 tsconfig。我们在工作中虔诚地使用它
tsconfig.json
{
"compilerOptions": {
"module": "amd",
"target": "es5",
"sourceMap": false,
"removeComments": false,
"experimentalDecorators": true,
"outDir": "src/FileCabinet/SuiteScripts/dist/"
},
"compileOnSave": true,
"exclude": [
"node_modules"
]
}
示例类
export class MyNetsuiteClass extends NetsuiteActor {
constructor(modules: INetsuiteModules) {
super(modules);
}
GetAccountID(): string {
try {
return this.modules.runtime.accountId;
} catch (e) {
throw e.details || e.message || e.toString();
}
}
}
SS2.0中的类使用
// declare the modules you want to inject
var modules = {record: record, search: search, runtime: runtime};
// fianlly, instantiate your class with all 3 required params
var myNetsuiteClass = new myCustomModule.MyNetsuiteClass(modules);
var accountId = myNetsuiteClass.GetAccountID();
最好的想法是将你的类包装在
define([], function() {})
中,返回类。然后将该文件包含在您的 SuiteScript 文件中,就像这样 define(['N/search', './myClass.js'], function(search, myClass) {})
。