我使用NetSweet/NetSuite Ruby gem连接到NetSuite帐户。
通常,使用get_select_value
获取运输方法列表很简单。但是,一个NetSuite帐户被组织为子公司,并且将运输方法分配给子公司。对于这个特定的帐户,get_select_value
返回空列表:
NetSuite::Records::BaseRefList.get_select_value({
recordType: "salesOrder",
field: "shipMethod",
}).base_refs.length
=> 0
这是有道理的:在新的销售订单表单中,发货方法列表最初是空的。当我选择&;customer&;选项时,NetSuite将自动填充只读字段";subsidiary&;"。然后填充可用的运输方法列表。
是否有办法按子公司或客户获取运输方法列表?
NetSuite API响应包含一个警告:"Results are incomplete。您必须为字段实体提供一个值。">
充分反应:
<getSelectValueResponse xmlns="urn:messages_2016_2.platform.webservices.netsuite.com">
<platformCore:getSelectValueResult xmlns:platformCore="urn:core_2016_2.platform.webservices.netsuite.com">
<platformCore:status isSuccess="true">
<platformCore:statusDetail type="WARN">
<platformCore:code>WARNING</platformCore:code>
<platformCore:message>Results are incomplete. You must provide a value for field entity.</platformCore:message>
</platformCore:statusDetail>
</platformCore:status>
<platformCore:totalRecords>0</platformCore:totalRecords>
<platformCore:totalPages>0</platformCore:totalPages>
</platformCore:getSelectValueResult>
</getSelectValueResponse>
使用filterByValueList并传递customer internalId作为实体似乎有效。
NetSuite::Records::BaseRefList.get_select_value({
recordType: "salesOrder",
field: "shipMethod",
filterByValueList: {
"platformCore:filterBy" => {
"platformCore:field" => "entity",
"platformCore:internalId" => ns_customer.internal_id}
}
}).base_refs.length
=> 17
这有点违反直觉,因为过滤器选项应该减少输出中的项目。
生成XML:
<platformMsgs:getSelectValue>
<platformMsgs:pageIndex>1</platformMsgs:pageIndex>
<platformMsgs:fieldDescription>
<platformCore:recordType>salesOrder</platformCore:recordType>
<platformCore:field>shipMethod</platformCore:field>
<platformCore:filterByValueList>
<platformCore:filterBy>
<platformCore:field>entity</platformCore:field>
<platformCore:internalId>4978501</platformCore:internalId>
</platformCore:filterBy>
</platformCore:filterByValueList>
</platformMsgs:fieldDescription>
</platformMsgs:getSelectValue>