Установите значение списка line_item перед загрузкой формы в NetSuite

#netsuite #suitescript

Вопрос:

Я пытаюсь обновить дату поля, если «item_id равен 900».,

 define(['N/record', 'N/search'],
    function(record, search){
        function salesorderbeforeload(context){
            var currentRecord = context.newRecord;
           var sublistName="item";
           var start_Date="custcol_atlas_contract_start_date";
          var end_date="custcol_atlas_contract_end_date";
            var lines = currentRecord.getLineCount({sublistId: 'item'});
           log.debug({title:'lines',details:lines});     
            for (var i = 0; i < lines; i  ) {
                var itemId = (currentRecord.getSublistValue({
                     sublistId: "item",
                     fieldId: "item",
                     line: i
                }));     
var value=itemId;
             if(value=="900")
                  {
                  currentRecord.setSublistValue({
                            sublistId: "item",
                            fieldId: "custcol_atlas_contract_start_date",
                            line: 0,
                            value: "2021-09-09T07:00:00.000Z"
                        });
                  }
            }
    
        }
        return{
            beforeLoad: salesorderbeforeload
        };
    }
);
 

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

   currentRecord.setSublistValue({
                            sublistId: "item",
                            fieldId: "custcol_atlas_contract_start_date",
                            line: 0,
                            value: "2021-09-09T07:00:00.000Z"
                        });
 
         record=currentRecord.setSublistValue({
                            sublistId: "item",
                            fieldId: "quantity",
                            line: 0,
                            value: "3"
                        });
 

Даже количество не обновляется.

Заранее спасибо

Ответ №1:

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

Что касается предоставленного кода, хотя вы не продвигаете индекс строки. Тебе следовало бы:

 currentRecord.setSublistValue({
     sublistId: "item",
     fieldId: "custcol_atlas_contract_start_date",
     line: i, // NOT 0
     value: "2021-09-09T07:00:00.000Z"
});
 

но после этого является ли ваше пользовательское поле фактической датой или это текстовое поле?

если вы пытаетесь сохранить дату, вам нужно будет проанализировать строку даты в формате ISO до фактической даты. Это отличается от SS1, где даты должны были быть строками в формате даты.

Что касается групп товаров, то пользовательское поле необходимо настроить для сохранения значения для групп товаров.

В определении поля установлен флажок «Хранить с группами товаров».

введите описание изображения здесь

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

1. Привет, друзья, спасибо за комментарии. Да, строка : строка: i, // НЕ 0. поскольку я пытаюсь использовать ее в конкретной строке, я использовал строку :0. а что касается второго пункта, да, я сохраняю его в поле даты. Я попытался обновить количество, но количество также не обновляется .

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

3. Вы имеете в виду группу товаров?

4. да для группы товаров @bknight

5. Обновил свой ответ на то, что я предполагаю, является проблемой группы товаров.

Ответ №2:

Вы пробовали сохранить запись после всех обновлений?

Вы можете попробовать этот подход, когда сначала загружаете запись, затем проверяете свои условия, соответственно обновляете поля и затем выполняете сохранение записи.

 var objRecord = record.load({
   type: record.Type.SALES_ORDER, 
   id: 157,
   isDynamic: true,
});
 

Затем вы можете выполнить итерацию по позициям. Использовать ДЛЯ ЦИКЛА

 for(var j=0; j<numLines; j  ) {

   //fetch the item_id using getCurrentSublistValue

   if(item_id == 900) {
      //Perform the setSublistValue
   }
}
 

И, наконец,,

 objRecord.save();
 

Попробуйте, даже я не уверен в таком подходе. Дайте мне знать в случае возникновения каких-либо проблем.