ABAP 主动调用与被调用webservice实例
Posted 旧人九事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP 主动调用与被调用webservice实例相关的知识,希望对你有一定的参考价值。
- 主动调用:
步骤:创建企业服务代理类—SM59配置—LPCONFIG配置逻辑端口—接口调用方法类
1.1创建企业服务代理类:
1.1.1
1.1.2
1.1.3
1.2 SM59配置 最后保存即可
1.3 LPCONFIG配置逻辑端口
1.4接口调用方法类
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(INPUTCOLLECTION) TYPE ZMIP_OSB_MIP_MIP_HQ_IMPORT_CA1
*" OPTIONAL
*" EXPORTING
*" VALUE(E_TYPE) TYPE CHAR2
*" VALUE(E_MSG) TYPE CHAR255
*" VALUE(OUTPUTPARAMETERS) TYPE ZMIP_OSB_MIP_MIP_HQ_IMPORT_CAN
*"----------------------------------------------------------------------
DATA:ESB_MIP_CO_OSB TYPE REF TO ZMIP_CO_OSB_MIP_MIP_HQ_IMPORT,
OBJ_EXCEPTION TYPE REF TO CX_AI_SYSTEM_FAULT,
L_OUTPUT TYPE ZMIP_OSB_MIP_MIP_HQ_IMPORT_CAN,
L_INPUT TYPE ZMIP_OSB_MIP_MIP_HQ_IMPORT_CA1.
DATA: ERRORTEXT TYPE STRING.
*INPUTCOLLECTION-PAYLOAD-INPUTCOLLECTION-INPUTCOLLECTION_ITEMs
****Set the input parameter into the Request of the SOAP Object
****Create the Proxy and Clall it.
CREATE OBJECT ESB_MIP_CO_OSB.
TRY.
CALL METHOD ESB_MIP_CO_OSB->PROCESS
EXPORTING
INPUT = INPUTCOLLECTION
IMPORTING
OUTPUT = OUTPUTPARAMETERS.
CATCH CX_AI_SYSTEM_FAULT INTO OBJ_EXCEPTION .
CALL METHOD OBJ_EXCEPTION->GET_TEXT
RECEIVING
RESULT = ERRORTEXT.
E_TYPE = \'E\'.
E_MSG = ERRORTEXT.
EXIT.
ENDTRY.
2.被调用
步骤:创建RFC函数—创建该函数的企业服务生产URL(WSDL)—SOAMANAGER配置
2.1
被调用代码(json格式转换):
FUNCTION ZFM_ESB_LIFNR_MAINTAIN_OL.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(MSGHEADER) TYPE ZSESB_MSGHEADER OPTIONAL
*" VALUE(INPUTCOLLECTION) TYPE ZINPUTCOLLECTION OPTIONAL
*" EXPORTING
*" VALUE(OUTPUTPARAMETERS) TYPE ZSESB_OUT_OL
*"----------------------------------------------------------------------
DATA: ZINPUTCOLLECTION TYPE ZESB_INPUT_JSON_MAINTAIN,
ZOUTPUTPARAMETERS TYPE ZSESB_OUT_LIFNR_MAINTAIN,
LS_INPUT TYPE ZSLIFNR,
LS_INPUTJSON TYPE STRING,
LS_OUTPUTJSON TYPE STRING,
ERRORTEXT TYPE STRING.
DATA: JSON_SER TYPE REF TO CL_TREX_JSON_SERIALIZER,
JSON_DES TYPE REF TO CL_TREX_JSON_DESERIALIZER.
DATA CX_TREX TYPE REF TO CX_TREX_SERIALIZATION.
DATA: OBJ_EXCEPTION TYPE REF TO CX_AI_SYSTEM_FAULT.
* ls_inputjson = msgheader-input_json.
* DATA:ZINPUTCOLLECTION TYPE
* DATA:LT_ITEM TYPE ZTINPUTCOLLECTION .
DATA:LW_ITEM TYPE ZSINPUTCOLLECTION .
LW_ITEM = INPUTCOLLECTION-INPUTCOLLECTION_ITEM.
* READ TABLE LT_ITEM INTO LW_ITEM INDEX 1.
LS_INPUTJSON = LW_ITEM-INPUT_JSON.
TRANSLATE LS_INPUTJSON TO UPPER CASE.
REPLACE ALL OCCURRENCES OF \'"LIFNR"\' IN LS_INPUTJSON WITH \'lifnr\'.
REPLACE ALL OCCURRENCES OF \'"BUKRS"\' IN LS_INPUTJSON WITH \'bukrs\'.
REPLACE ALL OCCURRENCES OF \'"EKORG"\' IN LS_INPUTJSON WITH \'ekorg\'.
REPLACE ALL OCCURRENCES OF \'"KTOKK"\' IN LS_INPUTJSON WITH \'ktokk\'.
REPLACE ALL OCCURRENCES OF \'"AKONT"\' IN LS_INPUTJSON WITH \'akont\'.
REPLACE ALL OCCURRENCES OF \'"TITLE"\' IN LS_INPUTJSON WITH \'title\'.
REPLACE ALL OCCURRENCES OF \'"NAME1"\' IN LS_INPUTJSON WITH \'name1\'.
REPLACE ALL OCCURRENCES OF \'"NAME2"\' IN LS_INPUTJSON WITH \'name2\'.
REPLACE ALL OCCURRENCES OF \'"SORTL"\' IN LS_INPUTJSON WITH \'sortl\'.
REPLACE ALL OCCURRENCES OF \'"STRAS"\' IN LS_INPUTJSON WITH \'stras\'.
REPLACE ALL OCCURRENCES OF \'"PSTLZ"\' IN LS_INPUTJSON WITH \'pstlz\'.
REPLACE ALL OCCURRENCES OF \'"ORT01"\' IN LS_INPUTJSON WITH \'ort01\'.
REPLACE ALL OCCURRENCES OF \'"LAND1"\' IN LS_INPUTJSON WITH \'land1\'.
REPLACE ALL OCCURRENCES OF \'"REGIO"\' IN LS_INPUTJSON WITH \'regio\'.
REPLACE ALL OCCURRENCES OF \'"TELX1"\' IN LS_INPUTJSON WITH \'telx1\'.
REPLACE ALL OCCURRENCES OF \'"TELF3"\' IN LS_INPUTJSON WITH \'telf3\'.
REPLACE ALL OCCURRENCES OF \'"TELFX"\' IN LS_INPUTJSON WITH \'telfx\'.
REPLACE ALL OCCURRENCES OF \'"LANGU"\' IN LS_INPUTJSON WITH \'langu\'.
REPLACE ALL OCCURRENCES OF \'"KUNNR"\' IN LS_INPUTJSON WITH \'kinnr\'.
REPLACE ALL OCCURRENCES OF \'"BEGRU"\' IN LS_INPUTJSON WITH \'begru\'.
REPLACE ALL OCCURRENCES OF \'"STCD3"\' IN LS_INPUTJSON WITH \'stcd3\'.
REPLACE ALL OCCURRENCES OF \'"STCD5"\' IN LS_INPUTJSON WITH \'stcd5\'.
REPLACE ALL OCCURRENCES OF \'"BANKS"\' IN LS_INPUTJSON WITH \'banks\'.
REPLACE ALL OCCURRENCES OF \'"BANKL"\' IN LS_INPUTJSON WITH \'bankl\'.
REPLACE ALL OCCURRENCES OF \'"BANKA"\' IN LS_INPUTJSON WITH \'banka\'.
REPLACE ALL OCCURRENCES OF \'"BANKN"\' IN LS_INPUTJSON WITH \'bankn\'.
REPLACE ALL OCCURRENCES OF \'"KOINH"\' IN LS_INPUTJSON WITH \'koinh\'.
REPLACE ALL OCCURRENCES OF \'"BVTYP"\' IN LS_INPUTJSON WITH \'bvtyp\'.
REPLACE ALL OCCURRENCES OF \'"BKREF"\' IN LS_INPUTJSON WITH \'bkref\'.
REPLACE ALL OCCURRENCES OF \'"ZUAWA"\' IN LS_INPUTJSON WITH \'zuawa\'.
REPLACE ALL OCCURRENCES OF \'"ZTERM"\' IN LS_INPUTJSON WITH \'zterm\'.
REPLACE ALL OCCURRENCES OF \'"REPRF"\' IN LS_INPUTJSON WITH \'reprf\'.
REPLACE ALL OCCURRENCES OF \'"ZWELS"\' IN LS_INPUTJSON WITH \'zwels\'.
REPLACE ALL OCCURRENCES OF \'"WAERS"\' IN LS_INPUTJSON WITH \'waers\'.
REPLACE ALL OCCURRENCES OF \'"WEBRE"\' IN LS_INPUTJSON WITH \'webre\'.
REPLACE ALL OCCURRENCES OF \'"PROVZ"\' IN LS_INPUTJSON WITH \'provz\'.
REPLACE ALL OCCURRENCES OF \'"ORT02"\' IN LS_INPUTJSON WITH \'ort02\'.
REPLACE ALL OCCURRENCES OF \'"BRSCH"\' IN LS_INPUTJSON WITH \'brsch\'.
REPLACE ALL OCCURRENCES OF \'"[\' IN LS_INPUTJSON WITH \'[\'.
REPLACE ALL OCCURRENCES OF \']"\' IN LS_INPUTJSON WITH \']\'.
TRY .
"传入参数JSON=> 转换为结构
CREATE OBJECT JSON_DES.
CALL METHOD JSON_DES->DESERIALIZE
EXPORTING
JSON = LS_INPUTJSON
IMPORTING
ABAP = LS_INPUT.
ZINPUTCOLLECTION-INPUT_JSON = LS_INPUT.
CALL FUNCTION \'ZFM_ESB_LIFNR_MAINTAIN\'
EXPORTING
MSGHEADER = MSGHEADER
INPUTCOLLECTION = ZINPUTCOLLECTION
IMPORTING
OUTPUTPARAMETERS = ZOUTPUTPARAMETERS.
* CATCH cx_trex_serialization INTO cx_trex.
CATCH CX_AI_SYSTEM_FAULT INTO OBJ_EXCEPTION.
CALL METHOD OBJ_EXCEPTION->GET_TEXT
RECEIVING
RESULT = ERRORTEXT.
ZOUTPUTPARAMETERS-OUTPUT_JSON-E_TYPE = \'E\'.
ZOUTPUTPARAMETERS-OUTPUT_JSON-E_MESSAGE = ERRORTEXT.
EXIT.
ENDTRY.
"解析返回参数
TRY .
* ***内表->JSON
CREATE OBJECT JSON_SER
EXPORTING
DATA = ZOUTPUTPARAMETERS-OUTPUT_JSON.
CALL METHOD JSON_SER->SERIALIZE.
CALL METHOD JSON_SER->GET_DATA
RECEIVING
RVAL = LS_OUTPUTJSON.
MOVE: ZOUTPUTPARAMETERS-ESB_FLAG TO OUTPUTPARAMETERS-ESB_FLAG,
ZOUTPUTPARAMETERS-ESB_RETURN_CODE TO OUTPUTPARAMETERS-ESB_RETURN_CODE,
ZOUTPUTPARAMETERS-ESB_RETURN_MESSAGE TO OUTPUTPARAMETERS-ESB_RETURN_MESSAGE,
ZOUTPUTPARAMETERS-BIZ_SERVICE_FLAG TO OUTPUTPARAMETERS-BIZ_SERVICE_FLAG,
ZOUTPUTPARAMETERS-BIZ_RETURN_CODE TO OUTPUTPARAMETERS-BIZ_RETURN_CODE,
ZOUTPUTPARAMETERS-BIZ_RETURN_MESSAGE TO OUTPUTPARAMETERS-BIZ_RETURN_MESSAGE,
ZOUTPUTPARAMETERS-INSTANCE_ID TO OUTPUTPARAMETERS-INSTANCE_ID.
REPLACE ALL OCCURRENCES OF \'e_lifnr\' IN LS_OUTPUTJSON WITH \'"e_lifnr"\'.
REPLACE ALL OCCURRENCES OF \'e_bankl\' IN LS_OUTPUTJSON WITH \'"e_bankl"\'.
REPLACE ALL OCCURRENCES OF \'e_type\' IN LS_OUTPUTJSON WITH \'"e_type"\'.
REPLACE ALL OCCURRENCES OF \'e_message\' IN LS_OUTPUTJSON WITH \'"e_message"\'.
* REPLACE ALL OCCURRENCES OF \'[\' IN LS_OUTPUTJSON WITH \'"[\'.
* REPLACE ALL OCCURRENCES OF \']\' IN LS_OUTPUTJSON WITH \']"\'.
OUTPUTPARAMETERS-OUTPUT_JSON = LS_OUTPUTJSON.
TRANSLATE OUTPUTPARAMETERS-OUTPUT_JSON TO UPPER CASE.
CATCH CX_TREX_SERIALIZATION INTO CX_TREX.
CALL METHOD CX_TREX->GET_TEXT
RECEIVING
RESULT = ERRORTEXT.
ZOUTPUTPARAMETERS-OUTPUT_JSON-E_TYPE = \'E\'.
ZOUTPUTPARAMETERS-OUTPUT_JSON-E_MESSAGE = ERRORTEXT.
EXIT.
ENDTRY.
ENDFUNCTION.
以上是关于ABAP 主动调用与被调用webservice实例的主要内容,如果未能解决你的问题,请参考以下文章