【问题标题】:SuiteScript 2.0: How can I update the externalID through ScriptSuiteScript 2.0:如何通过脚本更新 externalID
【发布时间】:2020-09-18 22:08:17
【问题描述】:

我正在尝试使用 SuiteScript 2.0 在 NetSuite 上创建一个脚本文件来更新分类记录的外部 ID。出于某种原因,NetSuite 会更新除 externalId 之外的所有字段。

我想创建这个脚本来更新 externalIds,因为我们的 CSV 模板大部分都使用 externalIds 来查找主数据,例如帐户和类。关键是,NetSuite 不会在表单上显示 externalIds 以及通过 UI 创建的所有记录,在此字段中没有任何信息。所以这里的想法是安排一个脚本来根据其他一些字段自动填充这个字段。

这是我的代码

/**
 * @NApiVersion 2.0
 * @NScriptType ScheduledScript
 */
define(['N/runtime','N/log','N/record','N/search'], function(runtime,log,record,search) {
    
    var qtyProjects=0;
    
    function execute(context) {
        try
        {
            log.debug('Script Started');
            
            /********** Update Project (Classes) External ID ***********/
            var classificationSearchObj = search.create({
                   type: "classification",
                   filters:
                   [    
                        ["externalid","is","@NONE@"]
                        
                   ],
                   columns:
                    [
                        search.createColumn({name: "name",label: "Name"}),
                        search.createColumn({name: "custrecord_proj_full_name",label: "FullName"}),
                        search.createColumn({name: "custrecord_proj_manager",label: "ProjectManager"}),
                        search.createColumn({name: "externalid",label: "Externalid"})
                    ]
                });
                                        
                var prj_srch = classificationSearchObj.run().each(processProject);
                    
                log.debug('Quantity of projects: ',qtyProjects);
                
                    
                
                log.debug('Script Finished');
        }
        catch(e)
        {
            log.debug('Error',e.message);
        }           
    }
    
     function processProject(result) {
        var number = result.getValue({name: "name"});
        var fullName = result.getValue({name: "custrecord_proj_full_name"});
        var externalid = result.getValue({name: "externalid"});
        
        qtyProjects++;
        
        log.debug('Update Number|Name|ExternalId: ',number + " | " + fullName + " | " + externalid);
     
     record.submitFields({
            "type":'classification',
            "id": result.id,
            "values": {
                "externalId": externalid,
                "custrecord_proj_full_name": "Test Ale 2",
            }
        });
        
        /*
        var project_id = project.save({
                                        enableSourcing: true,
                                        ignoreMandatoryFields: true
                                        }); 
        */
        
        //return true;
     }
    
    
    return {
        execute: execute
    };
});

【问题讨论】:

    标签: netsuite suitescript suitescript2.0


    【解决方案1】:

    您拼错了 ExtermalId 的 id,它没有大写“I”为externalid。这应该有效。 根据经验,本地字段 id 中没有大写字母

    【讨论】:

    • 感谢您的回答。我试图更改为 externalid ,但我仍然遇到同样的问题。该字段未更新。 :(
    【解决方案2】:
        /**
        * @NApiVersion 2.0
        * @NScriptType ScheduledScript
        */
        define(['N/runtime','N/log','N/record','N/search'], function(runtime,log,record,search) {
    
        function execute(context) {
        var so = record.load({
                        type: record.Type.SALES_ORDER,
                        id: 12345
                    });
          so.setValue('external','6789');
        so.save();
        return true;
        }       
    
        return {
        execute: execute
        }
        });
    

    【讨论】:

    • 试试这个
    【解决方案3】:

    您是否尝试过加载记录,设置外部 id 然后保存它?

    【讨论】:

    • 是的,我试过但也没有成功。 project = record.load({ type: 'classification', id:result.id, isDynamic: true }); project.setValue('externalid',externalid); var project_id = project.save({ enableSourcing: true, ignoreMandatoryFields: true });
    【解决方案4】:

    是的,我尝试加载记录并设置外部 ID,它对我有用。请使用记录浏览器获取字段的内部 id (externalid)。

    【讨论】:

    • 是的,我尝试加载和设置,但也没有成功。 :(
    【解决方案5】:

    您的代码正在搜索没有 externalid 的类,并使用在搜索中找到的空值更新类的 externalid。您似乎缺少查找新的 externalid 应该是什么的查找。

    【讨论】:

      【解决方案6】:

      我发现 SuiteScript 2 语法不能用于更新 externalId。对我来说,这根本没有任何作用:

      instance.setValue({ fieldId: 'externalid', value: 'FOO1' })
      

      虽然使用旧语法实际上更新externalId

      instance.setValue('externalid', 'FOO1')
      

      您可以在查看记录的同时在浏览器的控制台中运行它来试用:

      require(['N/record'], function (record) {
        const instance = record.load({ type: 'customerpayment', id: 5000 })
        instance.setValue('externalid', 'PYMT1234')
        instance.save()
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 2018-05-14
        • 1970-01-01
        相关资源
        最近更新 更多