我正在启动一个extranet项目,其中php页面应该向Microsoft Dynamics NAV发送数据。
我以前没有使用NAV,但我在这里找到了一些信息。
示例php代码对我来说非常清楚,但在开始这个项目之前,有什么技巧或窍门(基础知识)我应该知道吗?欢迎所有示例…
如何从PHP连接Navision的web服务
步骤1:检查您的配置
您需要确保在CustomSettings.config文件中启用NTLM
<add key="ServicesUseNTLMAuthentication" value="true" />
步骤2:在OData和SOAP之间进行选择
自2009年Microsoft Dynamics NAV以来,除了SOAP web服务外,Microsoft Dynamics NAV还支持OData web服务。就我个人而言,我发现Odata协议比SOAP协议更直观。
OData还有一个额外的优势,即支持Json而不是XML在服务器和客户端之间进行通信,这使得从标准PHP数组或对象到标准PHP阵列或对象的转换非常容易。
请参阅MSDN官方文档,了解有关在何处查找现有web服务列表(以及相应的URL)以及如何注册新服务的更多信息。
步骤3:发送HTTP请求:
如果您使用SOAP,您可能希望使用PHP的SoapClient或基于它的第三方库来发送和接收SOAP消息。
但是,如果您知道如何在PHP中解析XML,那么只需使用cURL并自己解析XML响应即可。或者,如果您选择了Odata协议,则可以使用Json消息。SOAP只是XML。
无论如何,如果您使用cURL,那么向SOAP或Odata服务发送GET请求实际上可以非常简单:
// Create curl handle
$ch = curl_init();
// Set HTTP options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
// Get & output response (= XML or Json string)
echo curl_exec($ch);
// Close handle
curl_close($ch);
步骤3:分析您的响应:
解析SOAP响应可以如此简单:
$data = simplexml_load_string(str_ireplace(['SOAP-ENV:', 'SOAP:'], '', $response));
解析Json Odata响应可以如此简单:
$data = json_decode($response);
这里有一些有用的链接:
Dynamics NAV如何使用Web服务与特定于业务的第三方应用程序进行互操作:
- Microsoft Dynamics NAV Web服务:MSDN
- 与Navision:向Navision:MMSDN公开.NET组件
Microsoft Dynamics NAV(Navision)社区:
- http://community.dynamics.com/product/nav/f/34.aspx
- http://www.mibuso.com/
我认为有一个"技巧和技巧"。当你必须将数据直接传递到Navision表,而这种集成将为不熟悉Nav的程序员带来好处时,制作一种集成表是很好的。
集成表中的结构和原始表中的相同,但集成表对字段没有任何限制。作为一名c#程序员,我认为它有点像DTO。
积分表的优点是什么?
正如您在Navision中所知道的,有许多限制和字段依赖关系。重要的是你首先填写哪个字段,在哪个字段上你应该使用VALIDATE等
在我看来,这对于一个c#,php,通常是非动力学程序员来说是非常舒服的,他们可以在没有任何问题的情况下传递数据,并且他们不必考虑这个Nav限制。他们可以完成自己的工作,将数据传递给Dynamics,在Dynamics中,我们可以决定如何处理这些数据。
该解决方案还为我们提供了分离的"集成"和Dynamics Nav逻辑,这将为我们在未来的修改中节省大量时间。