祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 5912|回复: 6

[学习笔记] 从0开始实现PB9调用SAP的RFC根据条件查询返回结果的例子

[复制链接]

[学习笔记] 从0开始实现PB9调用SAP的RFC根据条件查询返回结果的例子

[复制链接]
ehxz

主题

0

回帖

59万

积分

管理员

积分
590871
贡献
在线时间
小时
2022-4-17 11:13:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
通用在SAP创建相应的RFC功能模块,再使用PB进行相关调用。其它内容应该也可以根据例子进行调整。
本例子为根据SAP自带表的航班代码,查询航班计划(从别人获取的SAP虚拟机,自带相关测试数据)。
SAP产品版本为:        EHP8 FOR SAP ERP 6.0,使用的SAP客户端为:740,理论上方法应该通用。

特别说明:
在操作时,有时候需要回车进行一些数据确认,如果左下角有黄色提示,可以回车跳过,一般不影响最终结果。

文档可能随时更新,以上网址下载最新版。
文档日期        修改者        修改记录
2022-04-17        郝晓宗        初始版本,完整测试
               

部分界面:               
sap1.jpg sap2.jpg

核心代码:
  1. SAP RFC:
  2. SELECT * FROM SPFLI
  3.   INTO TABLE DATA
  4.         WHERE CARRID = CARRID.
复制代码

PB :
  1. oleobject saprfc,connection2,funct,table_d //定义RFC对应对象

  2. long ll_status //状态 DEBUG测试可以用

  3. long     ll_rows, ll_cols ,i,j //总行数,总列数 当前行,当前列
  4. string   ls_carrid //查询条件参数
  5. string   ls_data //为显示数据临时存储
  6. //long     ll_ret_row //返回当前导出的数据行数

  7. saprfc = create oleobject
  8. ll_status = saprfc.connecttonewobject("sap.functions.unicode")
  9. connection2 = saprfc.connection
  10. connection2.applicationserver = "192.168.30.170" //服务器IP
  11. connection2.systemnumber = '00' //系统编号
  12. connection2.client = '000' //客户端
  13. connection2.user = 'zddic' //RFC用户
  14. connection2.password = 'c123456' //密码
  15. connection2.language = 'zh' //语言
  16. //connection2.Codepage = "8400"

  17. if connection2.logon(0,true) = false then  //判断是否成功
  18.         messagebox('connet sap','connect failed')
  19.         return
  20. else
  21.         //        messagebox('connet sap','success')
  22. end if

  23. mle_1.text = '' //置空内容
  24. funct = saprfc.add("Z_RFC_SPFLI") //给接口函数输入参数赋值
  25. ls_carrid = sle_1.text //取窗口的参数输入
  26. funct.Exports('CARRID').value = ls_carrid //传入参数

  27. if funct.call then //调用SAP的RFC函数
  28.         table_d = funct.tables //得到从RFC返回的表内容
  29.         ll_rows = table_d.item(1).rowcount //取得行数
  30.         ll_cols = table_d.item(1).Columncount //取列数
  31.         //   messagebox(string(ll_rows),string(ll_cols))
  32.         if ll_rows <= 0 then return
  33.         //循环取数据
  34.         for i = 1 to ll_rows step 1
  35.                 ls_data = string(table_d.item(1).value(i,1)) //从RFC返回的内容里逐个取数据
  36.                 for j = 2 to ll_cols step 1
  37.                         ls_data = ls_data + ' ' + string(table_d.item(1).value(i,j))
  38.                 next
  39.                 mle_1.text += ls_data + '~r~n' //将数据在界面显示
  40.         next
  41.         messagebox('提示','行数:' + string(ll_rows) + '~r~n' + '列数:' + string(ll_cols) )
  42. else
  43.         messagebox ('提示','导出数据失败! 出错信息: 调用SAP的RFC出错!' + string(funct.Exception) ) //
  44. end if
复制代码




完整文档及相关PB9代码下载地址:
游客,如果您要查看本帖隐藏内容请回复
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
woyaodwn

主题

0

回帖

4万

积分

论坛元老

积分
41488
贡献
在线时间
小时
2022-5-23 21:04:06 | 显示全部楼层
从0开始实现PB9调用SAP的RFC根据条件查询返回结果的例子
共享共进共赢Sharing And Win-win Results
hzzz_lgh3399

主题

0

回帖

4232

积分

论坛元老

积分
4232
贡献
在线时间
小时
2022-7-18 14:24:36 | 显示全部楼层
学习,谢谢!
共享共进共赢Sharing And Win-win Results
JYpb

主题

0

回帖

301

积分

中级会员

积分
301
贡献
在线时间
小时
2022-7-28 09:16:35 | 显示全部楼层
谢谢你的分享
共享共进共赢Sharing And Win-win Results
jie__001

主题

0

回帖

402

积分

中级会员

积分
402
贡献
在线时间
小时
2023-4-18 09:33:27 | 显示全部楼层
第一次看PB调用SAP的RFC ,学习了 ,谢谢分享
共享共进共赢Sharing And Win-win Results
yangz

主题

0

回帖

212

积分

注册会员

积分
212
贡献
在线时间
小时
2024-12-10 20:14:47 | 显示全部楼层
PB难得的例子啊,学习下
共享共进共赢Sharing And Win-win Results
smallanntse

主题

0

回帖

2952

积分

金牌会员

积分
2952
贡献
在线时间
小时
2024-12-12 08:34:25 | 显示全部楼层
本帖最后由 smallanntse 于 2024-12-12 08:37 编辑

用了8年的pb9 使用sap rfc ,下载数据,和楼主的一样的例子,最近被电信封掉端口了,,每天只能通过db02,下载为excel,在通过sql2008的语句,导入系统:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure

SELECT *  into vbak2 from OpenRowSet(
'Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;HDR=Yes;IMEX=1;Database=e:\sap\2024-04\db02-vbak.xlsx',[sheet1$]
)

--使用完毕后,记得一定要要关闭它,因为这是一个安全隐患,切记执行下面的SQL语句
        exec sp_configure 'Ad Hoc Distributed Queries',0
        reconfigure
        exec sp_configure 'show advanced options',0
        reconfigure

在通过游标更新到vbak ,
不过最近通过在其他架设的vpn实现自动导入本地成功。

注:有些sap配置不好,这条语句 ll_status = saprfc.connecttonewobject("sap.functions.unicode")
要改成 ll_status = saprfc.connecttonewobject("sap.functions")
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-12-22 00:48 , Processed in 0.069862 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表