2

我正在使用 2 个脚本在 NetSuite 中完成电子邮件功能。我有一个用户事件脚本,它创建一个按钮和一个客户端脚本,它提取所有需要的变量并根据在销售团队子列表中找到的值运行电子邮件。这是我的问题:在测试脚本时,一切都很好,因为我正在使用我的管理员角色进行测试(我知道新手错误)。当管理员以外的角色尝试通过单击按钮运行脚本时,由于角色权限问题​​(无法提取存储电子邮件地址的员工数据)而引发 nlObjError。是否可以在 UE 脚本(可以以管理员身份执行)中提取我需要的所有变量并将其传递给客户端脚本?

UE脚本:

function userEventCreateButton(type, form, request){

if (type != 'edit'){
        return;
    }
form.addButton('custpage_RequestSOW', "Request SOW", 'cs_RequestEmail()');
form.setScript('customscript224');  

客户端脚本:

...for (var y = 1; y <= nlapiGetLineItemCount('salesteam'); y++) {
        var z = nlapiGetLineItemValue('salesteam', 'salesrole', y);
        nlapiLogExecution('DEBUG', 'sales role', z);
        var user = nlapiGetUser();
        **var username = nlapiLoadRecord('employee', user);**
        var firstname = username.getFieldValue('firstname');
        var lastname = username.getFieldValue('lastname');
        var opptitle = nlapiGetFieldValue('title');
        var customer = nlapiGetFieldValue('customer');
        nlapiLogExecution('debug', 'user', user);
        if (z != 5){}
        else if (z == 5){
            var employee_name = nlapiGetLineItemValue('salesteam', 'employee', y);
            console.log(employee_name);
            **var engrecord = nlapiLoadRecord('employee', employee_name);**
            console.log(engrecord);
            var engemail = engrecord.getFieldValue('email');
            console.log(engemail);
            nlapiSendEmail(user...
4

2 回答 2

5

另一种选择是您可以将员工电子邮件添加到脚本中的隐藏字段,该 before load user event脚本部署为以管理员身份运行,然后在您的客户端脚本中您可以阅读电子邮件

//in a variable make a JSON of employee Ids to Emails
newForm.addField('custpage_emails', 'longtext','Email').setDisplayType(hidden).setValue(JSON.stringify(employeeIdEmails));

在客户端脚本中,您现在可以使用

var emploeeIdToEmails = JSON.parse(nlapiGetFieldValue('custpage_emails'));
于 2015-11-22T05:13:58.140 回答
3

我要做的是让客户端脚本调用一个无形的 Suitelet。套件将是生成和发送电子邮件的套件。如果将 Suitelet 的部署设置为 Execute As = Administrator,这应该可以解决权限问题。

另一种解决方案是在加载前脚本中获取数据,将其放入 JSON 对象并将其存储在记录上的自定义字段中。

于 2015-11-21T23:37:06.820 回答