双击ALV的字段,显示json数据

这是一个使用SAP ABAP编程语言实现的ALV报表展示和用户交互的示例。代码中定义了ALV字段分类、布局,并通过选择屏幕接收用户输入,筛选指定条件的日志数据进行展示。同时,处理了双击事件,将选定数据的JSON内容转换为HTML并显示。
摘要由CSDN通过智能技术生成

*&---------------------------------------------------------------------*
*& Report 
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YTEST.
TABLES:sscrfields.

*&---------------------------------------------------------------------*
*&DEFINE ALV
*&---------------------------------------------------------------------*
DATA: gv_repid        TYPE sy-repid,
      gs_layout       TYPE lvc_s_layo,
      gs_repid        TYPE sy-repid,
      gt_alv_filedcat TYPE lvc_t_fcat,
      gs_alv_filed    LIKE lvc_s_fcat.
DATA:lv_guid TYPE zt_data-guid.
DATA:lv_suser TYPE zt_data-suser.
************************************************************************
*    选择屏幕用
************************************************************************
************************************************************************
*    PARAMETERS/SELECT-OPTIONS(设置屏幕).
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS:s_keyid   FOR lv_guid.     "GUID编号
  SELECT-OPTIONS:s_suser   FOR lv_suser.     "登录人员编号
  SELECT-OPTIONS:s_aedat   FOR sy-datum DEFAULT sy-datum.     "操作日期
SELECTION-SCREEN END OF BLOCK  bl1.

************************************************************************
*    START-OF-SELECTION.
************************************************************************
START-OF-SELECTION.

* 获取日志数据
  SELECT *
    INTO TABLE @DATA(gt_data)
    FROM zt_data
   WHERE guid   IN @s_keyid
     AND suser  IN @s_suser
     AND begda  IN @s_aedat.

    PERFORM frm_show.

FORM frm_show .
  PERFORM frm_set_fieldcat.
  PERFORM frm_set_layout.
  PERFORM frm_show_alv.
ENDFORM.
FORM frm_set_fieldcat .
  CLEAR:gt_alv_filedcat.
  PERFORM frm_fill_fieldcat USING 'GUID'       TEXT-001  '' '' '' '' ''.
  PERFORM frm_fill_fieldcat USING 'ZTYPE'            TEXT-002  '' '' '' '' ''.
  PERFORM frm_fill_fieldcat USING 'OBJID'    TEXT-003  '' '' '' '' ''.
  PERFORM frm_fill_fieldcat USING 'STEXT'     TEXT-004  '' '' '' '' ''.
  PERFORM frm_fill_fieldcat USING 'BEGDA'   TEXT-005  '' '' '' '' ''.
  PERFORM frm_fill_fieldcat USING 'SUSER' TEXT-007  '' '' '' '' ''.
  PERFORM frm_fill_fieldcat USING 'DATA'    TEXT-008  '' '' '' '10' ''.
  PERFORM frm_fill_fieldcat USING 'DATA1'     TEXT-009  '' '' '' '10' ''.
  PERFORM frm_fill_fieldcat USING 'DATA2'            TEXT-010  '' '' '' '10' ''.
  PERFORM frm_fill_fieldcat USING 'MSG'         TEXT-011  '' '' '' '10' ''.
ENDFORM.
FORM frm_set_layout .
  gs_repid = sy-repid.
  gs_layout-zebra = 'X'.
*  gs_layout-cwidth_opt = 'X'.
*  GS_LAYOUT-BOX_FNAME = 'SLBOX'.

ENDFORM.
FORM frm_show_alv .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = gs_repid
      i_save                   = 'A'
      it_fieldcat_lvc          = gt_alv_filedcat[]
      i_grid_title             = CONV lvc_title( |#总条目数:{ lines( gt_data[] ) }| )
*     it_sort_lvc              = gs_sortinfo[]
*     i_grid_settings          = gs_glay
      is_layout_lvc            = gs_layout
*     it_events                = gs_event
      i_callback_pf_status_set = 'PF_STATUS'
      i_callback_user_command  = 'USER_COMMAND'
    TABLES
      t_outtab                 = gt_data[]
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.
FORM frm_fill_fieldcat  USING    p_fieldname
                                 p_coltext
                                 p_key
                                 p_ref_table
                                 p_ref_field
                                 p_outputlen
                                 p_no_zero.

  DATA:ls_alv_filed LIKE gs_alv_filed.

  ls_alv_filed-fieldname     =  p_fieldname.
  ls_alv_filed-coltext       =  p_coltext.
  ls_alv_filed-outputlen     =  p_outputlen.
  ls_alv_filed-no_zero       =  p_no_zero.
  ls_alv_filed-key           =  p_key.
  ls_alv_filed-ref_table     =  p_ref_table.
  ls_alv_filed-ref_field     =  p_ref_field.
  APPEND ls_alv_filed TO gt_alv_filedcat.
ENDFORM.
FORM pf_status USING rt_extab TYPE slis_t_extab.

*  DATA fcode TYPE rsmpe-func.

  SET PF-STATUS 'S0100_1' EXCLUDING rt_extab.

ENDFORM.
FORM user_command  USING r_ucomm TYPE sy-ucomm
                          rs_selfield TYPE slis_selfield.
  DATA
    :lv_json     TYPE string,
    lv_convert  TYPE string,
    lo_json_ser TYPE REF TO cl_trex_json_serializer,
    lv_err_text TYPE string,
    ls_msg      TYPE  lvc_s_msg1,
    ls_lmess    TYPE  lmess,
    lt_mess     TYPE  STANDARD TABLE OF lmess.
  DATA:lr_grid    TYPE REF TO cl_gui_alv_grid.
*  DATA:lv_tabix          TYPE sy-tabix,
*       lv_indicator_text TYPE string.
* 将界面中的选择数据更新到内表中
*=====GET_GLOBALS_FROM_SLVC_FULLSCR  START==========
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lr_grid.
  CALL METHOD lr_grid->check_changed_data.
*=====GET_GLOBALS_FROM_SLVC_FULLSCR  END============
  CASE r_ucomm.
    WHEN '&IC1'. "ALV双击事件
      READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX rs_selfield-tabindex.
      IF sy-subrc EQ 0.
        CASE rs_selfield-fieldname.
          WHEN 'DATA'.
            lv_json = <fs_data>-data.
          WHEN 'DATA1'.
            lv_json = <fs_data>-data1.
          WHEN 'DATA2'.
            lv_json = <fs_data>-data2.
          WHEN 'MSG'.
            lv_json = <fs_data>-msg.
        ENDCASE.
      ENDIF.
    WHEN 'CREATE'.
*      PERFORM frm_set_indicator USING TEXT-t03.
    WHEN 'BACK'.
      CLEAR:gt_data,gt_alv_filedcat.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.

  ENDCASE.
*  RS_SELFIELD-ROW_STABLE = 'X'.
*  RS_SELFIELD-COL_STABLE = 'X'.
  rs_selfield-refresh = 'X'.
  TRY.
*     将JSON转换为HTML
      CALL TRANSFORMATION sjson2html SOURCE XML lv_json
                                     RESULT XML DATA(lv_html).
    CATCH cx_xslt_runtime_error INTO DATA(lo_err).
      lv_err_text = lo_err->get_text( ).
      WRITE: lv_err_text.
      RETURN.
  ENDTRY.

*   显示HTML
  lv_convert = cl_abap_codepage=>convert_from( lv_html ).
  cl_abap_browser=>show_html( html_string = lv_convert ).

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值