可选参数对于使用WSDL模式的Soap调用不是可选参数 - php

我尝试调用SAP提供的Web服务来更新客户数据。我使用SoapUI来测试连接和所需的实际请求。一切正常,这是SoapUI更改电子邮件地址的请求的样子:

<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请求中不能省略可选参数?

参考方案

事实证明,尽管服务端点不需要WSDL文件(由SAP自动生成),但该文件没有alle元素的“ minOccurs”属性。我现在在非WSDL模式下使用Soap Client-这似乎是解决我的问题的最简单方法。

PHP PDO组按列名称查询结果 - php

以下PDO查询返回以下结果:$db = new PDO('....'); $sth = $db->prepare('SELECT ...'); 结果如下: name curso ABC stack CDE stack FGH stack IJK stack LMN overflow OPQ overflow RS…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

哪个更好的做法?从Jquery响应获取HTML - php

这只是一个问题,以了解人们如何以及如何做到这一点,但是假设用户向列表中添加了一些内容,完成后,它将运行下面的ajax并更新.user-stream-list$.ajax({ url: "user-stream-list.php", success: function(data){ $(".user-stream-list…

PHP:检查谁看过发送的电子邮件? - php

我正在向某些用户发送电子邮件,并且想知道是谁阅读的,这意味着如果有人阅读了该电子邮件,则将维护一个日志文件,其中包含该用户的电子邮件地址以及日期/时间/ IP。为此,我发送一个带有电子邮件(html模板)的javascript函数,当用户打开该电子邮件时,它仅会警告用户的电子邮件地址,例如:for($n=0; $n<sizeof($checkBox);…