【问题标题】:Unable to set Inventory Detail on Item Fulfillment Record - Suitescript 2无法在项目履行记录上设置库存详细信息 - Suitescript 2
【发布时间】:2017-09-17 12:02:01
【问题描述】:

在我的计划脚本中,我正在循环浏览转换后的销售订单上的商品到商品履行,并在循环浏览商品时尝试设置库存详细信息。库存详细信息看起来设置没有任何错误或问题,但当我尝试保存时,我收到以下错误:

请在项目列表的第 2 行配置库存详细信息。

在我的测试中,第二行是唯一需要库存详细信息的项目。代码如下:

 var itemFulfillment = record.transform({
      fromType: record.Type.SALES_ORDER,
      fromId: salesOrder.fields.id,
      toType: record.Type.ITEM_FULFILLMENT,
      isDynamic: true
    });

 var lineCount = itemFulfillment.getLineCount({ sublistId: 'item' });

for (var i = 0; i < lineCount; i++) {
          itemFulfillment.selectLine({
            sublistId: 'item',
            line: i
          });

          var remainingQty = itemFulfillment.getCurrentSublistValue({
            sublistId: 'item',
            fieldId: 'quantityremaining'
          });

          itemFulfillment.setCurrentSublistValue({
                  sublistId: 'item',
                  fieldId: 'quantity',
                  value: remainingQty
                });

          var inventoryDetail = itemFulfillment.getCurrentSublistValue({
            sublistId: 'item',
            fieldId: 'inventorydetailreq'
          });

          var binItem = itemFulfillment.getCurrentSublistValue({
            sublistId: 'item',
            fieldId: 'binitem'
          });

          if (inventoryDetail === 'T' && binItem === 'T') {

            var inventoryDetailRecord = itemFulfillment.getCurrentSublistSubrecord({
              sublistId: 'item',
              fieldId: 'inventorydetail'
            });                  

            inventoryDetailRecord.selectNewLine({
              sublistId: 'inventoryassignment'
            });


            inventoryDetailRecord.setCurrentSublistValue({
              sublistId: 'inventoryassignment',
              fieldId: 'issueinventorynumber',
              value: 10154 // I know this is the serial number record internal ID for my test
            });

            inventoryDetailRecord.setCurrentSublistValue({
              sublistId: 'inventoryassignment',
              fieldId: 'quantity',
              value: 1 //Again I know this so hard coded for testing
            });

            inventoryDetailRecord.commitLine({
              sublistId: 'inventoryassignment'
            });
          }
        }

        var ifRecordId = itemFulfillment.save();

提交库存详细信息后,如果我检查 inventorydetail 子记录,我可以看到该行对应于第 2 行和正确的项目。不知道为什么当我保存它时说第 2 行需要库存!

{"type":"inventorydetail","isDynamic":true,"fields":{"itemdescription":"160W PREMIUM GRADE","nlloc":"0","nlsub":"1","trandate":"4/20/2017","_eml_nkey_":"0","type":"inventorydetail","subrecord_parent_tran_type":"ItemShip","nsapiCT":"1492728327986","sys_id":"-19281976277926580","nluser":"-4","nldept":"0","subrecord_transform_from_parent_id":"305887","subrecord_transform_from_parent_tran_type":"SalesOrd","tolocationusesbins":"F","item":"3312","quantity":"1.0","sys_parentid":"19281975969964536","templatestored":"F","entryformquerystring":"orderline=2&unit=&item=3312&quantity=1&subrecord_transform_from_parent_id=305887&trandate=4/20/2017&location=25&uitype=LOH_STRICT_VALIDATION&subrecord_transform_from_parent_tran_type=salesord&subrecord_parent_tran_type=itemship","nlrole":"3","uitype":"LOH_STRICT_VALIDATION","baserecordtype":"inventorydetail","baseunitquantity":"1.0","totalquantity":"1","orderline":"2","haslines":"T","tolocation":"-1","customform":"-10820","location":"25"},"sublists":{"inventoryassignment":{"currentline":{"binnumber":"","binnumber_display":"","existinginventorynumber":"","expirationdate":"","internalid":"-1","inventorydetail":"-1","issueinventorynumber":"","lotquantityavailable":"","quantity":"1","quantityavailable":"","receiptinventorynumber":"","sys_id":"-19281976361182898","sys_parentid":"-19281976277926580","tobinnumber":"","tobinnumber_display":"","#":"2"},"line 1":{"binnumber":"25","binnumber_display":"","existinginventorynumber":"10154","expirationdate":"","internalid":"10154.0","inventorydetail":"-1","issueinventorynumber":"10154","lotquantityavailable":"","quantity":"1.0","quantityavailable":"","receiptinventorynumber":"1793064_3312_NA","sys_id":"-19281976302211623","sys_parentid":"-19281976277926580","tobinnumber":"","tobinnumber_display":""}}}}

