使用项目组在NetSuite中创建SalesOrder

时间:2017-05-15 06:41:51

标签: integration netsuite suitescript suitetalk

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

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

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

我希望能够利用项目组,很想知道是否有办法通过API,或者我是否需要编写SuiteScript?

2 个答案:

答案 0 :(得分: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 选项,就会出现这种情况。

答案 1 :(得分:0)

所以,一个&#39;项目组&#39;实际上只不过是一个预先出炉的&#34;仅客户端&#34;脚本。它只是将项目的ID存储在组中。然后当您选择它时,它会使用这些项目ID填充行(在浏览器中)。

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