接口日志功能

12 篇文章 0 订阅
10 篇文章 0 订阅

外围系统通过rfc调用sap,sap http 调用外围系统,无标准日志,简单搭建日志平台

输入输出参数 json 格式存储,可查询重处理,且接口配置启用/账号等相关数据,

原框架被系统有,但是不完善,添加查询和重处理功能,改改就用了,原代码就不细究了,满足需求就好

数据表

ZIF_001-接口配置表

ZIF_LOG-接口日志表

接口调用

CONSTANTS:gc_i TYPE zietype    VALUE 'I',
          gc_o TYPE zietype    VALUE 'O',
          gc_w TYPE zietype    VALUE 'W',
          gc_e TYPE zietype    VALUE 'E',
          gc_s TYPE zietype    VALUE 'S'.

DATA: gv_sysid    TYPE ze_sysid01,
      gv_id       TYPE ze_zid01,
      gv_zname    TYPE rs38l_fnam,
      gv_guid     TYPE sysuuid_c,
      gv_active   TYPE c,
      gv_msg      TYPE string,
      gv_type     TYPE c,
      gv_json_in  TYPE string,
      gv_json_out TYPE string.

*&---------------------------------------------------------------------*
*& Form FRM_INIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_init  USING  VALUE(p_funcn).

  CLEAR:gv_sysid,gv_id,gv_zname,gv_guid,gv_active,
        gv_type,gv_matnr,gv_msg,
        gv_json_in,gv_json_out.

  gv_guid  = zcl_common=>get_guid( ).
  gv_sysid = p_funcn+4(3).
  gv_id    = p_funcn+4(7).
  gv_zname = p_funcn.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ACTIVE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_active USING pv_if_type.

  CLEAR gs_zif_001.

  SELECT SINGLE *
    FROM zif_001
    INTO gs_zif_001
   WHERE zsysid EQ gv_sysid
     AND id     EQ gv_id
     AND active EQ abap_on.

  IF gs_zif_001 IS NOT INITIAL.

    IF pv_if_type EQ gc_i.

      gv_active = abap_true.

    ELSEIF pv_if_type EQ gc_o.

      IF gs_zif_001-url IS NOT INITIAL.

        gv_active = abap_true.

      ELSE.

        CLEAR:gv_active.

      ENDIF.

    ENDIF.

  ELSE.

    CLEAR:gv_active.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_LOG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_log USING lv_if_type.

  MODIFY zif_log FROM @( VALUE #( zguid     = gv_guid   "操作唯一性标识
                                  zsysid    = gv_sysid  "外围系统
                                  zid       = gv_id     "接口业务ID
                                  zname     = gv_zname  "函数名称
                                  zietype   = lv_if_type"接口传输类型(I传入SAP,O传出到外部系统)
                                  zerdat    = sy-datum
                                  zerzet    = sy-uzeit
                                  zernam    = sy-uname
                                  type      = COND #( WHEN gv_type IS NOT INITIAL THEN gv_type ELSE gc_s )
                                  json_in   = gv_json_in
                                  json_out  = gv_json_out ) ).

  IF sy-subrc EQ 0.
    COMMIT WORK AND WAIT.
  ENDIF.

  DATA(lv_datum) = sy-datum - 120.
  DELETE FROM zif_log WHERE zerdat LE lv_datum.

ENDFORM.

 涉及公共方法

zcl_common=>abap_to_json

ABAP	TYPE ANY	输入abap数据
PRETTY_NAME	TYPE CHAR1 OPTIONAL	j输出json格式
value( JSON )	TYPE STRING	输出json数据

  METHOD abap_to_json.

    TRY.
        json = /ui2/cl_json=>serialize( data = abap pretty_name = pretty_name ).

      CATCH cx_root INTO DATA(lr_root).
        DATA(l_str) = lr_root->get_text( ).
        MESSAGE l_str TYPE 'S'.
    ENDTRY.

  ENDMETHOD.

zcl_common=>abap_to_json

