项目中,可能会碰到客户提出需求,需要SAP、ABAP去访问已有WebService。本文以一个中国股票行情数据 WEB 服务为例,实现SAP调用第三方WebService

一、常用WebService一览

常用的WebService有很多,这里就不一一列举了,查看链接:常用WebService一览

二、SAP配置客户端代理(Client Proxies)

1.在SE80中新建一个Package,然后在包名上右击Create->Enterprise Service/Web Service->Proxy Object

clip_image002

2.根据向导一步一步创建。

常用的是URL/HTTP Destination

clip_image003

在URL中填写对应WebService的WSDL,这里是http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL

clip_image004

选择port type,只能选Soap,别的都会报错

clip_image005

填写Package和前缀,前缀的命名有一定的要求,按F1查看,确定后创建完成。

clip_image006

激活。中间如果有各种警告都不要理会,一直确定,最后激活即可。

3.LPCONFIG中设置Logical Port

Proxy Class写在SE80中创建的代理类的名字

Logical Port自己取一个名字

Default Port记得打勾

然后创建,输入描述后保存激活。创建后可以查看一些参数配置,基本上默认就行

clip_image008

4.返回SE80查看一些属性。在刚才建的Proxy Class的类上双击,查看Generation。

第一行是你的Proxy Class类名

后边都是WebSerice接口相应的输入输出参数类型,一般名字会和接口的名字相关。

clip_image009

在第一行上双击进去可以看到所包含的的接口,这里有5个接口和1个构造函数。

clip_image011

三、程序部分

REPORT  ZSTOCK.
DATA: PROXY TYPE REF TO ZPR_CO_CHINA_STOCK_WEB_SERVICE, "PROXY CLASS
      SO1 TYPE ZPR_GET_STOCK_INFO_BY_CODE_SO1,"GET_STOCK_INFO_BY_CODE接口的输入参数
      SOA TYPE ZPR_GET_STOCK_INFO_BY_CODE_SOA,"GET_STOCK_INFO_BY_CODE接口的输出参数
      WA_STRING LIKE LINE OF SOA-GET_STOCK_INFO_BY_CODE_RESULT-STRING,
      IT_LABLE TYPE STANDARD TABLE OF STRING,
      WA_LABLE TYPE STRING,
      ERROR TYPE REF TO CX_AI_SYSTEM_FAULT.
SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001."选择屏幕
PARAMETERS: P_CODE LIKE SO1-THE_STOCK_CODE OBLIGATORY DEFAULT 'SZ300170'.
SELECTION-SCREEN END OF BLOCK BLK.
INITIALIZATION."初始化一些标签说明
APPEND '股票代号:' TO IT_LABLE.
APPEND '股票名称:' TO IT_LABLE.
APPEND '行情时间:' TO IT_LABLE.
APPEND '最新价(元):' TO IT_LABLE.
APPEND '昨收盘(元):' TO IT_LABLE.
APPEND '今开盘(元):' TO IT_LABLE.
APPEND '涨跌额(元)' TO IT_LABLE.
APPEND '最低(元):' TO IT_LABLE.
APPEND '最高(元):' TO IT_LABLE.
APPEND '涨跌幅(%):' TO IT_LABLE.
APPEND '成交量(手):' TO IT_LABLE.
APPEND '成交额(万元):' TO IT_LABLE.
APPEND '竞买价(元):' TO IT_LABLE.
APPEND '竞买价(元):' TO IT_LABLE.
APPEND '委比(%):' TO IT_LABLE.
APPEND '买一(元)/手:' TO IT_LABLE.
APPEND '买二(元)/手:' TO IT_LABLE.
APPEND '买三(元)/手:' TO IT_LABLE.
APPEND '买四(元)/手:' TO IT_LABLE.
APPEND '买五(元)/手:' TO IT_LABLE.
APPEND '卖一(元)/手:' TO IT_LABLE.
APPEND '卖二(元)/手:' TO IT_LABLE.
APPEND '卖三(元)/手:' TO IT_LABLE.
APPEND '卖四(元)/手:' TO IT_LABLE.
APPEND '卖五(元)/手:' TO IT_LABLE.
START-OF-SELECTION.
SO1-THE_STOCK_CODE = P_CODE.
TRY .
CREATE OBJECT PROXY"初始化PROXY
EXPORTING
        LOGICAL_PORT_NAME = 'STOCK_WEBSERVICE'.
CALL METHOD PROXY->GET_STOCK_INFO_BY_CODE"调用GET_STOCK_INFO_BY_CODE
EXPORTING
INPUT  = SO1
IMPORTING
OUTPUT = SOA
.
CATCH CX_AI_SYSTEM_FAULT INTO ERROR.
WRITE /1 ERROR->ERRORTEXT.
ENDTRY.
LOOP AT SOA-GET_STOCK_INFO_BY_CODE_RESULT-STRING INTO WA_STRING."输出
READ TABLE IT_LABLE INTO WA_LABLE INDEX SY-TABIX.
WRITE: WA_LABLE,WA_STRING,/.
ENDLOOP.

四、运行效果:

image

这样就完成了一个SAP内置炒股软件,SAP真是无所不能啊:)