在这里你可以看到文档。它在 C# 中。我试图用PHP做一个工作的例子。我设法在PHP中执行了Read & ReadMultiple函数。这是我的尝试:
require ("./NTLMSoapClient.php");
$client = new NTLMSoapClient(null, array(
'cache_wsdl' => WSDL_CACHE_NONE,
'trace' => true,
'location' => "http://83.166.204.26:7147/TEST/WS/Harmont%20Blaine_TEST/Page/WebItem",
'uri' => "urn:microsoft-dynamics-schemas/page/webitem",
));
$client->user = "xxxxxx";
$client->password = "xxxxxxxxx";
try{
$resp = $client->Create(new SoapVar('555554', XSD_STRING, null, null, 'ns1:No' ));
echo "REQUEST:'n" . htmlentities($client->__getLastRequest()) . "'n";
}catch(SoapFault $sf){
//echo "REQUEST:'n" . htmlentities($client->__getLastRequest()) . "'n";
print '<pre>';
print_r($sf);
print '</pre>';
}
print '<pre>';var_dump($resp); print '</pre>';
出于某种原因,它使我返回 NULL。知道为什么不起作用吗?
Freddy Kristiansen做了一系列精彩的博客文章,详细解释了如何从不同的环境连接到Nav Web服务。
第一部分在这里:正在从 连接到 NAV Web 服务...
第二部分:从 PHP 连接到 NAV Web 服务
客户端可能出于多种原因收到 NULL 响应。首先 - 客户端应用程序无法在 Web 服务上进行身份验证。如果服务器端使用 SPNEGO 协议而不是 NTLM,则可能会发生这种情况。您需要在CustomSettings.config中设置密钥"ServicesUseNTLMAuthentication",正如Freddy在他的第一篇文章中所描述的那样。
如果可以从服务读取数据,但无法创建记录,则意味着请求成功通过身份验证,并且问题可能出在 SOAP 消息格式中。
这是 Nav 希望在创建请求中收到的内容
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<Create xmlns="urn:microsoft-dynamics-schemas/page/customer">
<Customer>
<No>555554</No>
<Name>NewCustomer</Name>
</Customer>
</Create>
</soap:Body>
</soap:Envelope>
要获得此结果,您可以将标准 HTTP 流包装器替换为 NTLMStream 包装器(请参阅上面的文章"从 PHP 连接到 NAV Web 服务"。
现在,这就是读取客户记录所需做的全部工作:
$client = new NTLMSoapClient("http://192.168.0.101:7047/DynamicsNAV71/WS/".rawurlencode($company)."/Page/Customer");
$resp = $client -> Read(array('No' => '10000'));
创建新记录也变得更加容易:
$client = new NTLMSoapClient("http://192.168.0.101:7047/DynamicsNAV71/WS/".rawurlencode($company)."/Page/Customer");
class CustomerWrapper
{
public $Customer;
}
$cw = new CustomerWrapper;
$cw -> Customer -> No = "555554";
$cw -> Customer -> Name = "NewCustomerName";
$cw -> Customer -> E_Mail = "john.doe@cronuscorp.net";
$resp = $client -> Create($customer);
这是
解决方案:
$resp = $client->Create(new SoapVar('5555195', XSD_STRING, null, null, 'ns1:WebItem' ));
我必须将"否"更改为"网络项"
看这里:
<xsd:element name="Create">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="WebItem" type="tns:WebItem"/></xsd:sequence></xsd:complexType>
</xsd:element>