【问题标题】:Creating a SalesOrder within NetSuite with Item Groups在 NetSuite 中使用项目组创建 SalesOrder
【发布时间】:2017-05-15 06:41:51
【问题描述】:

我希望通过外部报价系统与 NetSuite 集成。如果我使用标准的非库存项目并且我能够创建销售订单,那么一切正常。

我遇到的问题是,当我添加一个作为项目组的行时,它会实例化属于该项目组的所有项目的新副本,这些项目没有正确保存所需的所有默认值。

我试图提取我在 NetSuite 中手动创建的带有项目组的 SalesOrder,然后将其映射回新的 SalesOrder 请求,这也会导致相同的错误。

我希望能够利用项目组,想知道是否有办法通过 API 来实现这一点,还是我需要编写 SuiteScript?

【问题讨论】:

    标签: integration netsuite suitescript suitetalk


    【解决方案1】:

    TLDR;是的,项目组在服务器端 SuiteScript 中工作。它们可以像普通物品一样添加。您描述的“实例化属于该项目组的所有项目的新副本”行为是设计使然。

    更长的版本:

    对于那些可能在 2021 年偶然发现的人......我可以确认,我已经使用许多项目组成功地与 Netsuite 集成了一年多。因此,它们可以使用服务器端脚本创建!

    但是,当您说“有没有办法通过 API 实现此功能”时,我们应该澄清一下您的意思。 Netsuite 允许您编写称为 RESTlet 的自定义脚本,这些脚本基本上是您自己编写的 API。 Netsuite 还具有内置的 SOAP API 和 REST API 接口。我的集成是通过一个用 SuiteScript 编写并由 Netsuite 托管的 RESTlet 处理的。

    您还应该知道,Netsuite 中的项目组是一次添加多个项目的简写。因此,您描述的行为是添加单行但 Netsuite 将该行分解为组的成员项,这就是项组的设计方式。因此,管理项目组的自定义定价或其他选项更具挑战性。 几乎添加一个项目组和只是手动添加成员项目一次一个,当一切都说完后,几乎没有区别。相反,您可以尝试使用套件项目,它允许您设置自己的定价、收入帐户、类别和其他设置。您可以查看 Marty Zigman 的 this awesome article,了解套件和物品组之间的区别。

    如果项目组确实是您正在寻找的,并且您想通过 SuiteScript 将它们添加到销售订单中,那么您可以像添加任何普通项目一样添加它们。棘手的部分是尝试修改由 Netsuite 动态添加的成员项目行上的值。在这种情况下,我建议在动态模式下创建销售订单,添加项目组(Netsuite 将在动态模式下自动扩展它们),然后循环返回项目以进行必要的更改,如下所示:

    const so = record.create({ type: record.Type.SALES_ORDER, isDynamic: true })
    
    /* Set other necessary values here (customer, date, etc.). Then... */
    
    so.selectNewLine({ sublistId: "item" })
    so.setCurrentSublistValue({ 
      sublistId: "item", 
      fieldId: "item", 
      value: "<internalId of Item Group>" 
    })
    so.commitLine({ sublistId: "item" })
    
    /* The Item Group will have expanded at this point */
    
    const lineCount = so.getLineCount({ sublistId: "item" })
    for(var lineNum = 0; lineNum < lineCount; lineNum++) {
      so.selectLine({sublistId: "item", line: lineNum})
      // Make whatever changes to the line. For example: change the price...
      if(/*check if this is the correct item...*/) {
        so.setCurrentSublistValue({sublistId: "item", fieldId: "price", value: -1}) // Custom price
        so.setCurrentSublistValue({sublistId: "item", fieldId: "rate", value: 200}) // $200
        so.commitLine({sublistId: "item"})
      }
    }
    
    const salesOrderId = so.save()

    请记住,除了成员项目的行之外,项目组可能还有页眉/页脚行。如果您在创建项目组时选中了 REFERENCE START/END LINES ON PICKING TICKETS 选项,就会出现这种情况。

    【讨论】:

      【解决方案2】:

      因此,“项目组”实际上只不过是一个预烘焙的“仅限客户端”脚本。它只是将项目的 ID 存储在组中.. 然后当您选择它时,它会使用这些项目 ID 填充行(在浏览器中)。

      因此,项目组不能在服务器端使用。因此,您不能在脚本或集成中使用它们。

      【讨论】:

      • 您知道是否可以在高级 PDF 中引用项目组吗?就我而言,我试图查看该项目是项目组还是成员,因为我试图隐藏父行以仅在发票上显示成员。我试过 {$item.item.type} 给我“库存项目”,{$item.item.subtype} 给我“待售”等,但我似乎找不到它的记录类型“项目”组”。
      • 这听起来不对。我刚刚使用了一个带有restlet的项目组。我已经使用各种项目组更新了现有销售订单,并使用服务器脚本轻松地将各种其他项目添加到组中
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2022-06-15
      • 2021-09-08
      相关资源
      最近更新 更多