Заменить существующие подзаписи подсписка в 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();
Другие вопросы по тегам