• php5.2通过saprfc扩展远程连接sap730成功案例


         公司刚上sap系统,由于资金有限,sap与其它系统的数据交换需要公司内部实现。于是,领导决定入库申请流程需要在sap与OA系统里实现电子签核流,重担果然落到我的身上。好在我只负责OA,还一位同事负责sap。

         OA是用PHP开发的,于是连接语言自然使用PHP。网上搜了下,发现php的saprfc扩展早在2005年就有了,不过虽然过了那么多年,扩展依然可用。

    一、下载saprfc扩展并在php.ini启用。访问http://pan.baidu.com/s/1kVPemn9,下载saprfc1.4.1完整版,里面包含windows版php4.4、php5.2、php5.3 dll扩展文件,以及sapclasses文件夹下的接口类等。复制相应版本的php_saprfc_5xx.dll至php的扩展文件夹下,修改php配置文件php.ini,在dynamic extensions下面增加一行:extension=php_saprfc_5xx.dll.然后重启httpd服务。网页访问phpinfo(),出现以下信息,表示php saprfc扩展安装成功。

    二、安装sap客户端并根据saprfc1.4.1完整版里的example_userlist.php测试与sap服务器的连接。saprfc本质上是模拟sapGUI登录。所以需要安装rfcsdk才能实现连接。为简化操作,直接安装sapGUI客户端,则rfcsdk也安装完成。同理,若是linux版的php,需安装Non-Unicode SAP RFCSDK 6.40,不过似乎这个东西不好找。然后修改example_userlist.php里的logindata参数为本公司的sap参数保存,例如

    $sap = new saprfc(array(
                            "logindata"=>array(
                                "ASHOST"=>"yourhostip"        // application server
                                ,"SYSNR"=>"00"                // system number
                                ,"CLIENT"=>"800"            // client
                                ,"USER"=>"youruser"            // user
                                ,"PASSWD"=>"yourpwd"        // password
                                ,"CODEPAGE"=>"8300"            //定义字符集,否则会中文乱码    
    )
    ,"show_errors"=>false // let class printout errors ,"debug"=>false)) ; // detailed debugging information

    网页访问http://xxxxxx/example_userlist.php,若出现以下信息,表示php与sap通信成功。

    三、使用saprfc类连接sap。saprfc1.4.1完整版提供了一系列的类连接sap、调用函数、操作内表,以及创建服务接口等。

    $params=array(
                                "ASHOST"=>"appip"        // application server
                                ,"SYSNR"=>"00"                // system number
                                ,"CLIENT"=>"600"            // client
                                ,"USER"=>"account"            // user
                                ,"PASSWD"=>"pwd"        // password
                                //,"LANG"=>"ZH"
                                ,"CODEPAGE"=>"6240"  //8400 gbk code
                                );
    include_once("sapclasses/sap.class.php");
      $sapConn=new SAPConnection();
      $sapConn->Connect($params);       //  set conncet data array
      $sapConn->Open();                 //  set/get rfc handle $sapConn->rfc
      $sapFunc=new SAPFunction();
      $sapFunc->Discover($sapConn->rfc,"Z_OA_SIGN");//set/get function handle $sapFunc->fce,z_oa_sign函数名
        $para=array(    
                                        array("EXPORT","TYP"),//默认情况下export参数不用定义,不过定义也没关系
                                        array("EXPORT","MSG"),
                                        array("IMPORT","ZOANUM",$oanum)
                                    );  //rfc函数输入Import,输出export参数定义
      $sapFunc->DefVars($para);    //DefVars方法在类里面并没有,需要手动加入,代码见下文。                               
      $sapFunc->Call();
      //echo $sapFunc->TYP;
      //echo $sapFunc->MSG;
      if($sapFunc->TYP=="S")echo "S"; //TYP、MSG为rfc函数的返回值
      else echo $sapFunc->MSG;
      $sapFunc->Close();
      $sapConn->Close();

    SAPFunction类的DefVars方法:

    function DefVars($parameters){
              foreach ($parameters as $key => $param) {
                  $type=$param[0];
                  $name=$param[1];
                  $value=isset($param[2])?$param[2]:"";
                  switch ($type) {
                     case "IMPORT":
                        $this->$name=$value;
                        break;
                     case "EXPORT":
                        $this->$name="";
                        break;            
                     default:
                      return "saprfc::callFunction() Wrong Parameter-Type. Must be IMPORT, EXPORT or TABLE.";
                }
          }
            }

    掌握了以上代码后,估计使用php连接sap已不是什么难事了。

  • 相关阅读:
    Ynoi2016 这是我自己的发明
    Luogu P5268 [SNOI2017]一个简单的询问
    Ynoi2017 由乃的玉米田
    BZOJ4320 [Shanghai2006]Homework
    JOISC2014C 歴史の研究
    莫队
    LOJ6119 「2017 山东二轮集训 Day7」国王
    Luogu P3295 [SCOI2016]萌萌哒
    10.1 进程间通信--消息队列
    9.2 网络协议理论
  • 原文地址:https://www.cnblogs.com/su-ping/p/5615116.html
Copyright © 2020-2023  润新知