Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Netsuite 无法在物料履行记录上设置库存详细信息-Suitescript 2_Netsuite_Suitescript2.0 - Fatal编程技术网

Netsuite 无法在物料履行记录上设置库存详细信息-Suitescript 2

Netsuite 无法在物料履行记录上设置库存详细信息-Suitescript 2,netsuite,suitescript2.0,Netsuite,Suitescript2.0,在我的计划脚本中我正在将转换后的销售订单上的项目循环到项目完成,并尝试在循环项目时设置库存详细信息。库存详细信息的设置看起来没有任何错误或问题,但当我尝试保存时,出现以下错误: 请在项目列表的第2行中配置库存详细信息 第二行是我测试中唯一需要库存详细信息的项目。代码如下: var itemFulfillment = record.transform({ fromType: record.Type.SALES_ORDER, fromId: salesOrder.field

在我的计划脚本中我正在将转换后的销售订单上的项目循环到项目完成,并尝试在循环项目时设置库存详细信息。库存详细信息的设置看起来没有任何错误或问题,但当我尝试保存时,出现以下错误:

请在项目列表的第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();

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

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

你不能

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

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


好吧,我确实在想。我将转换切换到标准模式:

        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,然后保存项目完成记录。SuiteScript 2的子列表和子记录上的文档显示这是在动态模式下完成的,实际上只显示如何创建新的库存编号,而不是更新和发布一个。我是DJ。我是NetSuite的软件开发人员,在SuiteScript记录服务平台团队中工作,我只是在研究这个问题

履行记录上的项目子列表是我们所称的“列表机器”(与“编辑机器”相反)。前者是固定条目列表,您可以在其中编辑值,但不能添加或删除行,而“编辑机器”是您也可以添加和删除行的列表。在履行记录上,项目列表为非行可编辑类型

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

然而,你可以欺骗它做正确的事情!因此,Ryan提出了第二个解决方案。此解决方案解决了以下所有限制:

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

  • 当获取
    inventorydetail
    子记录时,它将继承父记录的
    isDynamic
    属性,这意味着它将被创建为
    DeferredDynamicSubrecord
    而不是
    DynamicSubRecord
    。这使得它与项目列表机器兼容,因此解决方案可以工作

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

    动态模式下的inventorydetail也有同样的问题。由于某些原因,无法使用getLineCount({sublistId:'item'})获取行数

    在我的例子中,我使用了while true循环,并在选择每一行时发现了错误,对您来说,最好(也最有可能是唯一)的解决方案是标准模式而不是动态模式。

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

  • 插入新行
  • 选择新行
  • 提交新行

  • 我认为您的代码缺少插入函数。我遇到了与您相同的情况,最后通过运行“插入新行”和“选择新行”命令解决了问题。

    很抱歉,我应该提到这是一个计划脚本。不确定“延迟动态”是什么意思。如果省略
    isDynamic
    ,它是默认为动态模式还是标准模式?
    DeferredDynamic
    也是动态的吗?DeferredDynamic是标准模式的另一个术语。他们的意思是一样的。
            var itemFulfillment = record.transform({
              fromType: record.Type.SALES_ORDER,
              fromId: salesOrder.fields.id,
              toType: record.Type.ITEM_FULFILLMENT,
            });
    
            var inventoryDetailRecord = itemFulfillment.getSublistSubrecord({
              sublistId: 'item',
              fieldId: 'inventorydetail',
              line: i
            });
    
            inventoryDetailRecord.setSublistValue({
              sublistId: 'inventoryassignment',
              fieldId: 'issueinventorynumber',
              value: serialId,
              line: 0
            });