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
    }; 
});
,

试试

define(['N/record','N/search','SuiteScripts/utils']

,

你需要确保你需要在另一个模块中访问的任何成员都需要使用 return 语句导出到源模块中