ABAP 搭建中台技术第一步 rfc+json组合能够通用所有接口

Posted 风口的猪会飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP 搭建中台技术第一步 rfc+json组合能够通用所有接口相关的知识,希望对你有一定的参考价值。

我先撸一个最简单的rfc
RFC 有

LT_TABLES    TYPE RSFB_PARA,

    LT_IMPORT    TYPE RSFB_PARA,
    LT_EXPORT    TYPE RSFB_PARA,
    LT_CHANGE    TYPE RSFB_PARA,

再加一个异常
FUNCTION ZFMALL_SEND_TO_SAP.

*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IS_INPUT) TYPE ZSHALL_0001_INS
*" EXPORTING
*" VALUE(ES_OUTPUT) TYPE ZSHRALL_OUS
*"----------------------------------------------------------------------

* [Global data declarations](global-zfmall_send_to_sap.html)

  DATA:
    LT_PTAB      TYPE ABAP_FUNC_PARMBIND_TAB,
    LS_PTAB      LIKE LINE OF LT_PTAB,
    LT_ETAB      TYPE ABAP_FUNC_EXCPBIND_TAB,
    LS_ETAB      LIKE LINE OF LT_ETAB,
    LS_HEADER_GD TYPE HEADER_FB,
    LT_TABLES    TYPE RSFB_PARA,
    LT_IMPORT    TYPE RSFB_PARA,
    LT_EXPORT    TYPE RSFB_PARA,
    LT_CHANGE    TYPE RSFB_PARA,
    DYN_WA_INS   TYPE REF TO DATA,
    DYN_WA_OUS   TYPE REF TO DATA,
    LV_STRCRQ    TYPE ZESTRCRQ,
    LV_STRCRS    TYPE ZESTRCRS,
    LV_STRING    TYPE STRING,
    LV_TABNAME   TYPE TABNAME.
  DATA: LV_DATE_START LIKE SY-DATUM,
        LV_TIME_START LIKE SY-UZEIT,
        LV_DATE_END   LIKE SY-DATUM,
        LV_TIME_END   LIKE SY-UZEIT,
        LV_DAYS       TYPE I,
        LV_TIMES      TYPE CVA_TIME,
        LV_TSPAN      TYPE ZETSPAN.
  CLEAR: LV_DATE_START, LV_TIME_START.
  LV_DATE_START = SY-DATUM.
  LV_TIME_START = SY-UZEIT.
  FIELD-SYMBOLS:<DYN_WA_INS> TYPE ANY,
                <DYN_WA_OUS> TYPE ANY.
  SELECT SINGLE FUNCNAME INTO @DATA(LV_FUNCNAME)
    FROM ZINTFLOG002
    WHERE SYSNM = @IS_INPUT-IS_SAPSYS-SYSNM
      AND INTNR = @IS_INPUT-IS_SAPSYS-INTNR
      AND ACTIV = \'X\'.
  CHECK SY-SUBRC = 0.
  CLEAR: LT_PTAB[].
  SELECT SINGLE PNAME INTO @DATA(LV_PNAME) FROM TFDIR WHERE FUNCNAME = @LV_FUNCNAME.
  LS_HEADER_GD-NAME = LV_FUNCNAME.
  CALL FUNCTION \'FUNCTION_INCLUDE_SPLIT\'
    EXPORTING
      PROGRAM   = LV_PNAME
    IMPORTING
      GROUP     = LS_HEADER_GD-AREA
      NAMESPACE = LS_HEADER_GD-NAMESPACE
    EXCEPTIONS
      OTHE      = 12.
  IF SY-SUBRC = 0.
    CONCATENATE LS_HEADER_GD-NAMESPACE LS_HEADER_GD-AREA INTO LS_HEADER_GD-AREA.
    REFRESH:LT_TABLES,LT_IMPORT,LT_EXPORT,LT_CHANGE.
    CALL METHOD CL_FB_PARAMETER_DB=>READ
      IMPORTING
        TABLES = LT_TABLES
        IMPORT = LT_IMPORT
        EXPORT = LT_EXPORT
        CHANGE = LT_CHANGE
      CHANGING
        HEADER = LS_HEADER_GD.
  ENDIF.

****import 操作

  IF LT_IMPORT[] IS NOT INITIAL.
    READ TABLE LT_IMPORT ASSIGNING FIELD-SYMBOL(<FS_IMPORT>) INDEX 1.
    CREATE DATA DYN_WA_INS TYPE (<FS_IMPORT>-STRUCTURE).
    ASSIGN DYN_WA_INS->* TO <DYN_WA_INS>.
    call function \'ZFM_EHR_JSON_TO_ABAP\'
      EXPORTING
        IV_JSON = IS_INPUT-INPUT
      IMPORTING
        EV_DATA = <DYN_WA_INS>.
    LS_PTAB-NAME = <FS_IMPORT>-PARAMETER.
    LS_PTAB-KIND = ABAP_FUNC_EXPORTING.
    GET REFERENCE OF <DYN_WA_INS> INTO LS_PTAB-VALUE.
    INSERT LS_PTAB INTO TABLE LT_PTAB.
    CLEAR:LS_PTAB.
  ENDIF.

