ABAP 主动调用与被调用webservice实例

Posted 旧人九事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP 主动调用与被调用webservice实例相关的知识,希望对你有一定的参考价值。

  1. 主动调用:

步骤:创建企业服务代理类—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实例的主要内容,如果未能解决你的问题,请参考以下文章

20170325 ABAP调用webservice

ABAP调用WebService时日期类型问题

ABAP调用外部WebService

20170401 ABAP调用CIS webservice

ABAP创建Domino WebService代理对象类时报错

webService总结——使用CXF公布和调用webService(不使用Spring)