ABAP	TYPE ANY	输入abap数据
PRETTY_NAME	TYPE CHAR1 OPTIONAL	j输出json格式
value( JSON )	TYPE STRING	输出json数据

  METHOD abap_to_json.

    TRY.
        json = /ui2/cl_json=>serialize( data = abap pretty_name = pretty_name ).

      CATCH cx_root INTO DATA(lr_root).
        DATA(l_str) = lr_root->get_text( ).
        MESSAGE l_str TYPE 'S'.
    ENDTRY.

  ENDMETHOD.
    

zcl_common=>get_guid

  METHOD get_guid.

    TRY.
        rv_guid = cl_system_uuid=>create_uuid_c32_static( ).
      CATCH cx_uuid_error.
        rv_guid = cl_fdt_uuid=>get_uuid( ).
    ENDTRY.

  ENDMETHOD.

报表功能

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
REPORT zifr001.

TYPE-POOLS:icon.
TABLES sscrfields.
DATA: BEGIN OF gw_out.
    INCLUDE TYPE zif_log.
DATA: icon TYPE char4,
      text TYPE c LENGTH 60,
      END OF gw_out.

DATA: gt_out LIKE TABLE OF gw_out.

DATA: gw_layo TYPE lvc_s_layo.
DATA: gw_fcat TYPE lvc_s_fcat,
      gt_fcat TYPE lvc_t_fcat.

DATA cl_document TYPE REF TO cl_dd_document.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
  s_guid  FOR gw_out-zguid,
  s_sysid FOR gw_out-zsysid,
  s_zid   FOR gw_out-zid,
  s_zname FOR gw_out-zname,
  s_type  FOR gw_out-zietype,
  s_erdat FOR gw_out-zerdat DEFAULT sy-datum,
  s_erzet FOR gw_out-zerzet,
  s_ernam FOR gw_out-zernam.
PARAMETERS :p_txt01 TYPE char255,
            p_txt02 TYPE char255.

SELECTION-SCREEN SKIP.

PARAMETERS: cb_cg AS CHECKBOX USER-COMMAND cg DEFAULT 'X'.
PARAMETERS: cb_sb AS CHECKBOX USER-COMMAND sb DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN FUNCTION KEY 1.

INITIALIZATION.
  sscrfields-functxt_01+40(4) = icon_release.
  sscrfields-functxt_01+44(40) = '维护接口配置'.

AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      CALL METHOD zcl_common=>call_view
        EXPORTING
          view_name = 'ZIF_001'.
    WHEN OTHERS.
  ENDCASE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_sysid-low.
  PERFORM frm_set_f4_sysid.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_zname-low.
  PERFORM frm_set_f4_zname.

START-OF-SELECTION.
  PERFORM frm_get_data.
  PERFORM frm_display_alv.
































*&---------------------------------------------------------------------*
*& Form frm_set_f4_sysid
*&---------------------------------------------------------------------*
*& 设置外围系统搜索帮助
*&---------------------------------------------------------------------*
FORM frm_set_f4_sysid .
  SELECT zsysid FROM zif_001 INTO TABLE @DATA(lt_zif_001).
  SORT lt_zif_001 BY zsysid.
  DELETE ADJACENT DUPLICATES FROM lt_zif_001 COMPARING zsysid.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield     = 'ZSYSID' "搜索帮助内表要输出的的帮助字段名,注:要大写
      dynpprog     = sy-cprog
      dynpnr       = sy-dynnr
      dynprofield  = 'S_SYSID-LOW' "命中清单(values_tab)中的哪列(ZZBAXH)的值回填到屏幕字段ZTMM0045-ZZBAXH中
      window_title = '外围系统'
      value_org    = 'S' "这里一定要是 S,否则没有值
    TABLES
      value_tab    = lt_zif_001.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_f4_zname
