0

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

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

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

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

4

2 回答 2

1

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

更长的版本:

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

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

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

如果项目组确实是您正在寻找的,并且您想通过 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()

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

于 2021-01-06T08:44:51.490 回答
0

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

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

于 2017-05-17T01:14:00.800 回答