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 选项,就会出现这种情况。