我先撸一个最简略的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.