**** export 操作

  IF LT_EXPORT[] IS NOT INITIAL.
    READ TABLE LT_EXPORT ASSIGNING FIELD-SYMBOL(<FS_EXPORT>) INDEX 1.
    CREATE DATA DYN_WA_OUS TYPE (<FS_EXPORT>-STRUCTURE).
    ASSIGN DYN_WA_OUS->* TO <DYN_WA_OUS>.
    LS_PTAB-NAME = <FS_EXPORT>-PARAMETER.
    LS_PTAB-KIND = ABAP_FUNC_IMPORTING.
    GET REFERENCE OF <DYN_WA_OUS> INTO LS_PTAB-VALUE.
    INSERT LS_PTAB INTO TABLE LT_PTAB.
    CLEAR:LS_PTAB.
  ENDIF.
  "FILL Exceptions
  CLEAR: LT_ETAB[].
  PERFORM FRM_FILL_EXCP_TAB USING: \'DATA_NOT_FOUND\' \'1\' CHANGING LT_ETAB.
  PERFORM FRM_FILL_EXCP_TAB USING: \'OTHERS\' \'2\' CHANGING LT_ETAB.
  CALL FUNCTION LV_FUNCNAME
    PARAMETER-TABLE
    LT_PTAB
    EXCEPTION-TABLE
    LT_ETAB.
  IF SY-SUBRC NE 0.
    ES_OUTPUT-MESSAGE-MSGTX = \'E\'.
    CALL FUNCTION \'MESSAGE_TEXT_BUILD\'
      EXPORTING
        MSGID               = SY-MSGID
        MSGNR               = SY-MSGNO
        MSGV1               = SY-MSGV1
        MSGV2               = SY-MSGV1
        MSGV3               = SY-MSGV1
        MSGV4               = SY-MSGV1
      IMPORTING
        MESSAGE_TEXT_OUTPUT = ES_OUTPUT-MESSAGE-MSGTY.
  ENDIF.
  IF ES_OUTPUT-MESSAGE-MSGTX = \'E\'.
    EXIT.
  ENDIF.
  call function \'ZFM_EHR_ABAP_TO_JSON\'
    EXPORTING
      IV_DATA = <DYN_WA_OUS>
    IMPORTING
      EV_JSON = LV_STRING.
  ES_OUTPUT-OUTPUT = LV_STRING.
  CLEAR: LV_DATE_END, LV_TIME_END.
  LV_DATE_END = SY-DATUM.
  LV_TIME_END = SY-UZEIT.
  CLEAR: LV_DAYS, LV_TIMES.
  CALL FUNCTION \'SCOV_TIME_DIFF\'
    EXPORTING
      IM_DATE1              = LV_DATE_START
      IM_DATE2              = LV_DATE_END
      IM_TIME1              = LV_TIME_START
      IM_TIME2              = LV_TIME_END
    IMPORTING
      EX_DAYS               = LV_DAYS
      EX_TIME               = LV_TIMES
    EXCEPTIONS
      START_LARGER_THAN_END = 1
      OTHERS                = 2.
  IF SY-SUBRC = 0.

* Implement suitable error handling here

    LV_TSPAN = LV_DAYS * 24 * 60 * 60 + LV_TIMES+0(2) * 60 * 60 + LV_TIMES+2(2) * 60 + LV_TIMES+4(2).
  ENDIF.
  CLEAR:LV_STRCRQ,LV_STRCRS.
  LV_STRCRQ = <FS_IMPORT>-STRUCTURE.
  LV_STRCRS = <FS_EXPORT>-STRUCTURE.
  call function \'ZINTFLOG_SAVE\'
    EXPORTING
      IV_SYSNM    = IS_INPUT-IS_SAPSYS-SYSNM
      IV_INTNR    = IS_INPUT-IS_SAPSYS-INTNR
      IV_FUNCN    = LV_FUNCNAME
      IV_STRCRQ   = LV_STRCRQ
      IV_STRCRS   = LV_STRCRS
      IV_TYPE     = ES_OUTPUT-MESSAGE-MSGTX
      IV_MESSAGE  = ES_OUTPUT-MESSAGE-MSGTY
      IV_TSPAN    = LV_TSPAN
    CHANGING
      CS_REQUEST  = <DYN_WA_INS>
      CS_RESPONSE = <DYN_WA_OUS>.
ENDFUNCTION.

以上是关于ABAP 搭建中台技术第一步 rfc+json组合能够通用所有接口的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建AI数据中台?

请各位高手帮忙,ABAP 中除RFC外还都有哪些接口技术?主要用途?

ABAP重点各种接口技术

ABAP术语-RFC (Remote Function Call)

sap restful json接口动态调用RFC,生成动态结构

sap restful json接口动态调用RFC,生成动态结构