公司刚上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. C#关于窗体的keysdown事件,无法获取到焦点

    当窗体中包含button之类的控件时,按下方向键时它们会自动获取焦点,导致窗体keysdown事件无法执行.解决方法很简单.将按钮之类控件放到panel容器中控件就无法获取焦点了.这时焦点会在整个窗体 ...

  2. [C#] - 注入DLL

    原文:http://xyzlht.blog.163.com/blog/static/69301417200882834211787/ ) { MessageBox.Show("创建远程线程失 ...

  3. 栈和队列的面试题Java实现

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

  4. Git批量修改提交历史

    有些时候我们可能需要批量修改提交历史,当然了,最近一次的提交历史很简单我们可以利用 git commit --amend 来进行最近一次提交的修改,如果你此时想要更新作者提交时间等也可以在amend之 ...

  5. Qt入门(18)——使用信号和槽连接控件

    下面显示了如何使用信号和槽来创建自定义窗口部件,和如何使用更加复杂的方式把它们连接起来. 首先,源文件被我们分成几部分并放在放在t7目录下. t7/lcdrange.h包含LCDRange类定义.t7 ...

  6. 【转】处理新版Chrome书签、菜单字体不清晰

    原文网址:http://www.nmgwddj.com/share/311.html 昨晚打开Chrome浏览器,忽然感觉有些什么东西变了,仔细看了半天忽然发现,书签中的字体和网页中右键的字体全部都变 ...

  7. 【转】Android的onCreateOptionsMenu()创建菜单Menu详解

    原文网址:http://www.linuxidc.com/Linux/2012-02/55500.htm Android一共有三种形式的菜单:            1.选项菜单(optinosMen ...

  8. 搜索(DLX): POJ 3074 3076 Sudoku

    POJ 3074 : Description In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller ...

  9. 【模拟】Codeforces 705A Hulk

    题目链接: http://codeforces.com/problemset/problem/705/A 题目大意: 给一个数N(N<=100),N=1时输出"I hate it&qu ...

  10. bzoj1227 [SDOI2009]虔诚的墓主人(组合公式+离散化+线段树)

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 803  Solved: 372[Submit][Statu ...