ABAP外调WebService过程介绍.doc_第1页
ABAP外调WebService过程介绍.doc_第2页
ABAP外调WebService过程介绍.doc_第3页
ABAP外调WebService过程介绍.doc_第4页
ABAP外调WebService过程介绍.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 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文件地址为:23/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),罗列如下:1Initial Value初始化,比如数字为0,日期为0000-00-00等2xsi:nil=truexml节点元素可为空3Hide隐藏第二章 设置逻辑端口上一章我们在察看ZCMIS_CO_CHANGE_PW_SERVICE类的CONSTRUCTOR(构造函数)的时候,看到有个参数叫做逻辑端口,逻辑端口可以用于软件之间的数据交互,也可用于连接物理端口(比如打印机)。下面我们将配置ZCMIS_CO_CHANGE_PW_SERVICE需要的逻辑端口。使用事务代码lpconfig可以进入管理逻辑端口的界面:输入代理类名称,逻辑端口名称(这个可以自己命名,比如我们的逻辑端口用HTTP协议、80端口连接CMIS系统,所以逻辑端口名称就为CMIS_HTTP80)。如果该类没有缺省端口,需要选中缺省端口,这样才能在构造函数没有指明端口的情况下会将缺省端口作为逻辑端口。选择中间的创建,进入编辑界面。在描述一栏,我们可以给出中文的信息,比如“员工自助修改密码”。运行时间一栏,我们需要选择Web服务基础结构。然后在调用参数一栏,我们需要给出URL地址,即前面提到的23/jfids/ChangePwService?wsdl:保存设置,会出现customizing request,设置请求号与描述:激活设置,即完成了逻辑端口配置。第三章 调用Web Service的代码介绍这里依然将以员工自助密码修改的功能为例,我为这个功能编写的ABAP代码名为:ZHR_PASSWORD_CHANGE。代码内容如下(需要重点关注的部分,我将以加粗字体进行介绍):*&-*&ReportZHR_PASSWORD_CHANGE*&*&-*&本程序用于员工PORTAL密码修改*&该界面获取用户输入的旧密码、新密码信息后,通过调用WebService对这些数据进行*&处理,完成更新密码的工作*&WebService对应类型为ZLP01CO_CHANGE_PW_SERVICE:*&输入为结构ZLP01GET_STRING,含三个字段:*&arg0:用户ID*&arg1:旧密码*&arg2:新密码*&输出为结构ZLP01GET_STRING_RESPONSE,含一个字段:*&return:计算结果,success为成功,fail为失败*&更多详情请参看其他注释*&-*&-*&变量定义部分*&-*REPORTZHR_PASSWORD_CHANGE.DATA:ok_codeTYPEsy-ucomm,用户操作useridTYPEsy-uname.用户IDDATA:pre_password_str(24)TYPEc,对应0100屏幕第一行文本框new_password_str1(24)TYPEc,对应0100屏幕第二行文本框new_password_str2(24)TYPEc.对应0100屏幕第三行文本框DATA:webservice_proxyWebService代理对象TYPEREFTOZCMIS_CO_CHANGE_PW_SERVICE,WebService代理类型webservice_inputTYPEZCMIS_SET_PW_DATA,输入参数包,包含了三个参数webservice_outputTYPEZCMIS_SET_PW_DATA_RESPONSE,返回值包,包含了返回值wa_inputLIKEprxctrl.输入格式控制DATA:webservice_sys_errorTYPEREFTOcx_ai_system_fault,系统错误webservice_app_errorTYPEREFTOcx_ai_application_fault.应用错误DATA:new_password_lengthTYPEi,新密码长度digit_countTYPEi.新密码包含数字的位数我们在se80中利用外部链接23/jfids/ChangePwService?wsdl 定义好了ZCMIS_CO_CHANGE_PW_SERVICE类,这里的webservice_proxy即该类的对象。在第一章中,我们知道这个类的SET_PW_DATA方法的输入数据类型为ZCMIS_SET_PW_DATA(含有CONTROLLER、ARG0、ARG1、ARG2四个字段)、返回数据类型为ZCMIS_SET_PW_DATA_RESPONSE(含有CONTROLLER、RETURN两个字段),所以这里需要专门定义webservice_input、webservice_output作为输入、输出的对象。wa_input类型为prxctrl(参见第一章的内容),CONTROLLER字段就是通过一组prxctrl数据来对各个字段进行输入控制的。*&-*&模块定义部分*&status_0100:屏幕运行前,设置工具栏、标题*&user_command_0100:屏幕运行后,根据用户命令进行操作*&-*MODULEstatus_0100OUTPUT.SETPF-STATUSSTATUS_0100.设置工具栏SETTITLEBARTITLE_0100.设置标题ENDMODULE.MODULEuser_command_0100INPUT.CASEsy-ucomm.WHENPERFORM.执行PERFORMread_text.PERFORMcompare_newpassword.WHENEXIT.退出LEAVEPROGRAM.ENDCASE.ENDMODULE.*&-*&宏定义部分*&-*DEFINEpopup.CALLFUNCTIONPOPUP_TO_CONFIRM_WITH_MESSAGEEXPORTINGTITEL=&1对话框主标题DIAGNOSETEXT1=&2抬头TEXTLINE1=&3.正文END-OF-DEFINITION.*&-*&函数定义部分*&read_text:读取需要的数据*&compare_newpassword:比较两次输入的新密码,不同则重新输入,相同则继续执行*&check_digit:检查新输入的密码有多少数字,用于检查密码复杂度*&execute:执行外部WebService的get_string函数*&reset:出现错误则清空输入栏以便重新输入*&-*FORMread_text.userid=sy-uname.读取登陆用户pre_password_str=pre_password_str.读取用户输入的旧密码new_password_str1=new_password_str1.读取用户输入的新密码new_password_str2=new_password_str2.读取再次输入的新密码new_password_length=strlen(new_password_str1).digit_count=0.ENDFORM.FORMcompare_newpassword.IFnew_password_str1=new_password_str2.IFnew_password_length5.PERFORMcheck_digit.IFdigit_count=new_password_lengthORdigit_count=0.popup提示无效操作新密码必须包含字母和数字,请重新输入.ELSE.将三个参数转换为函数设定的structurewa_input-field=ARG0.wa_input-value=1.APPENDwa_inputTOwebservice_input-controller.wa_input-field=ARG1.wa_input-value=1.APPENDwa_inputTOwebservice_input-controller.wa_input-field=ARG2.wa_input-value=1.APPENDwa_inputTOwebservice_input-controller.CLEARwa_input.webservice_input-arg0=userid.webservice_input-arg1=pre_password_str.webservice_input-arg2=new_password_str1.执行get_StringPERFORMexecute.ENDIF.ELSE.popup提示无效操作密码长度不能小于6位,请重新输入.PERFORMreset.ENDIF.ELSE.popup提示无效操作两次输入新密码必须相同,请重新输入.PERFORMreset.ENDIF.ENDFORM.在第一章中我们知道输入数据除CONTROLLER外,真正输送到Web Service一端的是ARG0、ARG1、ARG2三个字段,这里,我们通过wa_input对三个字段分别进行输入控制的设置,并将设置存放进CONTROLLER字段。ARG0、ARG1、ARG2三个字段均为String型,可以直接赋值,所以我们是直接将用户ID、旧密码、新密码赋值给它们。FORMcheck_digit.DATA:indexTYPEi.index=0.WHILEindex=0ANDnew_password_str1+index(1)SET_PW_DATAEXPORTINGinput=webservice_inputIMPORTINGoutput=webservice_output.CATCHcx_ai_system_faultINTOwebservice_sys_error.CATCHcx_ai_application_faultINTOwebservice_app_error.ENDTRY.结果为success则成功,为fail则失败IFwebservice_output-return=success.popup消息修改成功请按确认关闭对话框.PERFORMreset.ELSEIFwebservice_output-return=fail.popup消息修改失败请检查您的输入.PERFORMr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论