使用PHP的Microsoft Dynamics GP 10 Web服务

时间:2011-08-23 22:02:31

标签: php web-services dynamics-gp

我们正在考虑使用Microsoft Dynamics GP 10 Web服务,并希望使用PHP来创建/更新客户和销售......所以问题是:这是否可行,如果有的话,是否有人知道那里的好文档?

我没有找到使用PHP的任何内容,这个问题的另一部分是安全凭证,如果PHP可以正确传递所需的登录并与GP的Web服务完全交互?

任何想法或已知资源?

2 个答案:

答案 0 :(得分:4)

对于它的价值,我使用一组名为eConnect的存储过程来进行GP集成。它可能不是最优雅的解决方案,但它的工作效果相当不错。微软也很好地记录了eConnect。

如果您选择使用这种集成,那么熟悉敏捷应用程序是明智的。学习敏捷应用程序对于对象和表映射有很大帮助,应该可以从客户来源免费下载。

以下是创建客户记录的eConnect存储过程示例:

$sql = "declare @p115 int
set @p115=0
declare @p116 varchar(255)
set @p116=''                                                                                                             
exec dbo.taUpdateCreateCustomerRcd
@I_vCUSTNMBR = '123456',
@I_vCUSTNAME = 'Company Name',
@O_iErrorState = @p115 OUTPUT,                                                                  
@oErrString = @p116 OUTPUT                                                                                       

select @p115, @p116";

要执行它,只需执行以下操作(在此示例中使用PHP ADODB):

    gp_execute_sp($sql);


    function gp_execute_sp($sql, $transactions = true) {
        global $DBGP;

        if($transactions)
            $DBGP->StartTrans();
            $rs = $DBGP->Execute($sql);
                if(is_object($rs) && !$rs->EOF) {
                        if($rs->fields['computed'] != 0) {
                if($transactions)
                                    $DBGP->FailTrans();
                                throw new Exception(get_error_desc($rs->fields['computed']));            

                        }                                                                                                
                } elseif(!is_object($rs)) {                                                                              
            if($transactions)                                                                                            
                            $DBGP->FailTrans();                                                                          
                        throw new Exception("Database Connection Error.");

                } else {                                                                                                 
                    if($transactions)                                                                                    
                    $DBGP->FailTrans();                                                                                  
                        throw new Exception("Stored proceedure did not return a result.");                               
                }                                                                                                        

                if($transactions)                                                                                        
                    $DBGP->CompleteTrans(); 
   }

   function get_error_desc($value) {
        global $DBGP;

        if(is_numeric($value)) {
            $result = "No Error Available";
            $sql = "SELECT ErrorDesc FROM DYNAMICS..taErrorCode WHERE ErrorCode=?";
            $rs = $DBGP->execute($sql, array($value));
            if(!$rs->EOF) {
                $result = $rs->fields['ErrorDesc'];
            }
        } else {
            $result = $value;
        }

        return $result;
    }

答案 1 :(得分:0)

我还没有使用Dynamics GP,但基于我对开发人员指南的重新定义,有一个遗留端点和一个本机端点,但两者都是SOAP服务,因此我认为没有理由不能使用PHP的SOAP客户端。

$client = new SoapClient('http://machine_name:<port_number>/Dynamics/GPService');
$result = $client->GetCompanyList(...);

我不知道是什么......但是再次没有理由不能实现上述,因为SOAP被设计为适用于包括PHP在内的大多数语言,它只是不会那么简单是

编辑:使用WSDL到PHP类生成器可能会有所帮助。请参阅:generate php code from wsdl