2010-12-27 9 views
2

SAPが提供するWebサービスを呼び出して顧客データを更新しようとしました。私はSoapUIを使用して接続をテストし、実際の要求は必要でした。すべてがうまく働いた、これは電子メールアドレスを変更するためのSOAPUI要求がどのように見えるかです:WSDLモードを使用したSoapコールでは省略可能なパラメータ

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:sap-com:document:sap:soap:functions:mc-style"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <urn:Ze12RfcMaintainCustomer>  
     <!--Optional:--> 
     <PiTEmail> 
      <!--Zero or more repetitions:--> 
      <item> 
       <StdNo>X</StdNo> 
       <EMail>[email protected]</EMail> 
      </item> 
     </PiTEmail> 
     <!--Optional:--> 
     <PiTEmailX> 
      <!--Zero or more repetitions:--> 
      <item> 
       <StdNo>X</StdNo> 
       <EMail>X</EMail> 
      </item> 
     </PiTEmailX> 
     <PieKunnr>4711</PieKunnr> 
     </urn:Ze12RfcMaintainCustomer> 
    </soapenv:Body> 
</soapenv:Envelope> 

Webサービスは、全体の多くのパラメーターを受け入れますが、それらのすべてがオプションであり、この作業のために必要ではありません。

今私はWSDLモードでのSoapClientとPHPで同じ要求を実行しようとすれば、私は例えば、要求に含まれていないすべてのオプションパラメータのエラーを取得:

SOAP-ERROR: Encoding: object hasn't 'EmailSrch' property 

これは私ですコード(簡体字):

$params = array(
    'PieKunnr' => 4711, 
    'PiTEmail' => array(
     'item' => array(
      'StdNo' => 'X', 
      'EMail' => '[email protected]',      
     ),   
    ), 
    'PiTEmailX' => array(
     'item' => array(
      'StdNo' => 'X', 
      'EMail' => 'X',      
     ),   
    ),  
); 

$result = $service->Ze12RfcMaintainCustomer($params); 

すべてのオプションパラメータを要求に入れると、それは機能します。

SoapClientリクエストでオプションのパラメータを省略できないのはなぜですか?

+0

EmailSrchエンティティを宣言するWSDLのビットを投稿できますか? – benjy

答えて

2

サービスエンドポイントはそれらを必要としませんが、WSDLファイル(SAPによって自動的に生成されます)に要素の「minOccurs」属性がないことが判明しました。私は非WSDLモードでSoap Clientを使用しています。これは私の問題の最も簡単な回避策です。

関連する問題