无法在项目履行记录 - Suitescript 2上设置库存明细

时间:2017-04-20 17:50:37

标签: netsuite suitescript2.0

在我的预定脚本中,我正在将已转换的“销售订单”中的项目循环到项目履行,并尝试在我循环浏览项目时设置库存明细。清单详细信息看起来设置没有任何错误或问题,但当我尝试保存时,我收到以下错误:

  

请在项目列表的第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 Records Browser中设置每个值,但仍然会出现此错误。非常感谢帮助/见解。

5 个答案:

答案 0 :(得分:2)

我是DJ。我在SuiteScript记录服务平台团队中担任NetSuite的软件开发人员,我只是在考虑这个问题。

履行记录中的项目子列表就是我们所说的&#34; list machine&#34; (而不是&#34;编辑机器&#34;)。前者是固定条目列表,您可以在其中编辑值但不能添加或删除行,而#34;编辑机器&#34;你也可以添加和删除行。在履行记录中,项目列表属于非行可编辑类型。

编辑机每行上的inventorydetail子记录(在项目实现记录上)仅在您isDynamic为假的模式下操作子记录时才有效,因为项目机器是列出机器并且与动态子记录不兼容。不幸的是,没有办法指定子记录的isDynamic属性,因为该属性当前是从父记录继承的。

然而,你可以欺骗它做正确的事情!因此,瑞恩的第二个解决方案。该解决方案适用于以下所有限制:

  1. 将销售订单转换为履行记录时,省略isDynamic会导致将履行记录创建为DeferredDynamic(&#39;标准模式)记录。< / p>

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

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

答案 1 :(得分:1)

好的,所以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的子列表和子记录上提供的文档显示这是在动态模式下完成的,并且实际上只显示如何创建新的库存号而不是更新并发布一个。

答案 2 :(得分:0)

您似乎正在尝试执行此客户端(例如使用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 :(得分:0)

动态模式下与 inventorydetail 存在同样的问题。出于某种原因,使用 getLineCount({sublistId:'item'})来获取行数是不可能的 在我的情况下,我使用了真正的循环并且在选择每一行时遇到了错误,最好的(也是最有可能的)解决方案是标准模式而不是动态。

答案 4 :(得分:-1)

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

  1. 插入新行
  2. 选择新行
  3. 提交新行
  4. 我认为您的代码缺少插入功能。我遇到了和你一样的情况,我终于通过运行insert new line并选择新行命令解决了这个问题。