无法在项目履行记录上设置库存详细信息 - Suitescript 2
Unable to set Inventory Detail on Item Fulfillment Record - Suitescript 2
在我的预定脚本中,我正在循环查看已转换的销售订单上的项目以完成项目,并在循环查看项目时尝试设置库存详细信息。库存详细信息看起来设置没有任何错误或问题,但是当我尝试保存时出现以下错误:
Please configure the inventory detail in line 2 of the item list.
在我的测试中,第二行是唯一需要库存详细信息的项目。这是代码:
var itemFulfillment = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrder.fields.id,
toType: record.Type.ITEM_FULFILLMENT,
isDynamic: true
});
var lineCount = itemFulfillment.getLineCount({ sublistId: 'item' });
for (var i = 0; i < lineCount; i++) {
itemFulfillment.selectLine({
sublistId: 'item',
line: i
});
var remainingQty = itemFulfillment.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantityremaining'
});
itemFulfillment.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: remainingQty
});
var inventoryDetail = itemFulfillment.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'inventorydetailreq'
});
var binItem = itemFulfillment.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'binitem'
});
if (inventoryDetail === 'T' && binItem === 'T') {
var inventoryDetailRecord = itemFulfillment.getCurrentSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail'
});
inventoryDetailRecord.selectNewLine({
sublistId: 'inventoryassignment'
});
inventoryDetailRecord.setCurrentSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
value: 10154 // I know this is the serial number record internal ID for my test
});
inventoryDetailRecord.setCurrentSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'quantity',
value: 1 //Again I know this so hard coded for testing
});
inventoryDetailRecord.commitLine({
sublistId: 'inventoryassignment'
});
}
}
var ifRecordId = itemFulfillment.save();
提交库存详细信息后,如果我检查 inventorydetail 子记录,我可以看到该行对应于第 2 行和正确的项目。不知道为什么当我保存时它说第 2 行需要库存!
{"type":"inventorydetail","isDynamic":true,"fields":{"itemdescription":"160W PREMIUM GRADE","nlloc":"0","nlsub":"1","trandate":"4/20/2017","_eml_nkey_":"0","type":"inventorydetail","subrecord_parent_tran_type":"ItemShip","nsapiCT":"1492728327986","sys_id":"-19281976277926580","nluser":"-4","nldept":"0","subrecord_transform_from_parent_id":"305887","subrecord_transform_from_parent_tran_type":"SalesOrd","tolocationusesbins":"F","item":"3312","quantity":"1.0","sys_parentid":"19281975969964536","templatestored":"F","entryformquerystring":"orderline=2&unit=&item=3312&quantity=1&subrecord_transform_from_parent_id=305887&trandate=4/20/2017&location=25&uitype=LOH_STRICT_VALIDATION&subrecord_transform_from_parent_tran_type=salesord&subrecord_parent_tran_type=itemship","nlrole":"3","uitype":"LOH_STRICT_VALIDATION","baserecordtype":"inventorydetail","baseunitquantity":"1.0","totalquantity":"1","orderline":"2","haslines":"T","tolocation":"-1","customform":"-10820","location":"25"},"sublists":{"inventoryassignment":{"currentline":{"binnumber":"","binnumber_display":"","existinginventorynumber":"","expirationdate":"","internalid":"-1","inventorydetail":"-1","issueinventorynumber":"","lotquantityavailable":"","quantity":"1","quantityavailable":"","receiptinventorynumber":"","sys_id":"-19281976361182898","sys_parentid":"-19281976277926580","tobinnumber":"","tobinnumber_display":"","#":"2"},"line 1":{"binnumber":"25","binnumber_display":"","existinginventorynumber":"10154","expirationdate":"","internalid":"10154.0","inventorydetail":"-1","issueinventorynumber":"10154","lotquantityavailable":"","quantity":"1.0","quantityavailable":"","receiptinventorynumber":"1793064_3312_NA","sys_id":"-19281976302211623","sys_parentid":"-19281976277926580","tobinnumber":"","tobinnumber_display":""}}}}
我已经尝试了所有我能想到的组合,并按照套件答案文档进行了开球。已尝试在项目详细信息/分配下的 Netsuite 记录浏览器中设置每个值,但仍然出现此错误。 help/insight 非常感谢。
看起来你正在尝试做这个客户端(例如 getCurrentSublistSubrecord
)
你不能。
我所做的是将必要的信息放入自定义字段,然后在用户事件脚本或计划脚本中执行此服务器端。
此外,代码更简单(类似于您的示例,但用于 bin 分配):
var invDetail = rec.getSublistSubrecord({
sublistId: targetList,
fieldId: 'inventorydetail',
line:idx
});
invDetail.setSublistValue({sublistId:'inventoryassignment', fieldId:'binnumber', line:0, value:bintId});
invDetail.setSublistValue({sublistId:'inventoryassignment', fieldId:'quantity', line:0, value:getV(qtyField)});
好吧,bknights 确实让我开始思考。我将转换切换为 standard 模式:
var itemFulfillment = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrder.fields.id,
toType: record.Type.ITEM_FULFILLMENT,
});
删除了 isDynamic: true 并在标准模式下使用转换记录。然后我只需要使用标准 API:
更新当前行库存详细信息
var inventoryDetailRecord = itemFulfillment.getSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail',
line: i
});
inventoryDetailRecord.setSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
value: serialId,
line: 0
});
我只需要设置 issueinventorynumber 就可以了,然后保存 Item Fulfillment 记录。绝对让我感到困惑,因为 SuiteScript 2 的子列表和子记录上的可用文档显示这是在动态模式下完成的,实际上只显示了如何创建新的库存编号而不是更新和发布一个。
我是 DJ。我是 NetSuite 的一名软件开发人员,在 SuiteScript 记录服务平台团队工作,我正在研究这个问题。
履行记录中的项目子列表就是我们所说的 "list machine"(与 "edit machine" 相对)。前者是固定条目列表,您可以在其中编辑值但不能添加或删除行,而 "edit machines" 是您还可以添加和删除行的列表。在履行记录中,项目列表属于不可行编辑的种类。
编辑机每一行的inventorydetail
子记录(在item fulfillment record上)只有当你在isDynamic
为false的模式下操作子记录时才会起作用,因为item machine是一个列表机器,与动态子记录不兼容。遗憾的是,无法指定子记录的 isDynamic
属性,因为该属性当前是从父记录继承的。
但是,您可以欺骗它做正确的事!因此,瑞安的第二个解决方案。此解决方案解决所有限制,如下所示:
将销售订单转换为履行记录时,省略 isDynamic
会导致履行记录创建为 DeferredDynamic
('standard' 模式)记录。
获取inventorydetail
子记录时,会从父记录继承isDynamic
属性,即创建为DeferredDynamicSubrecord
而不是 DynamicSubRecord
。这使得它与项目列表机器兼容,因此解决方案有效。
我正在与产品团队合作,看看是否有办法让 SuiteScript V2 以最适合其环境的模式(或至少是可以工作的模式)自动创建每个子记录。或者我们可以提供一种方法来指定子记录的 isDynamic
参数,当 creating/obtaining 来自记录或子记录时。
在 Dynamic 模式下 inventorydetail 也有同样的问题。由于某种原因,无法使用 getLineCount({ sublistId: 'item' })
获取行数
在我的例子中,我使用了 while true 循环并在选择每一行时发现错误,对你来说最好的(而且很可能是唯一的)解决方案是标准模式而不是动态模式。
我认为您需要阅读有关动态模式的文档中的小字。当您创建一条新的记录时 运行d,您需要执行以下操作:
- 插入新行
- Select换行
- 提交新行
我认为您的代码缺少插入功能。我 运行 遇到了和你一样的情况,我最终通过 运行 插入新行和 select 新行命令解决了这个问题。
在我的预定脚本中,我正在循环查看已转换的销售订单上的项目以完成项目,并在循环查看项目时尝试设置库存详细信息。库存详细信息看起来设置没有任何错误或问题,但是当我尝试保存时出现以下错误:
Please configure the inventory detail in line 2 of the item list.
在我的测试中,第二行是唯一需要库存详细信息的项目。这是代码:
var itemFulfillment = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrder.fields.id,
toType: record.Type.ITEM_FULFILLMENT,
isDynamic: true
});
var lineCount = itemFulfillment.getLineCount({ sublistId: 'item' });
for (var i = 0; i < lineCount; i++) {
itemFulfillment.selectLine({
sublistId: 'item',
line: i
});
var remainingQty = itemFulfillment.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantityremaining'
});
itemFulfillment.setCurrentSublistValue({
sublistId: 'item',
fieldId: 'quantity',
value: remainingQty
});
var inventoryDetail = itemFulfillment.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'inventorydetailreq'
});
var binItem = itemFulfillment.getCurrentSublistValue({
sublistId: 'item',
fieldId: 'binitem'
});
if (inventoryDetail === 'T' && binItem === 'T') {
var inventoryDetailRecord = itemFulfillment.getCurrentSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail'
});
inventoryDetailRecord.selectNewLine({
sublistId: 'inventoryassignment'
});
inventoryDetailRecord.setCurrentSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
value: 10154 // I know this is the serial number record internal ID for my test
});
inventoryDetailRecord.setCurrentSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'quantity',
value: 1 //Again I know this so hard coded for testing
});
inventoryDetailRecord.commitLine({
sublistId: 'inventoryassignment'
});
}
}
var ifRecordId = itemFulfillment.save();
提交库存详细信息后,如果我检查 inventorydetail 子记录,我可以看到该行对应于第 2 行和正确的项目。不知道为什么当我保存时它说第 2 行需要库存!
{"type":"inventorydetail","isDynamic":true,"fields":{"itemdescription":"160W PREMIUM GRADE","nlloc":"0","nlsub":"1","trandate":"4/20/2017","_eml_nkey_":"0","type":"inventorydetail","subrecord_parent_tran_type":"ItemShip","nsapiCT":"1492728327986","sys_id":"-19281976277926580","nluser":"-4","nldept":"0","subrecord_transform_from_parent_id":"305887","subrecord_transform_from_parent_tran_type":"SalesOrd","tolocationusesbins":"F","item":"3312","quantity":"1.0","sys_parentid":"19281975969964536","templatestored":"F","entryformquerystring":"orderline=2&unit=&item=3312&quantity=1&subrecord_transform_from_parent_id=305887&trandate=4/20/2017&location=25&uitype=LOH_STRICT_VALIDATION&subrecord_transform_from_parent_tran_type=salesord&subrecord_parent_tran_type=itemship","nlrole":"3","uitype":"LOH_STRICT_VALIDATION","baserecordtype":"inventorydetail","baseunitquantity":"1.0","totalquantity":"1","orderline":"2","haslines":"T","tolocation":"-1","customform":"-10820","location":"25"},"sublists":{"inventoryassignment":{"currentline":{"binnumber":"","binnumber_display":"","existinginventorynumber":"","expirationdate":"","internalid":"-1","inventorydetail":"-1","issueinventorynumber":"","lotquantityavailable":"","quantity":"1","quantityavailable":"","receiptinventorynumber":"","sys_id":"-19281976361182898","sys_parentid":"-19281976277926580","tobinnumber":"","tobinnumber_display":"","#":"2"},"line 1":{"binnumber":"25","binnumber_display":"","existinginventorynumber":"10154","expirationdate":"","internalid":"10154.0","inventorydetail":"-1","issueinventorynumber":"10154","lotquantityavailable":"","quantity":"1.0","quantityavailable":"","receiptinventorynumber":"1793064_3312_NA","sys_id":"-19281976302211623","sys_parentid":"-19281976277926580","tobinnumber":"","tobinnumber_display":""}}}}
我已经尝试了所有我能想到的组合,并按照套件答案文档进行了开球。已尝试在项目详细信息/分配下的 Netsuite 记录浏览器中设置每个值,但仍然出现此错误。 help/insight 非常感谢。
看起来你正在尝试做这个客户端(例如 getCurrentSublistSubrecord
)
你不能。
我所做的是将必要的信息放入自定义字段,然后在用户事件脚本或计划脚本中执行此服务器端。
此外,代码更简单(类似于您的示例,但用于 bin 分配):
var invDetail = rec.getSublistSubrecord({
sublistId: targetList,
fieldId: 'inventorydetail',
line:idx
});
invDetail.setSublistValue({sublistId:'inventoryassignment', fieldId:'binnumber', line:0, value:bintId});
invDetail.setSublistValue({sublistId:'inventoryassignment', fieldId:'quantity', line:0, value:getV(qtyField)});
好吧,bknights 确实让我开始思考。我将转换切换为 standard 模式:
var itemFulfillment = record.transform({
fromType: record.Type.SALES_ORDER,
fromId: salesOrder.fields.id,
toType: record.Type.ITEM_FULFILLMENT,
});
删除了 isDynamic: true 并在标准模式下使用转换记录。然后我只需要使用标准 API:
更新当前行库存详细信息 var inventoryDetailRecord = itemFulfillment.getSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail',
line: i
});
inventoryDetailRecord.setSublistValue({
sublistId: 'inventoryassignment',
fieldId: 'issueinventorynumber',
value: serialId,
line: 0
});
我只需要设置 issueinventorynumber 就可以了,然后保存 Item Fulfillment 记录。绝对让我感到困惑,因为 SuiteScript 2 的子列表和子记录上的可用文档显示这是在动态模式下完成的,实际上只显示了如何创建新的库存编号而不是更新和发布一个。
我是 DJ。我是 NetSuite 的一名软件开发人员,在 SuiteScript 记录服务平台团队工作,我正在研究这个问题。
履行记录中的项目子列表就是我们所说的 "list machine"(与 "edit machine" 相对)。前者是固定条目列表,您可以在其中编辑值但不能添加或删除行,而 "edit machines" 是您还可以添加和删除行的列表。在履行记录中,项目列表属于不可行编辑的种类。
编辑机每一行的inventorydetail
子记录(在item fulfillment record上)只有当你在isDynamic
为false的模式下操作子记录时才会起作用,因为item machine是一个列表机器,与动态子记录不兼容。遗憾的是,无法指定子记录的 isDynamic
属性,因为该属性当前是从父记录继承的。
但是,您可以欺骗它做正确的事!因此,瑞安的第二个解决方案。此解决方案解决所有限制,如下所示:
将销售订单转换为履行记录时,省略
isDynamic
会导致履行记录创建为DeferredDynamic
('standard' 模式)记录。获取
inventorydetail
子记录时,会从父记录继承isDynamic
属性,即创建为DeferredDynamicSubrecord
而不是DynamicSubRecord
。这使得它与项目列表机器兼容,因此解决方案有效。
我正在与产品团队合作,看看是否有办法让 SuiteScript V2 以最适合其环境的模式(或至少是可以工作的模式)自动创建每个子记录。或者我们可以提供一种方法来指定子记录的 isDynamic
参数,当 creating/obtaining 来自记录或子记录时。
在 Dynamic 模式下 inventorydetail 也有同样的问题。由于某种原因,无法使用 getLineCount({ sublistId: 'item' })
获取行数
在我的例子中,我使用了 while true 循环并在选择每一行时发现错误,对你来说最好的(而且很可能是唯一的)解决方案是标准模式而不是动态模式。
我认为您需要阅读有关动态模式的文档中的小字。当您创建一条新的记录时 运行d,您需要执行以下操作:
- 插入新行
- Select换行
- 提交新行
我认为您的代码缺少插入功能。我 运行 遇到了和你一样的情况,我最终通过 运行 插入新行和 select 新行命令解决了这个问题。