登陆PO服务器,启动JAVA客户端三步(SAP PO 开发一)

搭建一个WebService接口环境(SAP PO 开发 二)

用SAP PO连通一个WebService接口(SAP PO 开发 三)

ERP系统RFC协议发送端通过PO连通WebService接口(SAP PO 开发四)

我的第一个SAP PROXY ABAP Program(SAP PO 开发五)

SAP PO (Process Orchestration) 中间件接口管理平台(SAP PO 开发六)

接口开发技术概念与名词术语解释(SAP PO 开发七)

C# 调用SAP PO中间件的WebService接口(SAP PO 开发八)

SAP PO 开发系列接近尾声,当然最后还需要一个压轴大戏DEMO006:PROXY2SOAP。

这次我们要使用久违的PROXY,通过使用PROXY我们才知道SAP 接口开发中RFC和PROXY的本质区别,

而网上那篇SAP IDOC、RFC、PROXY协议比较的表格终归讲得太浅。

一、DEMO006的场景:

SAP HCM系统中通过PROXY方式传出一个数据给PO,PO把这个数据传给一个WebService。

WebService收到数据后,把数据放到一段文本中返回PO,PO再返回到SAP HCM系统中。

二、DEMO006在PO上SLD的配置内容:

三、打开PO的Enterprise Services Builder配置:

1、同SAP HCM相关的接口内容DT、MT、SI:

发出变量定义int

收到返回的字符串

向上封装成MT

带出SI

2、同WebSerivce相关的接口内容DT、MT、SI:

因为WS是有接口描述文件xsdl的,我们就偷懒不用创建DT、MT了。

直接用xsdl创建ED,ED再创建SI就好。

创建MM的请求和返回

创建OM

四、打开PO的Integration Builder配置:

建一个demo006集成环境,空的就行。

建一个CC通道,注意看协议是基于HTTP的XI3.0,

说明SAP ABAP端是把数据封装到基于HTTP的XI协议发给PO的:

建一个CC通道,在WebService这边,注意看协议是标准的WS的SOAP协议:

最后建IC的1~4页签:

PO端配置完成。

五、在SAP服务器的ABAP环境中作一个proxy程序

SPROXY事务代码中,可以看到已经有了DEMO006

在Service_Consumers中,点SI_demo006_sender,创建一个proxy:

这个proxy的参数,我们看到有MT:

点一个MT进去,里面还有一个DT类型,这些都是SAP根据PO创建的数据结构自己创建的

DT里面有我们的一个变量:

写一个ABAP程序,调用这个proxy接口:

DATA  LO_PROXY TYPE REF TO ZPOCO_SI_DEMO006_SENDER.
DATA  Z1 TYPE ZPOMT_DEMO006_RESPONE.
DATA  Z2 TYPE ZPOMT_DEMO006_REQUEST.Z2-MT_DEMO006_REQUEST-ZVALUE  = 3.CREATE OBJECT LO_PROXY.TRY.CATCH CX_AI_SYSTEM_FAULT.ENDTRY.TRY.LO_PROXY->SI_DEMO006_SENDER(EXPORTINGOUTPUT = Z2IMPORTINGINPUT  = Z1).CATCH CX_ROOT INTO DATA(LCX_ERROR).DATA(ERR_TEXT) = LCX_ERROR->GET_TEXT( ). "得到错误信息ENDTRY.WRITE:/ ERR_TEXT.
WRITE:/ Z1-MT_DEMO006_RESPONE-ZRETURN.

运行程序,得到WS的返回文本:

SAP RFC协议工作在SOCKET底层,它的使用环境是ABAP,C#的NCO、JAVA的JCO类库。

SAP PROXY的XI协议,工作在上面的HTTP层,它的环境是借助PI、PO系统提供上层的基于SOAP的服务。

我想这是RFC和PROXY的本质区别。

既然DEMO007是RFC的,DEMO006是PROXY的,他们都是发给同一个WS接口,那我们就来作一个性能测试:

对同一个WS接口,发收数据100次,我们看看他们的时间差别:

我想,PROXY的耗时主要用在对HTTP协议转换上了。

--------------2019-6-3-------------------------------------------------

我一直在思考一个问题,如果RFC工作在底层,它的效率最高,那为什么SAP还会推出PROXY,