*&---------------------------------------------------------------------*
*& 设置功能模块搜索帮助
*&---------------------------------------------------------------------*
FORM frm_set_f4_zname .
  SELECT zfunc,zname FROM zif_001 INTO TABLE @DATA(lt_zif_001).
  SORT lt_zif_001 BY zfunc.
  DELETE ADJACENT DUPLICATES FROM lt_zif_001 COMPARING zfunc.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield     = 'ZFUNC' "搜索帮助内表要输出的的帮助字段名,注:要大写
      dynpprog     = sy-cprog
      dynpnr       = sy-dynnr
      dynprofield  = 'S_ZNAME-LOW' "命中清单(values_tab)中的哪列(ZZBAXH)的值回填到屏幕字段ZTMM0045-ZZBAXH中
      window_title = '外围系统'
      value_org    = 'S' "这里一定要是 S,否则没有值
    TABLES
      value_tab    = lt_zif_001.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data.

  CLEAR:gt_out.
  IF cb_cg IS NOT INITIAL AND cb_sb IS NOT INITIAL.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE gt_out
      FROM zif_log
     WHERE zguid     IN s_guid
       AND zsysid    IN s_sysid
       AND zid       IN s_zid
       AND zname     IN s_zname
       AND zietype   IN s_type
       AND zerdat    IN s_erdat
       AND zerzet    IN s_erzet
       AND zernam    IN s_ernam.
    .

  ELSEIF cb_cg IS NOT INITIAL.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE gt_out
      FROM zif_log
     WHERE zguid     IN s_guid
       AND zsysid    IN s_sysid
       AND zid       IN s_zid
       AND zname     IN s_zname
       AND zietype   IN s_type
       AND zerdat    IN s_erdat
       AND zerzet    IN s_erzet
       AND zernam    IN s_ernam
       AND type      EQ 'S'.

  ELSEIF cb_sb IS NOT INITIAL.
    SELECT *
      INTO CORRESPONDING FIELDS OF TABLE gt_out
      FROM zif_log
     WHERE zguid     IN s_guid
       AND zsysid    IN s_sysid
       AND zid       IN s_zid
       AND zname     IN s_zname
       AND zietype   IN s_type
       AND zerdat    IN s_erdat
       AND zerzet    IN s_erzet
       AND zernam    IN s_ernam
       AND type      IN ( 'E' , '' ).

  ENDIF.

  LOOP AT gt_out INTO gw_out.
    DATA(lv_tabix) = sy-tabix.

    IF p_txt01 IS NOT INITIAL.
      SEARCH gw_out-json_in FOR p_txt01.
      IF sy-subrc NE 0 .
        DELETE gt_out INDEX lv_tabix.
        CONTINUE.
      ENDIF.
    ENDIF.

    IF p_txt02 IS NOT INITIAL.
      SEARCH gw_out-json_out FOR p_txt02.
      IF sy-subrc NE 0 .
        DELETE gt_out INDEX lv_tabix.
        CONTINUE.
      ENDIF.
    ENDIF.

    SELECT SINGLE stext FROM tftit
      INTO gw_out-text
     WHERE funcname EQ gw_out-zname.

    IF gw_out-type = 'S'.
      gw_out-icon = icon_led_green.
    ELSEIF gw_out-type = 'W'.
      gw_out-icon = icon_led_yellow.
    ELSE.
      gw_out-icon = icon_led_red.
    ENDIF.
    MODIFY gt_out FROM gw_out.
  ENDLOOP.

  SORT gt_out BY zerdat DESCENDING zerzet DESCENDING.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .
  CLEAR gw_layo.
  gw_layo-zebra = 'X'.
*  GW_LAYO-cwidth_opt = 'X'.
  gw_layo-sel_mode = 'A'.

  PERFORM frm_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program          = sy-repid
      i_callback_pf_status_set    = 'FRM_PF_STATUS'
      i_callback_user_command     = 'FRM_USER_COMMAND'
      i_callback_html_top_of_page = 'FRM_HTML_TOP_OF_PAGE'
      is_layout_lvc               = gw_layo
      it_fieldcat_lvc             = gt_fcat
      i_default                   = 'X'
      i_save                      = 'X'
    TABLES
      t_outtab                    = gt_out
    EXCEPTIONS
      program_error               = 1
      OTHERS                      = 2.
