Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录
Posted
技术标签:
【中文标题】Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录【英文标题】:Netsuite - Suitescript User Event Before Load - Get Sublist Value Join -> Set sublist value custom child record 【发布时间】:2019-12-16 13:42:02 【问题描述】:我在加载之前创建了一个用户事件脚本(在任务表单上),它应该在任务表单上插入多个字段的子列表值(自定义子列表子记录)。 “交易”字段的来源。
我想知道如何遍历销售订单上的行,然后在自定义子记录中创建这些行。
这就是我所拥有的 - 这是有效的。但我错过了循环功能,我现在明白了。
如果有人可以提供帮助会很高兴:
更新:
我找到了一种循环子列表的方法。 但我无法使用“提交行”功能在自定义子列表中设置下一行。 有人知道怎么做吗?
/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/
define(['N/record'],
function(record)
function beforeLoad(context)
if (context.type !== context.UserEventType.CREATE)
return;
var newRecord = context.newRecord;
var objRecord = record.load(
type: record.Type.SALES_ORDER,
id: context.newRecord.getValue(fieldId: 'transaction'),
isDynamic: true
);
var objSublist = objRecord.getSublist(
sublistId: 'item'
);
var numLines = objRecord.getLineCount(
sublistId: 'item'
);
for (var line = 0; line < numLines.length; line++)
var objColumn = objSublist.getColumn(
fieldId: 'item'
);
var ObjField = objRecord.getSublistField(
sublistId: 'item',
fieldId: 'custcol12',
line: line
);
var sublistFieldValue = objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'custcol12',
line: line,
);
//SET Position#
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord251',
line: line,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'custcol12',
line: line)
);
//SET Item
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord252',
line: line,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'item',
line: line)
);
//SET Description
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord253',
line: line,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'description',
line: line)
);
//SET QUANTITY
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord257',
line: line,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'quantity',
line: line)
);
//SET INVENTORY DETAILS
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord254',
line: line,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'inventorydetail',
line: line)
);
//SET Condition
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord255',
line: line,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'custcol29',
line: line)
);
return
beforeLoad: beforeLoad,
;
);
【问题讨论】:
更新:我找到了一种循环子列表的方法。但我无法使用“提交行”功能在自定义子列表中设置下一行。有人知道怎么做吗? 【参考方案1】:据我了解,您需要创建自定义记录,这是任务记录上的子记录。
var objRecord = record.load(
type: record.Type.SALES_ORDER,
id: context.newRecord.getValue( fieldId: 'transaction' ),
isDynamic: true
);
var objSublist = objRecord.getSublist(
sublistId: 'item'
);
var numLines = objRecord.getLineCount(
sublistId: 'item'
);
for (var line = 0; line < numLines.length; line++)
//Get values from required fields of each line.
// create custom record for each SO line and make sure to add Parent (i.e. Task Record)
如果这没有帮助,请告诉我。
【讨论】:
感谢您的回复但是“为每个 SO 行创建自定义记录...”仅在提交后发生,对吗?因为我必须使用当前事务 ID 设置父字段值,这是不可能的,因为它尚未创建,对吧? 顺便说一句:也许我的想法一点都不好,而您知道更好的方法: 说明:我们在销售订单上有 10# 个不同的项目。 1. 我创建了一个任务记录并将其分配给今天的技术员#1(T#1)。 2. 我从子记录中删除除 Item#1 和 Item#8 之外的所有项目(在任务上) 3. 我创建第二个任务并将其分配给明天的 T#2 4. 我删除 item#1 和 item#8 因为他们已经分配给技术员#1 5. 两位技术员都知道他们必须修理哪个项目#【参考方案2】:想通了。 我忘记了 循环区域....
这里是最终代码
/**
*@NApiVersion 2.x
*@NScriptType UserEventScript
*/
define(['N/record'],
function(record)
function beforeLoad(context)
if (context.type !== context.UserEventType.CREATE)
return;
var newRecord = context.newRecord;
var objRecord = record.load(
type: record.Type.SALES_ORDER,
id: context.newRecord.getValue(fieldId: 'transaction'),
isDynamic: true
);
var objSublist = objRecord.getSublist(
sublistId: 'item'
);
var numLines = objRecord.getLineCount(
sublistId: 'item'
);
for (var i = 0; i < numLines; i++)
var ObjField = objRecord.getSublistField(
sublistId: 'item',
fieldId: 'custcol12',
line: i
);
var sublistFieldValue = objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'custcol12',
line: i,
value: true
);
//SET checkbox false
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord265',
line: i,
value: false);
//SET Position#
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord251',
line: i,
value: objRecord.getSublistValue(sublistId: 'item', fieldId: 'custcol12', line: i)
);
//SET Item
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord252',
line: i,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'item',
line: i,
value: true)
);
//SET Description
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord253',
line: i,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'description',
line: i,
value: true)
);
//SET QUANTITY
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord257',
line: i,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'quantity',
line: i,
value: true)
);
//GET INVENTORY DETAILS
objRecord.selectLine(
sublistId: 'item',
line: i
);
try
var subrec = objRecord.getCurrentSublistSubrecord(
sublistId: 'item',
fieldId: 'inventorydetail',
);
//SET INVENTORY DETAILS
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord254',
line: i,
value: subrec.getSublistValue(
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
line: 0
))
catch(err)
//SET Condition
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord255',
line: i,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'custcol29',
line: i,
value: true)
);
//PLANNED CHECKBOX
var planned = newRecord.getSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord265',
line: i);
// REPAIR TIME /H
newRecord.setSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord256',
line: i,
value: objRecord.getSublistValue(
sublistId: 'item',
fieldId: 'custcol37',
line: i,
value: true)
);
function beforeSubmit(context)
if (context.type !== context.UserEventType.CREATE)
return;
var newRecord = context.newRecord;
var numLines = newRecord.getLineCount(
sublistId: 'recmachcustrecord250');
for(var line = numLines; line> -1; line--)
var planned = newRecord.getSublistValue(
sublistId: 'recmachcustrecord250',
fieldId: 'custrecord265',
line: line);
if (planned == false)
newRecord.removeLine(
sublistId: 'recmachcustrecord250',
line: line,
ignoreRecalc: true)
return
beforeLoad: beforeLoad,
beforeSubmit: beforeSubmit,
;
);
【讨论】:
以上是关于Netsuite - 加载前的 Suitescript 用户事件 - 获取子列表值加入 -> 设置子列表值自定义子记录的主要内容,如果未能解决你的问题,请参考以下文章
使用php soapclient工具包显示访问netsuite wsdl无法加载wsdl