Creating an assembly build from a workorder using suitescript

I am new at this. I am trying to create an assembly build from an existing work order.

but every time I try it says you can not set items for the build
this is my script so far . does anyone have an idea why assemblyBuild.setSublistValue is not working

/**
* @NApiVersion 2.x
* @NScriptType Suitelet
*/

define([‘N/record’, ‘N/log’], function (record, log) {
function createAssemblyBuild(workOrderId, buildQuantity, itemsInfo) {
var workOrderRecord = record.load({
type: record.Type.WORK_ORDER,
id: workOrderId
});

var assemblyBuild = record.create({
type: record.Type.ASSEMBLY_BUILD
});

assemblyBuild.setValue({
fieldId: ‘assemblyitem’,
value: workOrderRecord.getValue(‘assemblyitem’)
});

assemblyBuild.setValue({
fieldId: ‘location’,
value: workOrderRecord.getValue(‘location’)
});

assemblyBuild.setValue({
fieldId: ‘quantity’,
value: buildQuantity
});

assemblyBuild.setValue({
fieldId: ‘workorder’,
value: workOrderId
});

var componentsSublistId = ‘component’;
itemsInfo.forEach(function (itemInfo) {
var itemIndex = assemblyBuild.findSublistLineWithValue({
sublistId: componentsSublistId,
fieldId: ‘item’,
value: itemInfo.itemId
});

if (itemIndex !== -1) {
assemblyBuild.setSublistValue({
sublistId: componentsSublistId,
fieldId: ‘quantity’,
line: itemIndex,
value: itemInfo.itemQuantity
});

// Find the bin number from the original work order
var woItemIndex = workOrderRecord.findSublistLineWithValue({
sublistId: ‘item’,
fieldId: ‘item’,
value: itemInfo.itemId
});

if (woItemIndex !== -1) {
var binNumber = workOrderRecord.getSublistValue({
sublistId: ‘item’,
fieldId: ‘binnumber’,
line: woItemIndex
});

// Create an inventory detail record for the item
var inventoryDetail = record.create({
type: record.Type.INVENTORY_DETAIL
});

// Consume serial numbers with the provided quantity
itemInfo.serialNumbers.forEach(function (serialNumberInfo) {
inventoryDetail.selectNewLine({
sublistId: ‘inventoryassignment’
});

inventoryDetail.setCurrentSublistValue({
sublistId: ‘inventoryassignment’,
fieldId: ‘issueinventorynumber’,
value: serialNumberInfo.serialNumber
});

inventoryDetail.setCurrentSublistValue({
sublistId: ‘inventoryassignment’,
fieldId: ‘binnumber’,
value: binNumber
});

inventoryDetail.setCurrentSublistValue({
sublistId: ‘inventoryassignment’,
fieldId: ‘quantity’,
value: serialNumberInfo.quantity
});

inventoryDetail.commitLine({
sublistId: ‘inventoryassignment’
});
});

// Set the inventory detail on the assembly build component
var inventoryDetailId = inventoryDetail.save();
assemblyBuild.setSublistValue({
sublistId: componentsSublistId,
fieldId: ‘inventorydetail’,
line: itemIndex,
value: inventoryDetailId
});
}
}
});

var buildId = assemblyBuild.save();
return buildId;
}

function onRequest(context) {
if (context.request.method === ‘POST’) {
var requestBody = JSON.parse(context.request.body);

try {
var buildId = createAssemblyBuild(
requestBody.workOrderId,
requestBody.buildQuantity,
requestBody.itemsInfo
);

context.response.write({
output: ‘Assembly build record created successfully with ID:’ + buildId
});
} catch (error) {
log.error(‘Error’, error.message);
context.response.write({ output: ‘Error:’ + error.message });
}
} else {
context.response.write({ output: ‘This Suitelet only accepts POST requests.’ });
}
}

return {
onRequest: onRequest
};
});

Rookie Asked on July 6, 2023 in SuiteScript.
Add Comment
2 Answer(s)

Make sure to add commitLine when setting the sublist value (add it after the setSublistValue).  You can also try, selectLine using the itemIndex then setCurrentSublistValue.

Rookie Answered on July 7, 2023.
Add Comment

selectLine and commitLine throw an exception

Rookie Answered on July 9, 2023.
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.
  • This site made possible by our sponsors:   Tipalti   Celigo   Limebox   Become a Sponsor   Become a Sponsor