【问题标题】:Dynamics NAV 2016 Web Service: Parameter * in method * in service * is nullDynamics NAV 2016 Web 服务:方法中的参数 * 服务中 * 为空
【发布时间】:2016-09-07 14:06:48
【问题描述】:

我尝试从我的 Dynamics Nav Web 服务 (Dynamics Nav 2016) 中获取一个联系人。我使用 PHP 中的 SOAP 请求来执行此操作。

网络服务是一个包含两个功能的代码单元:

fGetContact(iContactNumber : Text[20]) oContact : Text[250]
IF rContact.GET(iContactNumber) THEN BEGIN
  oContact := '';
  oContact := rContact."No." + ';' +
              rContact."Company Name" + ';' +
              rContact."First Name" + ';' +
              rContact.Surname + ';' +
              rContact."E-Mail";
END;
EXIT(oContact);

fGetContacts() oContacts : Text[250]
IF rContact.GET('KT100190') THEN BEGIN
  oContacts := '';
  oContacts := rContact."No." + ';' +
               rContact."Company Name" + ';' +
               rContact."First Name" + ';' +
               rContact.Surname + ';' +
               rContact."E-Mail";
END;
EXIT(oContacts);

第二个函数 fGetContacts 工作正常。 但是当我使用联系电话作为参数调用 fGetContact 时,它会返回以下错误:

Parameter iContactNumber in method FGetContact in service MyService is null!

我使用NTLMSoapClient,如下所示:

<?php
ini_set('soap.wsdl_cache_enabled', '0'); 

require_once 'ntlmstream.php';
require_once 'ntlmsoapclient.php';

$url = 'http://localhost:7047/DynamicsNAV90/WS/CRONUS/Codeunit/MyService';

$options = array(
    'uri' => $url,
    'location' => $url,
    'trace' => true,
    'login' => 'my_user',
    'password' => 'my_password'
);

// we unregister the current HTTP wrapper
stream_wrapper_unregister('http');

// we register the new HTTP wrapper
stream_wrapper_register('http', 'MyServiceProviderNTLMStream') or die("Failed to register protocol");

// so now all request to a http page will be done by MyServiceProviderNTLMStream.
// ok now, let's request the wsdl file
// if everything works fine, you should see the content of the wsdl file
$client = new MyServiceNTLMSoapClient(null, $options);

// should display your reply
try {
    $params = array('iContactNumber' => 'KT100190');

    echo '<pre>';
    echo $client->FGetContacts(); // works
    echo $client->FGetContact($params); // doesn't work
    echo '</pre>';
} catch (SoapFault $e) {
    echo '<pre>';
    var_dump($e);
    echo '</pre>';
}

// restore the original http protocole
stream_wrapper_restore('http');

我也试过这样调用函数:

echo $client->FGetContact('KT100190');

返回错误和之前一样。

我用SoapUI 测试了我的函数,返回值正是它应该的值。

请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:new="urn:microsoft-dynamics-schemas/codeunit/MyService">
   <soapenv:Header/>
   <soapenv:Body>
      <new:FGetContact>
         <new:iContactNumber>KT100190</new:iContactNumber>
      </new:FGetContact>
   </soapenv:Body>
</soapenv:Envelope>

回复:

<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">
   <Soap:Body>
      <FGetContact_Result xmlns="urn:microsoft-dynamics-schemas/codeunit/MyService">
         <return_value>KT100190;Add-ON Marketing;Chris;McGurk;chris.mcgurk@cronuscorp.net</return_value>
      </FGetContact_Result>
   </Soap:Body>
</Soap:Envelope>

那么我做错了什么,这个错误出现了,我该如何解决?

【问题讨论】:

    标签: php microsoft-dynamics navision microsoft-dynamics-nav dynamics-nav-2016


    【解决方案1】:

    对于它的价值,我遇到了这个问题并通过将“cache_wsdl”=> WSDL_CACHE_NONE 添加到soap客户端的选项来解决它。

    由于更新 WSDL 后出现缓存问题,一些字段丢失。

    【讨论】:

      【解决方案2】:

      我做了一个解决方法,它现在对我有用。

      我更改了 NTLMSoapClient 类中的 $request 变量,因为 php 发送给我的服务的肥皂信封绝对没用。

      所以基本上我只是在 curl 动作之前这样做了:

      $request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:new="urn:microsoft-dynamics-schemas/codeunit/MyService">
                     <soapenv:Header/>
                     <soapenv:Body>
                        <new:FGetContact>
                           <new:iContactNumber>'.$this->iContactNumber.'</new:iContactNumber>
                        </new:FGetContact>
                     </soapenv:Body>
                  </soapenv:Envelope>';
      

      (如果有人遇到同样的问题,试试 var_dump($request) 并在浏览器中查看源代码。你会看到 PHP 在那里做了什么乱七八糟的事情......)

      【讨论】:

        猜你喜欢
        • 2014-07-14
        • 2023-03-09
        • 1970-01-01
        • 2014-03-23
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多