NetSuite销售订单行级inventorySubsidiary与inventoryLocation字段设置问题
NetSuite SOAP API: Setting Inventory Location & Subsidiary on Sales Order Lines
我之前也踩过这个坑——NetSuite的SalesOrderItem对象本身并没有inventoryLocation和inventorySubsidiary这两个字段,你直接在item节点下添加它们肯定会报错。要给销售订单行设置这两个属性,必须通过Inventory Detail结构来包装行级的库存分配信息,也就是用inventoryDetail节点嵌套inventoryAssignment来实现。
正确的SOAP请求结构示例
下面是修改后的请求片段,重点看item节点里新增的inventoryDetail部分:
<soap:Body> <add xmlns="urn:messages_2016_1.platform.webservices.netsuite.com"> <record xsi:type="q1:SalesOrder" xmlns:q1="urn:sales_2016_1.transactions.webservices.netsuite.com"> <q1:entity type="customer" internalId="$#AccountTSANSIntIDReal#$"/> <q1:memo>$#Remark#$</q1:memo> <q1:tranDate>$#ActionDateTime#$</q1:tranDate> <q1:customForm internalId="100"/> <q1:subsidiary internalId="30"/> <q1:location internalId="202"/> <q1:itemList> <q1:item> <q1:item type="inventoryItem" internalId="1234"/> <q1:quantity>"3"</q1:quantity> <!-- 新增Inventory Detail部分 --> <q1:inventoryDetail> <q1:inventoryAssignmentList> <q1:inventoryAssignment> <q1:quantity>"3"</q1:quantity> <q1:location internalId="202"/> <q1:subsidiary internalId="30"/> </q1:inventoryAssignment> </q1:inventoryAssignmentList> </q1:inventoryDetail> </q1:item> <q1:item> <q1:item type="inventoryItem" internalId="5678"/> <q1:quantity>"10"</q1:quantity> <!-- 新增Inventory Detail部分 --> <q1:inventoryDetail> <q1:inventoryAssignmentList> <q1:inventoryAssignment> <q1:quantity>"10"</q1:quantity> <q1:location internalId="202"/> <q1:subsidiary internalId="30"/> </q1:inventoryAssignment> </q1:inventoryAssignmentList> </q1:inventoryDetail> </q1:item> </q1:itemList> </record> </add> </soap:Body>
关键注意事项
- 数量匹配:
inventoryAssignment里的quantity必须和对应行的quantity完全一致;如果需要拆分库存到多个位置,可以添加多个inventoryAssignment节点,总和等于行数量即可。 - 功能启用:确保你的NetSuite账户已经启用了Multi-Location Inventory和Multi-Subsidiary功能,否则这些字段可能无法正常使用。
- 字段对应关系:行级的库存位置和子公司直接对应
inventoryAssignment里的location和subsidiary字段,不需要用inventoryLocation或inventorySubsidiary这样的命名。
内容的提问来源于stack exchange,提问作者hoppiness




