在 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();
试一试,即使我不确定这种方法。如有任何问题,请告诉我。
如果“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();
试一试,即使我不确定这种方法。如有任何问题,请告诉我。