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已不是什么难事了。
php5.2通过saprfc扩展远程连接sap730成功案例的更多相关文章
- windows下使用xShell远程连接virtualbox里面的linux
		
第一阶段:基本安装 安装virtual box 在virtualbox里面安装xubuntu:是ubuntu+xfce桌面环境的一个linux的发行版本 在windows下安装Xmanager Ent ...
 - 远程连接mongodb出现 no route to host 和 Connection refused
		
部署好mongodb服务器后,在客户端安装好php的mongodb扩展,用程序连接mongodb服务器出错:no route to host.搜索了差不多一天的时候都没有相关的解决方法.最后在mong ...
 - Linux使用SSH远程连接方式和更改密码 ,自己空间转移过来的。
		
一. 远程连接Linux系统需要一个方便的SSH连接工具putty就不错!工具在本日志的附件下载,解压密码是QQ号,云盘访问密码 90891.把远程主机ip和端口号填写上然后选择连接方式为“SSH”. ...
 - MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接
		
<一,>MongoDB 简介篇Ruiy; MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值 ...
 - Kali Linux远程连接Windows服务器
		
前言: 为了在Kali上远程连接Windows系统的服务器我们需要安装两个工具,rdesktop和tsclient.另外,我们从主机服务商那里购买的Windows操作系统的服务器都是默认开启了远程连接 ...
 - 远程连接身份验证错误,又找不到加密Oracle修正
		
远程连接服务器出现了错误,错误信息为:远程连接身份验证错误,又找不到加密Oracle修正. 服务器系统:Windows Server2016 客户端系统:Windows10家庭版和专业版 出错原因 ...
 - (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)
		
在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...
 - .Net开源myrtille远程连接服务(支持SSH)
		
今天在博客园首页,无意中看到一篇文章(https://github.com/Microsoft/dotnet/blob/master/dotnet-developer-projects.md),于是对 ...
 - SSH远程连接服务
		
一.SSH 原理图 二.SSH 原理描述 2.1:什么是SSH SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候 ...
 
随机推荐
- Tornado 的教材
			
Tornado 的教材 作者:杨昆链接:https://www.zhihu.com/question/19707966/answer/12731684来源:知乎著作权归作者所有,转载请联系作者获得授权 ...
 - arm-none-eabi-gcc install
			
Zephyr除了官方的编译工具,还有第三方工具 arm-none-eabi-gcc . This PPA is an alternative to toolchain released at http ...
 - WebApp 中用 hashchange 做路由解析
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - bbc 大数据
			
http://video.sina.com.cn/v/b/107900125-2192582404.html
 - mysql oracle 删除外键约束
			
mysql alter table xxx drop foreign key xxx cascade; oracle alter table drop constraint xxxxx cascade ...
 - Google研究员Ilya Sutskever:成功训练LDNN的13点建议
			
Google研究员Ilya Sutskever:成功训练LDNN的13点建议 摘要:本文由Ilya Sutskever(Google研究员.深度学习泰斗Geoffrey Hinton的学生.DNNre ...
 - Promise   让异步更优
			
每个异步方法都返回一个Promise 更优雅. then方法 每一个Promise 都有一个叫then 的方法, 接受一对callback 被解决时调用,resolve, 被拒绝 reje ...
 - html中混入的特殊字符
			
从设计那里拿来的psd中常常会有全角的单双引号. 如果只是拷贝这些字符到做好的html里面,顶多看到乱码再加以改正. 但是,如果是通篇的doc,需要加上各种html语义标签,在拷贝来的doc文字之间加 ...
 - 华为5700交换机通过外部开源protal和本地aaa用户认证的一些问题
			
http://support.huawei.com/ecommunity/bbs/10178271.html?p=1#p0 华为5700交换机通过外部开源protal和本地aaa用户认证的一些问题 各 ...
 - bzoj3744
			
这道题是目前我做bzoj最感动的一题没有之一……首先先警示一下,分块的题目能不套主席树尽量不套因为主席树不仅回答来一个log而且常数也比较大,对于分块这种根号的算法非常不适合这里是求区间逆序对,考虑查 ...