constants - NetSuite SuiteScript - 常量和包含
问题描述
我有一个 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
};
});
推荐阅读
- django - Django Profile 不使用 UserModel 保存其他字段
- c# - 尝试按列名获取值时无法将“String”转换为“int”
- php - 如何将 joomla 的日期格式更改为 d/m/Y?
- sql-server - 如何导出选择查询的消息部分(JARED ZAGELBAUM RESTORE for SQL Server Express)
- node.js - AWS Lambda 函数在控制台上测试时有效,但在 CloudWatch 事件触发时无效
- machine-learning - H2O AutoML 如何处理因子变量?
- javascript - 单击对象中最后一个图像之后的图像时,我将如何切换图像?
- c# - 文本框数据在 ddl 中反映两次
- javascript - 添加新字段时为 FieldArray 中的 redux-form 字段提供默认值
- excel - Excel公式减去日期