ENDFORM.
**&---------------------------------------------------------------------*
**&      FORM  FRM_CALLBACK_PF_STATUS_SET
**&---------------------------------------------------------------------*
**       TEXT
**----------------------------------------------------------------------*
FORM frm_pf_status USING rt_extab TYPE slis_t_extab .

  "IF sy-tcode NE 'SE38'.
  "  rt_extab = VALUE #( ( fcode = 'RESEND' ) ) .
  "ENDIF.
  SET PF-STATUS 'STATUS_ALV' EXCLUDING rt_extab.

ENDFORM.                    "PF_STATUS_ALV
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_fieldcat .
  DEFINE fieldcat.
    CLEAR gw_fcat.
    gw_fcat-coltext = &1.
    gw_fcat-fieldname = &2.
    gw_fcat-ref_field = &3.
    gw_fcat-ref_table = &4.

    CASE &2.
      WHEN 'ICON'.
      gw_fcat-icon = 'X'.
      gw_fcat-fix_column = 'X'.
      WHEN 'ZNAME'.
      gw_fcat-outputlen = '15'.
      WHEN 'TEXT'.
      gw_fcat-outputlen = '15'.
      WHEN 'TEXT'.
      gw_fcat-outputlen = '40'.
      WHEN 'JSON_IN' OR 'JSON_OUT'.
      gw_fcat-outputlen = '60'.
      WHEN OTHERS.
    ENDCASE.
    APPEND gw_fcat TO gt_fcat.
  END-OF-DEFINITION.

  CLEAR gt_fcat[].
  fieldcat  '处理结果'       'ICON'      ''  ''.
  fieldcat  '操作唯一性ID'   'ZGUID'   ''  ''.
  fieldcat  '外围系统'       'ZSYSID'    'ERDAT'     'ZIF_LOG'.
  fieldcat  '接口业务ID'     'ZID'       'ERTIM'     'ZIF_LOG'.
  fieldcat  '功能模块的名称' 'ZNAME'     'ZNAME'     'ZIF_LOG'.
  fieldcat  '功能描述'       'TEXT'      ''          ''.
  fieldcat  '接口传输类型'   'ZIETYPE'   'ZIETYPE'   'ZIF_LOG'.
  fieldcat  '操作日期'       'ZERDAT'    'ZERDAT'    'ZIF_LOG'.
  fieldcat  '操作时间'       'ZERZET'    'ZERZET'    'ZIF_LOG'.
  fieldcat  '操作人'         'ZERNAM'    'ZERNAM'    'ZIF_LOG'.
  fieldcat  '操作结果'       'TYPE'      'TYPE'      'ZIF_LOG'.
  fieldcat  '传入参数'       'JSON_IN'   ''  ''.
  fieldcat  '传出参数'       'JSON_OUT'  ''  ''.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM frm_user_command  USING r_ucomm LIKE sy-ucomm
                                   rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
    WHEN '&IC1'.
      IF rs_selfield-fieldname = 'JSON_IN'.
        READ TABLE gt_out INTO gw_out INDEX rs_selfield-tabindex.
        IF sy-subrc = 0.
          PERFORM frm_display_xml USING gw_out-json_in
                                        gw_out-zguid.
        ENDIF.

      ELSEIF rs_selfield-fieldname = 'JSON_OUT'.
        READ TABLE gt_out INTO gw_out INDEX rs_selfield-tabindex.
        IF sy-subrc = 0.
          PERFORM frm_display_xml USING gw_out-json_out
                                        gw_out-zguid.
        ENDIF.
      ENDIF.
    WHEN 'RESEND'.
      PERFORM frm_resend USING rs_selfield-tabindex.
    WHEN 'REFRESH'.
      PERFORM frm_get_data.
      PERFORM frm_html_top_of_page USING cl_document.
      rs_selfield-refresh = 'X'.
      rs_selfield-col_stable = 'X'.
      rs_selfield-row_stable = 'X'.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_HTML_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_html_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.
  DATA: html TYPE string,
        m_p  TYPE i.
  DATA: lt_data LIKE TABLE OF gw_out.
  DATA: l_line   TYPE i,
        l_line_s TYPE i,
        l_line_e TYPE i.

  DATA: g_text TYPE sdydo_text_element.

  CALL METHOD p_cl_dd->initialize_document.
  SEARCH p_cl_dd->html_table FOR p_cl_dd->cursor.
  IF sy-subrc = 0.
    html = '<html><h3>接口日志表</h3>'.

    p_cl_dd->html_insert(
      EXPORTING
        contents = html
      CHANGING
        position = m_p
    ).

    lt_data[] = gt_out[].
    DELETE lt_data WHERE type <> 'S'.
    DESCRIBE TABLE lt_data LINES l_line_s.

    lt_data[] = gt_out[].
    DELETE lt_data WHERE type = 'S'.
    DESCRIBE TABLE lt_data LINES l_line_e.

    l_line = l_line_s + l_line_e.

    html = '<L1>成功:' && l_line_s && '</L1>' &&
           '<L1>,</L1>' &&
           '<L1>失败:<font color=red>' && l_line_e && '</font></L1>' &&
