首页 > 解决方案 > 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,但令我惊讶的是,事实并非如此,正如我上面所说的那样。

标签: constantsincludenetsuitesuitescript

解决方案


如果您有如下所示的 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
    }; 
});

推荐阅读