Suitescript 2.0为不同类型的项目使用不同的表单

时间:2017-08-22 13:32:12

标签: netsuite

我的公司运行几种不同类型的项目,并希望根据所选项目记录中正在运行的项目类型,以不同方式查看项目记录。

我有选择要使用的表单的字段,标题为"自定义表单" (这是一个选择字段)和我们的员工输入项目类型的字段" custentityjt_fie_pro_projecttype" (也是选择字段)。

我在加载用户事件脚本之前创建了以下内容以尝试实现此目的:

/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(["N/record"], function(r)  {
function beforeLoad(context)  {
    var currentRecord = context.newRecord;
    var projectType = currentRecord.getValue({
        fieldId: "custentityjt_fie_pro_projecttype",
    });

    currentRecord.setValue({
        fieldID: 'customform',
        value: projectType
        })

}

return {
    beforeLoad: beforeLoad,
}

})

在编辑模式下加载项目记录时,自定义表单选择不会更改,在视图模式下加载项目记录时,我会得到以下结果:

{"type":"error.SuiteScriptError","name":"UNEXPECTED_ERROR","message":null,"stack":["anonymous(N/recordService)","beforeLoad(/SuiteScripts/setForm.js:13)"],"cause":{"type":"internal error","code":"UNEXPECTED_ERROR","details":null,"userEvent":"beforeload","stackTrace":["anonymous(N/recordService)","beforeLoad(/SuiteScripts/setForm.js:13)"],"notifyOff":false},"id":"","notifyOff":false}

我对Netsuite和编程很新,所以请温柔一点:)

1 个答案:

答案 0 :(得分:1)

您需要使用客户端脚本才能更改自定义表单。最好的办法是在两个地方进行,即pageInit()和fieldChanged()。另一个潜在的问题是尝试将自定义表单值设置为在字段custentityjt_fie_pro_projecttype的getValue中检索的值。从示例中的currentRecord.getValue()返回的值将是在那里设置的Project Type的自定义列表值的内部id(返回到自定义列表,您将看到列出的内部id值)。这是一个问题,因为在设置自定义表单字段的值时,您需要引用要使用的自定义表单的内部标识。如果引用的项目类型的内部ID与自定义表单内部标识匹配,那将是非常值得注意的。我的建议是在代码中创建一个哈希表来存储引用(假设你的项目类型列表没有经常更改)。尝试一下(只需确保更新查找变量中的值,因为它们已经组成。

/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
define([
   'N/record'
],
  function (
    nsRecord
) {
    //
    // lookup table where the object property represents the internal IDs of the 
    // custom list values, and the value of each property represents the 
    // internal id's of the Custom Forms you wish to associate with each list value.
    //
    var lookup = {
        1: 122,
        2: 123,
        3: 125,
        4: 136
    };

    function fieldChanged(context) {
        var field = context.fieldId;
        var rec = context.currentRecord;
        var projId;

        if (field === 'custentityjt_fie_pro_projecttype' && rec.getValue('custentityjt_fie_pro_projecttype')) {
            projId = rec.getValue('custentityjt_fie_pro_projecttype');

            if (lookup[projId]) {
                rec.setValue({
                    fieldId: 'customform',
                    value: lookup[projId],
                    ignoreFieldChange: true,
                    fireSlavingSync: true
                });
            }
        }
    }

    function pageInit(context) {
        var rec = context.currentRecord;
        var mode = context.mode;
        var projId;
        var formId;

        if (mode !== 'create') {
            formId = rec.getValue('customform');
            projId = rec.getValue('custentityjt_fie_pro_projecttype');

            if (lookup[projId] && lookup[projId] !== formId) {
                rec.setValue({
                    fieldId: 'customform',
                    value: lookup[projId],
                    ignoreFieldChange: true,
                    fireSlavingSync: true
                });
            }
        }
    }

    return {
        fieldChanged: fieldChanged,
        pageInit: pageInit
    };
});