而且从SAP项目选择来看,SAP-RFC的接口技术正在被PROXY所取代。

随做对PROXY认识的加深,我终于明白了。

单纯的比较性能,肯定是RFC工作在底层,RFC最厉害。

但要实现RFC有很多前提:

1、需要外围系统使用RFC的类库编程,这个虽然很简单,但是并不被大量的开发工程师所掌握。

2、除了外围系统,SAP系统使用RFC,需要在系统内定义自己表的结构,这个工作虽然也简单,但是它还是需要人天。

3、使用RFC,是2份工作要协同:SAP系统内ABAP工作,外围系统NCO、JCO工作大家要一起调试。

而PROXY呢:

1、PO顾问会按外围系统的WebService接口描述wsdl,导入PO中,创建接口DateType数据定义,然后啪啪配置一番联通。

2、SAP系统中是带入PO的数据定义,不用自己创建,然后ABAP代码直接调用。

3、基本不需要2个系统的调试,这个主动权会掌握在PO集成开发顾问这里。

RFC和PROXY的差别也体现在工作量上,PROXY的工作量会远远小于使用RFC。

下面是2段公平的测试程序代码:

*&---------------------------------------------------------------------*
*& Report ZDEMO007
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZDEMO007.DATA GV_VALUE TYPE /BCV/FND_INT1.
DATA GV_GETDATARESULT TYPE /ASU/TEXT.*请按系统实际情况填写如下信息
WRITE: /'****************************'.
WRITE: / 'SAP系统: RFC'.
WRITE: /'****************************'.
WRITE: /.DATA: T1 TYPE I,T2 TYPE I,T TYPE P DECIMALS 0.DATA: GV_C(6) TYPE C .DATA N TYPE I VALUE 100.
DATA ALL TYPE I.
DATA TMP TYPE I.T = 0.GET RUN TIME FIELD T1.DO N TIMES.*****************************
* Code to be tested *
*****************************GV_VALUE = 9.CALL FUNCTION 'ZDEMO007' DESTINATION 'ZDEMO007'EXPORTINGVALUE               =   GV_VALUEIMPORTINGGETDATARESULT       =  GV_GETDATARESULT .ENDDO.GET RUN TIME FIELD T2.T = ( T2 - T1 ) / 1000000.GV_C = T.
CONDENSE GV_C NO-GAPS.WRITE: /'耗时:' , GV_C , '秒'.

===============

*&---------------------------------------------------------------------*
*& Report ZDEMO006
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZDEMO006.DATA  LO_PROXY TYPE REF TO ZPOCO_SI_DEMO006_SENDER.
DATA  Z1 TYPE ZPOMT_DEMO006_RESPONE.
DATA  Z2 TYPE ZPOMT_DEMO006_REQUEST.*请按系统实际情况填写如下信息
WRITE: /'****************************'.
WRITE: / 'SAP系统: PROXY'.
WRITE: /'****************************'.
WRITE: /.DATA: T1 TYPE I,T2 TYPE I,T TYPE P DECIMALS 0.DATA: GV_C(6) TYPE C .DATA N TYPE I VALUE 100.
DATA ALL TYPE I.
DATA TMP TYPE I.T = 0.Z2-MT_DEMO006_REQUEST-ZVALUE  = 3.CREATE OBJECT LO_PROXY.TRY.CATCH CX_AI_SYSTEM_FAULT.ENDTRY.GET RUN TIME FIELD T1.DO N TIMES.*     TRY .LO_PROXY->SI_DEMO006_SENDER(EXPORTINGOUTPUT = Z2IMPORTINGINPUT  = Z1).
* CATCH CX_ROOT INTO DATA(LCX_ERROR).
*      DATA(ERR_TEXT) = LCX_ERROR->GET_TEXT( ). "得到错误信息
*     ENDTRY.ENDDO.GET RUN TIME FIELD T2.
T = ( T2 - T1 ) / 1000000.GV_C = T.
CONDENSE GV_C NO-GAPS.WRITE: /'耗时:' , GV_C , '秒'.*WRITE:/ ERR_TEXT.
*  WRITE:/ Z1-MT_DEMO006_RESPONE-ZRETURN.