*         '</br><L1>失败:<font color=red>' && l_line_e && '</font></L1>' &&
           '</br><L1>总条目:' && l_line && '</L1></html>'.

    p_cl_dd->html_insert(
      EXPORTING
        contents = html
      CHANGING
        position = m_p
    ).

  ENDIF.

  CHECK cl_document IS INITIAL.
  cl_document = p_cl_dd.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_XML
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_xml USING xml_out TYPE string
                           l_sysid TYPE ze_guid.
  DATA: l_xml  TYPE REF TO cl_xml_document.

  CREATE OBJECT l_xml.

  DATA(retcode) = l_xml->parse_string(
      EXPORTING
        stream = xml_out ). "xml_out is the variable which is holding the xml string

  IF retcode = 0.
    CALL METHOD l_xml->display.
  ELSE.
    PERFORM frm_json_display USING xml_out
                                   l_sysid.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_JSON_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_json_display USING xml_string TYPE string
                            l_sysid    TYPE ze_guid.
  DATA: cl_out   TYPE REF TO if_demo_output,
        lv_subrc TYPE c.

  DATA(out) = cl_demo_output=>new( ).

  DATA(writer) = CAST if_sxml_writer(
         cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ).

  PERFORM frm_check_json USING xml_string CHANGING lv_subrc.

  IF lv_subrc = 'E'.
    out->next_section( 'Exception: Json 格式存在错误,请检查' ).
    out->write( xml_string ).
    out->display( ).
  ELSE.

    TRY.
        DATA(json) = xml_string.
*            CAST cl_sxml_string_writer( writer )->get_output( ).
        out->next_section( 'JSON-Data' ).
        IF writer->if_sxml~type = if_sxml=>co_xt_json.
          out->write_json( json ).
        ELSEIF writer->if_sxml~type = if_sxml=>co_xt_xml10.
          out->write_xml( json ).
        ENDIF.

      CATCH cx_sxml_error INTO DATA(exc).
