在 NetSuite 中加载表单之前设置 line_item 列表值

Set line_item list value in before Load of form in NetSuite

如果“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
        };
    }
);

以上代码将获取行项目 ID 作为值,如果值为 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"
                        });

连数量都不更新

提前致谢

您无法更新现有记录,因此最终将是您的问题。 您可以在保存记录时的提交前事件或客户端事件脚本中解决此问题。

就提供的代码而言,尽管您没有推进行索引。你应该有:

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

但在那之后您的自定义字段是实际日期时间还是文本字段?

如果您尝试存储日期,则需要将 ISO 格式的日期字符串解析为实际日期。这与 SS1 不同,后者的日期必须是日期格式的字符串。

就项目组而言,自定义字段需要配置为保存组项目的值。

字段定义上有一个复选框“与项目组一起存储”

您尝试在所有更新后保存记录吗?

您可以尝试这种方法,首先加载记录,然后检查您的条件,相应地更新字段,然后执行记录保存。

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

然后您可以迭代订单项。使用 FOR 循环

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

   //fetch the item_id using getCurrentSublistValue

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

最后,

objRecord.save();

试一试,即使我不确定这种方法。如有任何问题,请告诉我。