我的第一个SAP PROXY ABAP Program(SAP PO 开发五)相关推荐

  1. 【转:SAP学习篇】Fiori 的开发工具

    Fiori 的开发工具基本包含了如下三个: SAP HANA Studio/Eclipse SAP WebIDE ABAP/4 SAP HANA Studio/Eclipse SAP HANA Stu ...

  2. SAP and ABAP Memory总结

    (一)          Difference Between SAP and ABAP Memory   (1).读取和使用方法不同 SAP内存使用SET/GET parameters方法: SET ...

  3. 使用 SAP Fiori Tools 部署 SAP UI5 应用到 ABAP 服务器时遇到的各种错误和解决办法

    错误1 (node:28340) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'customMiddleware ...

  4. 如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数

    首先登录 ABAP On-Premises 系统,运行事物码:aco_proxy,为 RFC 函数 RFC_SYSTEM_INFO 和 RFC_READ_TABLE, 生成代理类元数据,格式为 xml ...

  5. ABAP 标准培训教程 BC400 学习笔记之一:ABAP 服务器的架构和一个典型的 ABAP 程序结构介绍

    很多 ABAP 初学者通过各种社交平台向我提出这个问题: ABAP初学者如何系统地学习ABAP编程? 所以我专门写了一篇同名的文章来回答. 文章里提到,我的 ABAP 学习之路,其实并没有阅读过中文的 ...

  6. abap 帮助文档 中文_一个13年ABAP老兵的建议:了解这些知识对ABAP开发有百利而无一害...

    在Jerry之前的图片推送中,我提到了SAP社区上这样一篇博客: Proof of Concept: Deploying ABAP in Kubernetes https://blogs.sap.co ...

  7. 【SAP】ABAP——Web Service简介与配置方法

      本文转载  https://www.cnblogs.com/zohoo/p/7295920.html. 一. SAP Web Service简介 二. SAP Web Service配置准备工作 ...

  8. 一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害

    在Jerry之前的图片推送中,我提到了SAP社区上这样一篇博客: Proof of Concept: Deploying ABAP in Kubernetes https://blogs.sap.co ...

  9. 一个15年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害

    在笔者之前的文章里,曾经提到了 SAP社区上这样一篇博客:Proof of Concept: Deploying ABAP in Kubernetes 里面介绍了SAP Linux实验室的工程师们将A ...

最新文章

  1. Python,OpenCV基于支持向量机SVM的手写数字OCR
  2. 万字长文 | 23 个问题 TCP 疑难杂症全解析
  3. 【干货】在Redis中设置了过期时间的Key怎么办?
  4. 华为平板安装python_极致安卓—Termux/Aid Learning安装宇宙最强VS Code
  5. 【Java反射】反射机制性能问题、反射操作泛型
  6. python程序设计搜题软件下载_智慧职教云课堂APPPython程序设计答案搜题公众号
  7. 看看什么是藏匿而不申请[重复]
  8. Atitit.java expression fsm 表达式分词fsm引擎
  9. 齿轮刚度计算 matlab,数值积分求解齿轮刚度
  10. 用python写一个专属字典生成器
  11. 算力之都杭州:楼市向何处去
  12. kaggle员工离职预测案例(1)
  13. java周总结1113_流总结_序列化_xml_html
  14. Understanding Vertica Epochs
  15. Android 解析软件包时出现问题
  16. js网页动画,如何做一款高逼格不失真的动画
  17. HTML转EXE工具(HTML App Build)最新版
  18. gridview点击事件和滚动事件
  19. C++对C语言的扩充
  20. john the ripper 使用

热门文章

  1. uniapp项目创建打包生成安卓apk文件
  2. 个人永久性免费-Excel催化剂功能第103波-批量打开多文件或多链接
  3. 洛谷P1768 天路
  4. 如何实现拖拽上传、上传进度条,以及取消上传?
  5. 关于Windows_8.1/Windows 7下普通用户运行软件提示需要输入管理员密码解决方法
  6. 蓝牙App系列漏洞原理分析与漏洞利用
  7. SraToolkit工具下载与安装
  8. c4d python生成器教程_C4D中的python生成器
  9. AR/VR在医疗领域的应用
  10. Java实现简单的斗地主案例(超详细代码)