将 TransferOrder 转换为 ItemFulfillment,但出现错误 SSS_INVALID_SUBLIST_OPERATION

问题描述 投票:0回答:1

我有一个套件脚本 (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 的值。

transform netsuite suitescript restlet fulfillment
1个回答
0
投票

当您从转移订单创建(转换)物料履行时,将使用与订单上的可履行行相对应的所有行来创建该物料履行。您无法像尝试使用 itemFulfillment.selectNewLine({ sublistId: 'item' }); 那样

添加
行。

如果您在 UI 中履行订单,您可以观察到这一点 - 没有添加行的选项,例如订单上有的选项。您还可以在

itemFulfillment.getLineCount('item')
之后立即使用
record.transform()
来验证这些行是否已存在。

如果需要更改项目行中的值,请使用

itemFulfillment.selectLine()
(而不是
selectNewLine()
)。请注意,您只能设置与 UI 中能够设置的值相同的值 - 例如,如果您的设置根据项目承诺限制履行,则您将无法设置大于承诺的履行数量数量 - 您的示例中的代码可能会出现的情况。

© www.soinside.com 2019 - 2024. All rights reserved.