savon soap属性

时间:2012-10-20 01:32:24

标签: soap savon netsuite

我试图查询netsuite api的货币。以下soap请求适用于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

请告知。

3 个答案:

答案 0 :(得分:2)

http://savonrb.com所述,attributes!哈希中的密钥必须与XML标记匹配。你想写这样的东西:

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

请告诉我们这是否适合您。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

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