我有一个套件脚本 (RESTlet):在 NetSuite 上将 Transfer Order 转换为 Item Fulfillment
/**
* This SuiteScript RESTlet transforms a Transfer Order into an Item Fulfillment.
*
* u/NApiVersion 2.x
* u/NScriptType Restlet
* u/NModuleScope SameAccount
*/
define(['N/record'], function(record) {
function createItemFulfillment(data) {
var transferOrderId = data.transferOrderId;
var locationId = data.locationId; // Location ID for the Item Fulfillment
var lineItems = data.lineItems;
log.debug('data', data)
// Load the Transfer Order
var transferOrder = record.load({
type: record.Type.TRANSFER_ORDER,
id: transferOrderId,
isDynamic: true
});
var trandate = transferOrder.getValue('trandate');
var memo = transferOrder.getValue('memo');
log.debug('trandate', trandate)
log.debug('memo', memo)
// Create an Item Fulfillment
var itemFulfillment = record.transform({
fromType: 'transferorder',
fromId: transferOrderId,
toType: 'itemfulfillment',
isDynamic: true
});
var fulfill = itemFulfillment.
log.debug('itemFulfillment', itemFulfillment)
// Set the location on the Item Fulfillment
// itemFulfillment.setValue('location', locationId);
itemFulfillment.setValue({ fieldId: 'trandate', value: trandate }); //new Date()
// Loop through Transfer Order lines and copy them to Item Fulfillment
var lineItemCount = transferOrder.getLineCount({ sublistId: 'item' });
// Loop through Transfer Order line items and copy them to Item Fulfillment
for (var i = 0; i < lineItemCount; i++) {
try {
var itemId = transferOrder.getSublistValue({ sublistId: 'item', fieldId: 'item', line: i });
var quantity = transferOrder.getSublistValue({ sublistId: 'item', fieldId: 'quantity', line: i });
log.debug('item', itemId)
log.debug('quantity', quantity)
itemFulfillment.selectNewLine({ sublistId: 'item' });
itemFulfillment.setCurrentSublistValue({ sublistId: 'item', fieldId: 'item', value: itemId });
itemFulfillment.setCurrentSublistValue({ sublistId: 'item', fieldId: 'quantity', value: quantity });
// You can set more sublist fields if needed
itemFulfillment.commitLine({ sublistId: 'item' });
} catch (ex){
log.error('Sublist Operation Error', ex.message);
return { success: false, errorMessage: ex.message };
}
}
// Save the Item Fulfillment
var fulfillmentId = itemFulfillment.save();
return fulfillmentId;
}
function doPost(context) {
if (context) { // Check if there is a request object
var requestData = JSON.parse(JSON.stringify(context)); // Parse the request body
var response = createItemFulfillment(requestData);
return response;
} else {
return { error: 'abcxyz' };
}
}
return {
post: doPost
};
});
在 Postman 上,在 requestBody 处我设置了一个值 transferOrderID。
然后,我收到一个错误:
SSS_INVALID_SUBLIST_OPERATION:您尝试了无效的子列表或行项目操作。您要么尝试访问不存在的行上的字段,要么尝试从静态子列表中添加或删除行。
我尝试了 log.debug 并获取了 Transfer Order 的值,但我无法设置 Item Fulfillment 的值。
有人可以帮助我吗?我非常感谢您的支持。
我尝试了 log.debug 并获取了 Transfer Order 的值,但我无法设置 Item Fulfillment 的值。
当您从转移订单创建(转换)物料履行时,将使用与订单上的可履行行相对应的所有行来创建该物料履行。您无法像尝试使用 itemFulfillment.selectNewLine({ sublistId: 'item' });
那样
添加行。
如果您在 UI 中履行订单,您可以观察到这一点 - 没有添加行的选项,例如订单上有的选项。您还可以在
itemFulfillment.getLineCount('item')
之后立即使用 record.transform()
来验证这些行是否已存在。
如果需要更改项目行中的值,请使用
itemFulfillment.selectLine()
(而不是 selectNewLine()
)。请注意,您只能设置与 UI 中能够设置的值相同的值 - 例如,如果您的设置根据项目承诺限制履行,则您将无法设置大于承诺的履行数量数量 - 您的示例中的代码可能会出现的情况。