公司刚上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成功案例的更多相关文章

  1. windows下使用xShell远程连接virtualbox里面的linux

    第一阶段:基本安装 安装virtual box 在virtualbox里面安装xubuntu:是ubuntu+xfce桌面环境的一个linux的发行版本 在windows下安装Xmanager Ent ...

  2. 远程连接mongodb出现 no route to host 和 Connection refused

    部署好mongodb服务器后,在客户端安装好php的mongodb扩展,用程序连接mongodb服务器出错:no route to host.搜索了差不多一天的时候都没有相关的解决方法.最后在mong ...

  3. Linux使用SSH远程连接方式和更改密码 ,自己空间转移过来的。

    一. 远程连接Linux系统需要一个方便的SSH连接工具putty就不错!工具在本日志的附件下载,解压密码是QQ号,云盘访问密码 90891.把远程主机ip和端口号填写上然后选择连接方式为“SSH”. ...

  4. MongoDb Windows linux平台环境及主流编程语言驱动安装同时配置mongoDb的远程连接

    <一,>MongoDB 简介篇Ruiy; MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值 ...

  5. Kali Linux远程连接Windows服务器

    前言: 为了在Kali上远程连接Windows系统的服务器我们需要安装两个工具,rdesktop和tsclient.另外,我们从主机服务商那里购买的Windows操作系统的服务器都是默认开启了远程连接 ...

  6. 远程连接身份验证错误,又找不到加密Oracle修正

    远程连接服务器出现了错误,错误信息为:远程连接身份验证错误,又找不到加密Oracle修正. 服务器系统:Windows Server2016 客户端系统:Windows10家庭版和专业版   出错原因 ...

  7. (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)

    在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机 前提:服务器端安装桌面版的centos系统 CentOS Linux release 7.5.1804 (Core) ...

  8. .Net开源myrtille远程连接服务(支持SSH)

    今天在博客园首页,无意中看到一篇文章(https://github.com/Microsoft/dotnet/blob/master/dotnet-developer-projects.md),于是对 ...

  9. SSH远程连接服务

    一.SSH 原理图 二.SSH 原理描述 2.1:什么是SSH SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候 ...

随机推荐

  1. ios新特征 ARC详解

    IOS ARC 分类: IOS ARC2013-01-17 09:16 2069人阅读 评论(0) 收藏 举报   目录(?)[+]   关闭工程的ARC(Automatic Reference Co ...

  2. Ruby自学笔记(三)— 方法Method

    Ruby做为面向对象语言,肯定要对对象进行相关的操作,这时候就涉及到方法了. 调用方法 - 对象.方法名(实参1,实参2,...,实参n) 方法的分类: 1. 实例方法:顾名思义,就是由实例来调用的方 ...

  3. BZOJ 1588 营业额统计

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  4. 静态与动态IP设置

    静态IP设置 netsh interface ipv4 set address name="本地连接" source=static addr=192.168.0.212 (这个地方 ...

  5. sicp第1章

    牛顿迭代法求平方: (define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) ...

  6. Linux下安装软件心得

    1 软件安装方法: 源代码编译安装:tar.gz等压缩格式,需要经过手动编译,./configure,make ,make install ,然后进行配置操作 二进制安装:tar.gz等压缩格式,解压 ...

  7. Fishnet(计算几何)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1642   Accepted: 1051 Description A fis ...

  8. (转载)Mysql使用Describe命令判断字段是否存在

    (转载)http://www.jz123.cn/plus/view.php?aid=39200 工作时需要取得MySQL中一个表的字段是否存在 于是就使用Describe命令来判断 mysql_con ...

  9. 数学(组合,容斥):COGS 1220. 盒子与球

    1220. 盒子与球 ★   输入文件:boxball.in   输出文件:boxball.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 现有r个互不相同的盒子和n ...

  10. JQuery固定表头插件fixedtableheader源码注释

    在开发XX车站信息系统时,需要将大量数据显示在一个巨大的表格内部,由于表格是一个整体,无法分页,加之数据很多,超出一屏,为了方便用户,决定使用固定表头的插件,经过测试,发现JQuery 插件:fixe ...