我已经尝试了所有我能想到的组合,并按照套件答案文档进行操作。已尝试在“项目详细信息/分配”下的 Netsuite 记录浏览器中设置每个值,但仍然出现此错误。非常感谢您的帮助/见解。

【问题讨论】:

    标签: netsuite suitescript2.0


    【解决方案1】:

    我是 DJ。我是 NetSuite 的软件开发人员,在 SuiteScript 记录服务平台团队工作,我只是在研究这个问题。

    履行记录上的项目子列表就是我们所说的“列表机器”(与“编辑机器”相对)。前者是固定条目列表,您可以在其中编辑值但不能添加或删除行,而“编辑机器”是您还可以添加和删除行的列表。在履行记录上,项目列表是不可编辑的品种。

    编辑机器每一行上的inventorydetail 子记录(在单册履行记录上)只有当您在isDynamic 为假的模式下操作子记录时才会起作用,因为单册机器是列表机器并且是与动态子记录不兼容。不幸的是,无法指定子记录的isDynamic 属性,因为该属性当前是从父记录继承的。

    但是,您可以欺骗它做正确的事!因此,瑞安的第二个解决方案。此解决方案可解决以下所有限制:

    1. 将销售订单转换为履行记录时,省略 isDynamic 会导致履行记录创建为 DeferredDynamic(“标准”模式)记录。

    2. 在获取inventorydetail子记录时,它会从父记录继承isDynamic属性,这意味着它将被创建为DeferredDynamicSubrecord而不是DynamicSubRecord。这使得它与项目列表机器兼容,因此该解决方案有效。

    我正在与产品团队合作,看看是否有办法让 SuiteScript V2 以最适合其环境的模式(或至少一种可行的模式)自动创建每个子记录。或者我们可以提供一种方法来在从记录或从子记录创建/获取子记录时为子记录指定isDynamic 参数。

    【讨论】:

    • 不确定DeferredDynamic 是什么意思。如果您省略isDynamic,它是默认为动态模式还是标准模式? DeferredDynamic 也是动态的吗?
    • DeferredDynamic 是标准模式的另一个术语。它们的意思是一样的。
    【解决方案2】:

    您似乎正在尝试执行此客户端(例如使用getCurrentSublistSubrecord

    你不能。

    我所做的是将必要的信息放入自定义字段,然后在用户事件脚本或计划脚本中执行此服务器端。

    另外,代码更简单(类似于您的示例,但用于 bin 分配):

    var invDetail = rec.getSublistSubrecord({
        sublistId: targetList,
        fieldId: 'inventorydetail', 
        line:idx
    });
    invDetail.setSublistValue({sublistId:'inventoryassignment', fieldId:'binnumber', line:0, value:bintId});
    invDetail.setSublistValue({sublistId:'inventoryassignment', fieldId:'quantity', line:0, value:getV(qtyField)});
    

    【讨论】:

    • 对不起,我应该提到这是一个计划脚本。
    【解决方案3】:

    我认为您需要阅读有关动态模式的文档中的小字。当您创建全新的记录时,您需要执行以下操作:

    1. 插入新行
    2. 选择新行
    3. 提交新行

    我认为您的代码缺少插入功能。我遇到了和你一样的情况,最后通过运行insert new line和select new line命令解决了这个问题。

    【讨论】:

      【解决方案4】:

      inventorydetail动态 模式下也遇到了同样的问题。由于某种原因,使用 getLineCount({ sublistId: 'item' }) 无法获得行数
      就我而言,我使用了 while true 循环并在选择每一行时发现了错误,对您来说最好的(并且最有可能唯一的)解决方案是标准模式而不是动态。

      【讨论】:

        【解决方案5】:

        好吧,bknights 确实让我开始思考。我将转换切换到标准模式:

                var itemFulfillment = record.transform({
                  fromType: record.Type.SALES_ORDER,
                  fromId: salesOrder.fields.id,
                  toType: record.Type.ITEM_FULFILLMENT,
                });
        

        移除 isDynamic: true 并在标准模式下处理转换记录。然后我只需要使用标准 API 更新当前行的库存详细信息:

                var inventoryDetailRecord = itemFulfillment.getSublistSubrecord({
                  sublistId: 'item',
                  fieldId: 'inventorydetail',
                  line: i
                });
        
                inventoryDetailRecord.setSublistValue({
                  sublistId: 'inventoryassignment',
                  fieldId: 'issueinventorynumber',
                  value: serialId,
                  line: 0
                });
        

        我只需要设置 issueinventorynumber 就可以了,然后保存 Item Fulfillment 记录。绝对让我感到困惑,因为 SuiteScript 2 的子列表和子记录上的可用文档显示这是在动态模式下完成的,实际上只显示了如何创建新的库存编号而不是更新和发布一个。

        【讨论】:

          猜你喜欢
          • 2021-04-29
          • 1970-01-01
          • 1970-01-01
          • 2016-07-11
          • 1970-01-01
          • 2020-05-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多