ABAP外調(diào)WebService過程介紹.doc_第1頁
ABAP外調(diào)WebService過程介紹.doc_第2頁
ABAP外調(diào)WebService過程介紹.doc_第3頁
ABAP外調(diào)WebService過程介紹.doc_第4頁
ABAP外調(diào)WebService過程介紹.doc_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第一章 proxy(代理)的生成首先通過se80進入到我們要創(chuàng)建proxy(代理)的package(包)。以我的zhr_password_change程序為例,該程序的目的是幫助用戶修改密碼,所以進入的是ZHR包。進入ZHR包后,右鍵選擇Create - Enterprise Service / Web Service - Proxy Object,彈出如下選擇框:由于我們是外調(diào)Web Service,所以選擇Service Consumer選項,并點擊繼續(xù)。隨后出現(xiàn)下面的選擇界面:這個選擇界面中,如果我們自己的機器就是服務器,那么可以選擇Local File,然后給出WSDL文件所在地。不過一般情況下,我們是通過URL/HTTP訪問WSDL文件的。這里,我得到的WSDL文件地址為:23/jfids/ChangePwService?wsdl我們需要先確認這個鏈接的有效性,可以在瀏覽器中打開這個鏈接,如果鏈接有效,則我們可以看到對應的xml代碼:將有效的URL地址輸入,點擊繼續(xù),如圖:接下來要選擇package(包)和prefix(前綴),package即proxy(代理)所在的包,prefix即代理各種屬性(比如名稱)、包含數(shù)據(jù)類型(比如輸入數(shù)據(jù)類型、輸出數(shù)據(jù)類型)等的前綴,主要用于與系統(tǒng)變量進行區(qū)分。我這里選擇的包是ZHR、前綴為ZCMIS_。輸入包名、前綴后選擇繼續(xù),此時會出現(xiàn)確認信息:完成后,會看到workbench request,設(shè)置請求號和描述:然后我們會發(fā)現(xiàn)package(包)里出現(xiàn)了Enterprise Service選項,里面包含了代理類及其用到的數(shù)據(jù)類型。我們需要保存并激活Enterprise Service選項:External View和Internal View分別展示了從被調(diào)用方和調(diào)用方看到的類的屬性,我們可以看到原函數(shù)名稱以及它在ABAP代碼中的名稱:Used Object選項會列出新生成的proxy類型以及其需要的數(shù)據(jù)類型(也就是前面指的輸入數(shù)據(jù)類型、輸出數(shù)據(jù)類型):我們可以通過雙擊proxy類型,察看這個類包含的屬性和方法。這里,我們可以看到ZCMIS_CO_CHANGE_PW_SERVICE包含了一個構(gòu)造函數(shù)和一個SET_PW_DATA方法:雙擊任意方法,就可以看到它的代碼。這里,我雙擊了構(gòu)造函數(shù)(CONSTRUCTOR),可看到該構(gòu)造函數(shù)需要文件名和邏輯端口號,以后的內(nèi)容我們將介紹邏輯端口號的配置和使用:同樣,我們在Used Objects中除了察看ZCMIS_CO_CHANGE_PW_SERVICE的屬性和方法之外,還可以察看其輸入、輸出數(shù)據(jù)的細節(jié),以輸入數(shù)據(jù)為例,雙擊ZCMIS_SET_PW_DATA:可以看到,ZCMIS_SET_PW_DATA是一個結(jié)構(gòu),包含了CONTROLLER、ARG0、ARG1、ARG2四個元素。其中CONTROLLER用于控制其它元素的格式,另外三個元素則來源于外部的Web Service。此處它們對應的是userID、oldPassword、newPassword三個數(shù)值。CONTROLLER是PRXCTRLTAB類型,即一個由PRXCTRL類型的數(shù)據(jù)組成的表格。PRXCTRL類型叫做輸入格式控制,包含兩個字段:FIELD和VALUE。其中,F(xiàn)IELD對應著被控制的字段名稱,VALUE通過不同值控制對應字段的輸入格式(通常為1),羅列如下:1Initial Value初始化,比如數(shù)字為0,日期為0000-00-00等2xsi:nil=truexml節(jié)點元素可為空3Hide隱藏第二章 設(shè)置邏輯端口上一章我們在察看ZCMIS_CO_CHANGE_PW_SERVICE類的CONSTRUCTOR(構(gòu)造函數(shù))的時候,看到有個參數(shù)叫做邏輯端口,邏輯端口可以用于軟件之間的數(shù)據(jù)交互,也可用于連接物理端口(比如打印機)。下面我們將配置ZCMIS_CO_CHANGE_PW_SERVICE需要的邏輯端口。使用事務代碼lpconfig可以進入管理邏輯端口的界面:輸入代理類名稱,邏輯端口名稱(這個可以自己命名,比如我們的邏輯端口用HTTP協(xié)議、80端口連接CMIS系統(tǒng),所以邏輯端口名稱就為CMIS_HTTP80)。如果該類沒有缺省端口,需要選中缺省端口,這樣才能在構(gòu)造函數(shù)沒有指明端口的情況下會將缺省端口作為邏輯端口。選擇中間的創(chuàng)建,進入編輯界面。在描述一欄,我們可以給出中文的信息,比如“員工自助修改密碼”。運行時間一欄,我們需要選擇Web服務基礎(chǔ)結(jié)構(gòu)。然后在調(diào)用參數(shù)一欄,我們需要給出URL地址,即前面提到的23/jfids/ChangePwService?wsdl:保存設(shè)置,會出現(xiàn)customizing request,設(shè)置請求號與描述:激活設(shè)置,即完成了邏輯端口配置。第三章 調(diào)用Web Service的代碼介紹這里依然將以員工自助密碼修改的功能為例,我為這個功能編寫的ABAP代碼名為:ZHR_PASSWORD_CHANGE。代碼內(nèi)容如下(需要重點關(guān)注的部分,我將以加粗字體進行介紹):*&-*&ReportZHR_PASSWORD_CHANGE*&*&-*&本程序用于員工PORTAL密碼修改*&該界面獲取用戶輸入的舊密碼、新密碼信息后,通過調(diào)用WebService對這些數(shù)據(jù)進行*&處理,完成更新密碼的工作*&WebService對應類型為ZLP01CO_CHANGE_PW_SERVICE:*&輸入為結(jié)構(gòu)ZLP01GET_STRING,含三個字段:*&arg0:用戶ID*&arg1:舊密碼*&arg2:新密碼*&輸出為結(jié)構(gòu)ZLP01GET_STRING_RESPONSE,含一個字段:*&return:計算結(jié)果,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,輸入?yún)?shù)包,包含了三個參數(shù)webservice_outputTYPEZCMIS_SET_PW_DATA_RESPONSE,返回值包,包含了返回值wa_inputLIKEprxctrl.輸入格式控制DATA:webservice_sys_errorTYPEREFTOcx_ai_system_fault,系統(tǒng)錯誤webservice_app_errorTYPEREFTOcx_ai_application_fault.應用錯誤DATA:new_password_lengthTYPEi,新密碼長度digit_countTYPEi.新密碼包含數(shù)字的位數(shù)我們在se80中利用外部鏈接23/jfids/ChangePwService?wsdl 定義好了ZCMIS_CO_CHANGE_PW_SERVICE類,這里的webservice_proxy即該類的對象。在第一章中,我們知道這個類的SET_PW_DATA方法的輸入數(shù)據(jù)類型為ZCMIS_SET_PW_DATA(含有CONTROLLER、ARG0、ARG1、ARG2四個字段)、返回數(shù)據(jù)類型為ZCMIS_SET_PW_DATA_RESPONSE(含有CONTROLLER、RETURN兩個字段),所以這里需要專門定義webservice_input、webservice_output作為輸入、輸出的對象。wa_input類型為prxctrl(參見第一章的內(nèi)容),CONTROLLER字段就是通過一組prxctrl數(shù)據(jù)來對各個字段進行輸入控制的。*&-*&模塊定義部分*&status_0100:屏幕運行前,設(shè)置工具欄、標題*&user_command_0100:屏幕運行后,根據(jù)用戶命令進行操作*&-*MODULEstatus_0100OUTPUT.SETPF-STATUSSTATUS_0100.設(shè)置工具欄SETTITLEBARTITLE_0100.設(shè)置標題ENDMODULE.MODULEuser_command_0100INPUT.CASEsy-ucomm.WHENPERFORM.執(zhí)行PERFORMread_text.PERFORMcompare_newpassword.WHENEXIT.退出LEAVEPROGRAM.ENDCASE.ENDMODULE.*&-*&宏定義部分*&-*DEFINEpopup.CALLFUNCTIONPOPUP_TO_CONFIRM_WITH_MESSAGEEXPORTINGTITEL=&1對話框主標題DIAGNOSETEXT1=&2抬頭TEXTLINE1=&3.正文END-OF-DEFINITION.*&-*&函數(shù)定義部分*&read_text:讀取需要的數(shù)據(jù)*&compare_newpassword:比較兩次輸入的新密碼,不同則重新輸入,相同則繼續(xù)執(zhí)行*&check_digit:檢查新輸入的密碼有多少數(shù)字,用于檢查密碼復雜度*&execute:執(zhí)行外部WebService的get_string函數(shù)*&reset:出現(xiàn)錯誤則清空輸入欄以便重新輸入*&-*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提示無效操作新密碼必須包含字母和數(shù)字,請重新輸入.ELSE.將三個參數(shù)轉(zhuǎn)換為函數(shù)設(shè)定的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.執(zhí)行g(shù)et_StringPERFORMexecute.ENDIF.ELSE.popup提示無效操作密碼長度不能小于6位,請重新輸入.PERFORMreset.ENDIF.ELSE.popup提示無效操作兩次輸入新密碼必須相同,請重新輸入.PERFORMreset.ENDIF.ENDFORM.在第一章中我們知道輸入數(shù)據(jù)除CONTROLLER外,真正輸送到Web Service一端的是ARG0、ARG1、ARG2三個字段,這里,我們通過wa_input對三個字段分別進行輸入控制的設(shè)置,并將設(shè)置存放進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.結(jié)果為success則成功,為fail則失敗IFwebservice_output-return=success.popup消息修改成功請按確認關(guān)閉對話框.PERFORMreset.ELSEIFwebservice_output-return=fail.popup消息修改失敗請檢查您的輸入.PERFORMr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論