欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

我的第一个 SAP PROXY ABAP 程序(SAP PO 开发 V)

最编程 2024-04-11 22:56:25
...

登陆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(
        EXPORTING
        OUTPUT = Z2
        IMPORTING
        INPUT  = 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'
    EXPORTING
      VALUE               =   GV_VALUE
   IMPORTING
     GETDATARESULT       =  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(
        EXPORTING
        OUTPUT = Z2
        IMPORTING
        INPUT  = 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.