ABAP外调WebService过程的介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章proxy(代理)的生成
首先通过se80进入到我们要创建proxy(代理)的package(包)。以我的zhr_password_change程序为例,该程序的目的是帮助用户修改密码,所以进入的是ZHR包。
进入ZHR包后,右键选择Create -> Enterprise Service / Web Service -> Proxy Object,弹出如下选择框:
由于我们是外调Web Service,所以选择Service Consumer选项,并点击继续。随后出现下面的选择界面:
这个选择界面中,如果我们自己的机器就是服务器,那么可以选择Local File,然后给出WSDL文件所在地。不过
一般情况下,我们是通过URL/HTTP访问WSDL文件的。这里,我得到的WSDL文件地址为:
http://10.3.11.123/jfids/ChangePwService?wsdl
我们需要先确认这个链接的有效性,可以在浏览器中打开这个链接,如果链接有效,则我们可以看到对应的xml 代码:
将有效的URL地址输入,点击继续,如图:
接下来要选择package(包)和prefix(前缀),package即proxy(代理)所在的包,prefix即代理各种属性(比如名称)、包含数据类型(比如输入数据类型、输出数据类型)等的前缀,主要用于与系统变量进行区分。我这里选择的包是ZHR、前缀为ZCMIS_。
输入包名、前缀后选择继续,此时会出现确认信息:
完成后,会看到workbench request,设置请求号和描述:
然后我们会发现package(包)里出现了Enterprise Service选项,里面包含了代理类及其用到的数据类型。我们需要保存并激活Enterprise Service选项:
External View和Internal View分别展示了从被调用方和调用方看到的类的属性,我们可以看到原函数名称以及它在ABAP代码中的名称:
Used Object选项会列出新生成的proxy类型以及其需要的数据类型(也就是前面指的输入数据类型、输出数据类型):
我们可以通过双击proxy类型,察看这个类包含的属性和方法。这里,我们可以看到ZCMIS_CO_CHANGE_PW_SERVICE包含了一个构造函数和一个SET_PW_DATA方法:
双击任意方法,就可以看到它的代码。这里,我双击了构造函数(CONSTRUCTOR),可看到该构造函数需要文件名和逻辑端口号,以后的内容我们将介绍逻辑端口号的配置和使用:
同样,我们在Used Objects中除了察看ZCMIS_CO_CHANGE_PW_SERVICE的属性和方法之外,还可以察看其输入、输出数据的细节,以输入数据为例,双击ZCMIS_SET_PW_DATA:
可以看到,ZCMIS_SET_PW_DATA是一个结构,包含了CONTROLLER、ARG0、ARG1、ARG2四个元素。其中CONTROLLER用于控制其它元素的格式,另外三个元素则来源于外部的Web Service。此处它们对应的是userID、oldPassword、newPassword三个数值。
CONTROLLER是PRXCTRLTAB类型,即一个由PRXCTRL类型的数据组成的表格。PRXCTRL类型叫做输入格式控制,包含两个字段:FIELD和VALUE。其中,FIELD对应着被控制的字段名称,VALUE通过不同值控制对应字段的输入格式(通常为1),罗列如下:
1 Initial Value 初始化,比如数字为0,日期为0000-00-00等
2 xsi:nil="true" xml节点元素可为空
3 Hide 隐藏
第二章设置逻辑端口
上一章我们在察看ZCMIS_CO_CHANGE_PW_SERVICE类的CONSTRUCTOR(构造函数)的时候,看到有个参数叫做逻辑端口,逻辑端口可以用于软件之间的数据交互,也可用于连接物理端口(比如打印机)。下面我们将配置ZCMIS_CO_CHANGE_PW_SERVICE需要的逻辑端口。
使用事务代码lpconfig可以进入管理逻辑端口的界面:
输入代理类名称,逻辑端口名称(这个可以自己命名,比如我们的逻辑端口用HTTP协议、80端口连接CMIS系统,所以逻辑端口名称就为CMIS_HTTP80)。如果该类没有缺省端口,需要选中缺省端口,这样才能在构造函数没有
指明端口的情况下会将缺省端口作为逻辑端口。
选择中间的创建,进入编辑界面。在描述一栏,我们可以给出中文的信息,比如“员工自助修改密码”。运行时间一栏,我们需要选择Web服务基础结构。然后在调用参数一栏,我们需要给出URL地址,即前面提到的http://10.3.11.123/jfids/ChangePwService?wsdl:
保存设置,会出现customizing request,设置请求号与描述:
激活设置,即完成了逻辑端口配置。
第三章调用Web Service的代码介绍
这里依然将以员工自助密码修改的功能为例,我为这个功能编写的ABAP代码名为:ZHR_PASSWORD_CHANGE。代码内容如下(需要重点关注的部分,我将以加粗字体进行介绍):
*&---------------------------------------------------------------------*
*& Report ZHR_PASSWORD_CHANGE
*&
*&---------------------------------------------------------------------*
*& 本程序用于员工PORTAL密码修改
*& 该界面获取用户输入的旧密码、新密码信息后,通过调用WebService对这些数据进行
*& 处理,完成更新密码的工作
*& WebService对应类型为ZLP01CO_CHANGE_PW_SERVICE:
*& 输入为结构ZLP01GET_STRING,含三个字段:
*& arg0:用户ID
*& arg1:旧密码