Заменить существующие подзаписи подсписка в NetSuite SuiteScript 2.0
Я боролся с этим некоторое время сейчас. Это может быть ошибка в NetSuite, но я решил проконсультироваться с ниндзя SuiteScript, прежде чем согласиться с этой идеей.
Вот сценарий: у меня есть заказ на продажу со строкой для много пронумерованного запаса, в котором детали запаса предварительно заполнены информацией о партии: Вот содержание этой детали инвентаря:
Я пытаюсь составить сценарий выполнения для этого заказа на продажу, но мне нужно изменить детали инвентаризации во время выполнения. Это работает нормально и допустимо в пользовательском интерфейсе NetSuite, но я не могу заставить Рестлет SuiteScript сделать то же самое. Вот тот же код из Restlet:
function runFullfillmentTest() {
var fulfillment = record.transform({
fromType: 'salesorder',
fromId: 21424,
toType: 'itemfulfillment'
});
var fulfillmentLineCount = fulfillment.getLineCount({
sublistId: 'item'
});
for (var i = 0; i < fulfillmentLineCount; i++) {
fulfillment.setSublistValue({
sublistId: 'item',
line: i,
fieldId: 'itemreceive',
value: false
});
}
// Orderline 3 has the following inventory details pre-set
// Line | Lot Number | Quantity
// 0 | L0001 | 2
// 1 | L0002 | 1
// 2 | L0003 | 1
var fulfillmentLineForItem = fulfillment.findSublistLineWithValue({
sublistId: 'item',
fieldId: 'orderline',
value: '3'
});
fulfillment.setSublistValue({
sublistId: 'item',
line: fulfillmentLineForItem,
fieldId: 'itemreceive',
value: true
});
fulfillment.setSublistValue({
sublistId: 'item',
line: fulfillmentLineForItem,
fieldId: 'quantity',
value: '5'
});
var inventorydetailForFulfillmentLine = fulfillment.getSublistSubrecord({
sublistId: 'item',
fieldId: 'inventorydetail',
line: fulfillmentLineForItem
});
inventorydetailForFulfillmentLine.setValue({
fieldId: 'quantity',
value: '5'
});
var existingLineCount = inventorydetailForFulfillmentLine.getLineCount({
sublistId: 'inventoryassignment'
});
for (var i = 0; i < existingLineCount; i++) {
inventorydetailForFulfillmentLine.removeLine({
sublistId: 'inventoryassignment',
line: 0
});
}
inventorydetailForFulfillmentLine.insertLine({
sublistId: 'inventoryassignment',
line: 0
});
inventorydetailForFulfillmentLine.setSublistValue({
sublistId: 'inventoryassignment',
line: 0,
fieldId: 'issueinventorynumber',
value: '154' // L0003
});
// Interestingly enough, if you take out the line below, you'll
// get the error: "USER_ERROR : Please enter value(s) for: Serial/Lot Number, Bin, Quantity"
// So its almost like issueinventorynumber and quantity aren't being seen as
// being set by NetSuite
// I think it does see binnumber, but thinks it is invalid because it
// believes the issueinventorynumber to be is blank
inventorydetailForFulfillmentLine.setSublistValue({
sublistId: 'inventoryassignment',
line: 0,
fieldId: 'binnumber',
value: '111' // W.3.0.0
});
inventorydetailForFulfillmentLine.setSublistValue({
sublistId: 'inventoryassignment',
line: 0,
fieldId: 'quantity',
value: '5'
});
// This will throw error:
// "INVALID_FLD_VALUE : You have entered an Invalid Field Value 111 for the following field: binnumber"
return fulfillment.save();
}
Как показано в комментариях, я получаю ошибку: "INVALID_FLD_VALUE : You have entered an Invalid Field Value 111 for the following field: binnumber"
В этом случае 111
является действительным внутренним идентификатором для bin W.3.0.0
Достаточно интересно, если удалить строку, которая устанавливает Binnumber для 111
тогда я получаю ошибку: "USER_ERROR : Please enter value(s) for: Serial/Lot Number, Bin, Quantity"
Похоже, я пропускаю поля лота и количества, но я их просто устанавливаю? Я думаю, что это жалуется на 111
будучи недействительным, поскольку считает, что номер партии не был установлен, и нуждается в этом для проверки номера бина.
Любая помощь или другие идеи, чтобы попробовать приветствуются. Я также попытался повторно использовать существующие строки (вместо вставки новой), но не повезло.
0 ответов
Попытайтесь сохранить объект детализации инвентаря перед сохранением выполнения предмета. Помните, что вы используете getSublistSubrecord, который загружает запись. Поэтому после внесения изменений вам нужно будет сохранить запись:
inventorydetailForFulfillmentLine.save();
return fulfillment.save();