SuiteScript 2.0: как я могу обновить внешний идентификатор с помощью скрипта

#netsuite #suitescript #suitescript2.0

#netsuite #suitescript #suitescript2.0

Вопрос:

Я пытаюсь создать файл скрипта в NetSuite с помощью SuiteScript 2.0 для обновления внешнего идентификатора записей классификации. По какой-то причине NetSuite обновляет все поля, кроме externalId.

Я хочу создать этот скрипт для обновления внешних идентификаторов, потому что большинство наших шаблонов CSV использует внешние идентификаторы для поиска основных данных, таких как учетные записи и классы. Дело в том, что NetSuite не отображает внешние идентификаторы в формах, и все записи, созданные через пользовательский интерфейс, не содержат информации в этом поле. Итак, идея здесь состоит в том, чтобы запланировать сценарий для автоматического заполнения этого поля на основе некоторых других полей.

Вот мой код

 /**
 * @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
    };
});
  

Ответ №1:

Вы неправильно указали идентификатор ExtermalId, он без заглавной буквы «I» как externalid . Это должно сработать. Как правило, собственные идентификаторы полей не содержат заглавных букв

Комментарии:

1. Спасибо за ваш ответ. Я попытался перейти на внешний идентификатор, и у меня все та же проблема. Поле не обновляется. 🙁

Ответ №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
    }
    });
  

Комментарии:

1. попробуйте это

Ответ №3:

Вы пробовали загружать запись, устанавливая внешний идентификатор, а затем сохраняя его?

Комментарии:

1. Да, я пытался, но тоже безуспешно. project = record.load({ тип: ‘классификация’, id:result.id , isDynamic: true }); project.setValue(‘externalid’,externalid); var project_id = project.save({ enableSourcing: true, ignoreMandatoryFields: true });

Ответ №4:

Да, я попытался загрузить запись и установить внешний идентификатор, у меня это сработало. Пожалуйста, используйте браузер записей для внутренних идентификаторов полей (externalid).

Комментарии:

1. Да, я пытался загрузить и установить, но тоже безуспешно. 🙁

Ответ №5:

Ваш код ищет классы без внешнего идентификатора и обновляет внешний идентификатор класса с помощью пустого значения, найденного при поиске. Похоже, вам не хватает поиска, чтобы узнать, каким должен быть новый внешний идентификатор.

Ответ №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()
})