2

我正在尝试查询 netsuite api 的货币。以下肥皂请求适用于 SOAP UI 客户端。但是我很难尝试使用 ruby​​ 的 savon gem 版本 0.9.7 进行相同的工作。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:messages_2012_2.platform.webservices.netsuite.com" xmlns:urn1="urn:core_2012_2.platform.webservices.netsuite.com">
   <soapenv:Header>
      <urn:passport>
         <urn1:email>xxx@abc.com</urn1:email>
         <urn1:password>xxx</urn1:password>
         <urn1:account>xxx</urn1:account>
      </urn:passport>
   </soapenv:Header>
   <soapenv:Body>
      <urn:getAll>
         <urn:record recordType="currency"/>
      </urn:getAll>
   </soapenv:Body>
</soapenv:Envelope>

基本上我无法在 urn:record 元素上设置属性。以下不起作用:

response = client.request :urn, :get_all do
  soap.body = { "urn:record" => { :attributes! => { "recordType" => "currency" } } }
end

请指教。

4

3 回答 3

2

正如http://savonrb.com上所解释的,散列中的键attributes!必须与 XML 标记匹配。你想写这样的东西:

response = client.request :urn, :get_all 做
  soap.body = {'urn:record'=>'',
               :attributes!=>{'urn:record'=>{'recordType'=>'currency'}}
              }
结尾

请让我们知道这是否能为您解决问题。

于 2012-10-20T12:27:49.527 回答
1

仔细检查原始肥皂请求。:get_all 可能需要是 "getAll" 才能让 savon 从字面上理解;它可能会将其更改为GetAll

于 2012-10-20T01:42:40.897 回答
0

在 savon 的新版本中,您可以将 :attributes 放置在操作标记的本地上下文中:

@interaction_client.call(:retrieve_interaction, message: message_hash, :attributes => {  'attachmentInfo' => include_attachments.to_s  }) 

在这种情况下,attachmentInfo属性将被放置在与操作链接的主操作标记中,在本例中,这将是ns:RetrieveInteractionRequest标记。

请注意,语法不包含感叹号。

于 2014-07-21T09:01:35.647 回答