问题描述
我有一个 NetSuite SuiteScript 文件 (2.0),我想在其中包含我构建的小型实用程序库。我可以做到这一点,并访问包含库中的函数。但是我无法访问我在该库中定义的常量 - 我必须在主文件中重新声明它们。
这是主文件:
define(['N/record','N/search','./utils.js'],function (record,search,utils) {
function pageInit(scriptContext) {
isUserAdmin = isCurrentUserAdmin(contextRecord);
if (isUserAdmin) {
alert('Administrator Role ID is ' + ADMINISTRATOR_ROLE);
// Do something for Admin users
}
return;
}
return {
pageInit: pageInit
};
});
你可以看到我在其中包含了文件 ./utils.js
。这是utils.js
:
const ADMINISTRATOR_ROLE = 11;
function isCurrentUserAdmin(currentRecord) {
return ADMINISTRATOR_ROLE == nlapiGetRole();
}
这是整个文件 - 没有别的。
在主文件中,对函数 isCurrentUserAdmin
的调用工作正常。它正确地告诉我当前用户是否是管理员。请注意,我不必在对 isCurrentUserAdmin
的调用前加上 utils.
(utils.isCurrentUserAdmin
不起作用 - 它给我错误 JS_EXCEPTION TypeError utils is undefined
)。但是当代码到达使用 ADMINSTRATOR_ROLE
的行时,我收到错误 JS_EXCEPTION ReferenceError ADMINISTRATOR_ROLE is not defined
。顺便说一句,如果我将 ADMINISTRATOR_ROLE
的常量定义放在主文件而不是 utils.js
中,当 utils.js
尝试使用它时,我会遇到相同的错误。我可以让它工作的唯一方法是,如果我在两个文件中定义了常量。
为什么包含对函数有效,而对常量无效?我是否错误地包括了图书馆?我以为我必须将它用作 utils.isCurrentUserAdmin
而不仅仅是 isCurrentUserAdmin
,但令我惊讶的是事实并非如此,正如我上面所说。
解决方法
如果您有如下所示的 utils.js,您可以在主文件中使用 utils.ADMINISTRATOR_ROLE 和 utils.isCurrentUserAdmin()。
/**
*@NApiVersion 2.0
*/
define ([],function() {
const ADMINISTRATOR_ROLE = 11;
function isCurrentUserAdmin() {
// check here
}
return {
ADMINISTRATOR_ROLE: ADMINISTRATOR_ROLE,isCurrentUserAdmin: isCurrentUserAdmin
};
});
,
试试
define(['N/record','N/search','SuiteScripts/utils']
,你需要确保你需要在另一个模块中访问的任何成员都需要使用 return 语句导出到源模块中