*      out->write( exc->get_text( ) ).
        out->write( json ).
    ENDTRY.

    out->display( ).
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_JSON
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> XML_STRING
*&      <-- LV_SUBRC
*&---------------------------------------------------------------------*
FORM frm_check_json  USING    xml_string
                     CHANGING lv_subrc.
  DATA lv_json TYPE string.
  DATA lv_xjson TYPE xstring.

  IF xml_string IS NOT INITIAL.
    lv_xjson = cl_abap_codepage=>convert_to( xml_string ).
  ENDIF.


  TRY.
      DATA(reader) = cl_sxml_string_reader=>create( lv_xjson ).
      DATA(writer) = CAST if_sxml_writer(
                            cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ) ).
      writer->set_option( option = if_sxml_writer=>co_opt_linebreaks ).
      writer->set_option( option = if_sxml_writer=>co_opt_indent ).
      reader->next_node( ).
      reader->skip_node( writer ).
      lv_json = cl_abap_codepage=>convert_from( CAST cl_sxml_string_writer( writer )->get_output( ) ).
    CATCH cx_sxml_parse_error.
      lv_subrc = 'E'.
  ENDTRY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_RESEND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_resend USING pv_tabix TYPE sy-tabix.

  DATA: dyn_data_01 TYPE REF TO data,
        dyn_data_02 TYPE REF TO data.

  FIELD-SYMBOLS: <fs_data_01> TYPE any,
                 <fs_data_02> TYPE any.

  READ TABLE gt_out INTO gw_out INDEX pv_tabix.
  CHECK sy-subrc = 0.

  SELECT *
    FROM fupararef
    INTO TABLE @DATA(lt_fupararef)
   WHERE funcname  EQ @gw_out-zname
     AND parameter IN ( 'INPUT','OUTPUT' ).

  CHECK sy-subrc EQ 0.

  "INPUT
  READ TABLE lt_fupararef INTO DATA(ls_fupararef_01) WITH KEY parameter = 'INPUT'.
  IF sy-subrc EQ 0.

    CREATE DATA dyn_data_01 TYPE (ls_fupararef_01-structure).

    ASSIGN dyn_data_01->* TO FIELD-SYMBOL(<fs_input>).

  ENDIF.

  READ TABLE lt_fupararef INTO DATA(ls_fupararef_02) WITH KEY parameter = 'OUTPUT'.
  IF sy-subrc EQ 0.

    CREATE DATA dyn_data_02 TYPE (ls_fupararef_02-structure).

    ASSIGN dyn_data_02->* TO FIELD-SYMBOL(<fs_output>).

  ENDIF.

  CHECK <fs_input> IS ASSIGNED AND <fs_output> IS ASSIGNED.

  zcl_common=>json_to_abap(  EXPORTING json = gw_out-json_in  pretty_name = COND #( WHEN gw_out-zname EQ 'ZFM_EC_001' or gw_out-zname EQ 'ZFM_MES_101'  THEN abap_true ELSE SPACE ) CHANGING abap = <fs_input> ).

  CALL FUNCTION gw_out-zname
    EXPORTING
      input  = <fs_input>
    IMPORTING
      output = <fs_output>.

ENDFORM.

公共类

zcl_common=>json_to_abap

value( JSON )	TYPE STRING	传入json
value( PRETTY_NAME )	TYPE C OPTIONAL	
value( ABAP )	TYPE ANY	传出abap

  METHOD json_to_abap.

    TRY.
        /ui2/cl_json=>deserialize( EXPORTING json = json pretty_name = pretty_name CHANGING data = abap )."

      CATCH cx_root INTO DATA(lr_root).

        DATA(l_str) = lr_root->get_text( ).
        MESSAGE l_str TYPE 'S'.

    ENDTRY.

  ENDMETHOD.

zcl_common=>call_view

value( VIEW_NAME )	TYPE DD02V-TABNAME	表名
value( POPUP )	TYPE CHAR1 OPTIONAL	单字符标记
value( ACTION )	TYPE CHAR1  DEFAULT 'S'	单字符标记
VARIANT	TYPE TVIMV-VARIANT OPTIONAL	扩展的表维护:一个选择变体的名称
value( IT_SELLIST )	TYPE SCPRVIMSELLIST OPTIONAL	Table Type VIMSELLIST
ERROR		

METHOD call_view.

    CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
      EXPORTING
        action                       = action
        show_selection_popup         = popup
        view_name                    = view_name
        variant_for_selection        = variant
      TABLES
        dba_sellist                  = it_sellist
      EXCEPTIONS
        client_reference             = 1
        foreign_lock                 = 2
        invalid_action               = 3
        no_clientindependent_auth    = 4
        no_database_function         = 5
        no_editor_function           = 6
        no_show_auth                 = 7
        no_tvdir_entry               = 8
        no_upd_auth                  = 9
        only_show_allowed            = 10
        system_failure               = 11
        unknown_field_in_dba_sellist = 12
        view_not_found               = 13
        maintenance_prohibited       = 14
        OTHERS                       = 15.
    IF sy-subrc <> 0.
      RAISE error.
    ENDIF.

  ENDMETHOD.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值