ABAP JSON转HTML显示的demo程序

由于接口传入的数据是json,在系统中查看起来有点不方便,因此做了一个日志表,将传入和传出参数存起来,然后通过alv展示日志数据。在日志显示程序中做了json转化为html格式然后显示的功能,因此记录下来,方便以后查看。

***********************************************************************
*& Report         :         
* Application     :                                                  *
* Subject         : 接口日志表                                         *
* Requested by    :                                                   *
* Author          :                                                   *
* Req Date        :                                                   *
***********************************************************************
*          接口日志表                                                  *
***********************************************************************
* MODIFICATIONS (latest entry at the top)                             *
* ------------------------------------------------------------------- *
* REL  DATE    NAME (COMPANY)   DESCRIPTION               TASK-NO     *
* ---  ----    ---- ---------     -----------             -------     *
***********************************************************************
REPORT ZYSDR038.

DATA: GT_TAB TYPE TABLE OF ZTSDY013,
      GS_TAB TYPE ZTSDY013.

DATA: GS_FIELDCAT         TYPE LVC_S_FCAT,             "定义ALV输出列:列头描述,列对应的内表字段及类型等
      GT_FIELDCAT         TYPE LVC_T_FCAT,
      GS_LAYOUT           TYPE LVC_S_LAYO.             "定义ALV布局参数


SELECTION-SCREEN BEGIN OF BLOCK BO1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_ZCODE FOR GS_TAB-ZCODE OBLIGATORY NO-EXTENSION NO INTERVALS,
                S_ERDAT FOR GS_TAB-ERDAT,
                S_ERZET FOR GS_TAB-ERZET.
SELECTION-SCREEN END OF BLOCK BO1.

INITIALIZATION.

AT SELECTION-SCREEN.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ZCODE-LOW.
  PERFORM FRM_F4_ZCODE.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_ZCODE-HIGH.
  PERFORM FRM_F4_ZCODE.

START-OF-SELECTION.
  PERFORM FRM_GET_DATA.

END-OF-SELECTION.
  IF GT_TAB[] IS NOT INITIAL.
    PERFORM FRM_DISPLAY.
  ELSE.
    MESSAGE '没有数据' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
  SELECT *
    FROM ZTSDY013
    INTO CORRESPONDING FIELDS OF TABLE GT_TAB
   WHERE ZCODE IN S_ZCODE
     AND ERDAT IN S_ERDAT
     AND ERZET IN S_ERZET.
ENDFORM.                    " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY .
  DATA: LV_REPID LIKE SY-REPID.
  DEFINE M_ALV_FIELDCAT.
    CLEAR: GS_FIELDCAT.
    GS_FIELDCAT-FIELDNAME     = &1.
    GS_FIELDCAT-SCRTEXT_L     = &2.


    APPEND GS_FIELDCAT TO GT_FIELDCAT.
    CLEAR GS_FIELDCAT.
  END-OF-DEFINITION.

  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-SEL_MODE   = 'D'.

  M_ALV_FIELDCAT 'TSTAMPS'  '时间戳'.
  M_ALV_FIELDCAT 'ZCODE'  '功能'.
  M_ALV_FIELDCAT 'STEXT'  '功能描述'.
  M_ALV_FIELDCAT 'ERDAT'  '记录日期'.
  M_ALV_FIELDCAT 'ERZET'  '记录时间'.
  M_ALV_FIELDCAT 'ERNAM'  '创建人'.
  M_ALV_FIELDCAT 'ZINPUT'  '传入参数'.
  M_ALV_FIELDCAT 'ZOUTPUT'  '传出参数'.

  LV_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       = LV_REPID
      I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IS_LAYOUT_LVC            = GS_LAYOUT
      IT_FIELDCAT_LVC          = GT_FIELDCAT
      I_SAVE                   = 'U'
    TABLES
      T_OUTTAB                 = GT_TAB[].
ENDFORM.                    " FRM_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  SET_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS '1000'.
ENDFORM. "SET_STATUS
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM    text
*      -->P_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING P_UCOMM     LIKE SY-UCOMM
                        P_SELFIELD TYPE SLIS_SELFIELD.

  CASE P_UCOMM.
    WHEN '&IC1'.
      CLEAR GS_TAB.
      READ TABLE GT_TAB INTO GS_TAB INDEX P_SELFIELD-TABINDEX.
      IF P_SELFIELD-FIELDNAME = 'ZINPUT'.
        PERFORM FRM_DISPLAY_STRING USING GS_TAB-ZINPUT.
      ELSE.
        PERFORM FRM_DISPLAY_STRING USING GS_TAB-ZOUTPUT.
      ENDIF.
  ENDCASE.

  P_SELFIELD-REFRESH = P_SELFIELD-COL_STABLE = P_SELFIELD-ROW_STABLE = 'X'.
ENDFORM. "SET_STATUS
*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_STRING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_TAB_ZINPUT  text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_STRING  USING    VALUE(P_STR).



  DATA:LV_JSON     TYPE STRING,
       LV_CONVERT  TYPE STRING,
       LO_ERR      TYPE REF TO CX_XSLT_RUNTIME_ERROR,
       LO_JSON_SER TYPE REF TO CL_TREX_JSON_SERIALIZER,
       LV_ERR_TEXT TYPE STRING.
  DATA: LV_HTML TYPE XSTRING.
  LV_JSON = P_STR.
  TRY.
*   将JSON转换为HTML
      CALL TRANSFORMATION SJSON2HTML SOURCE XML LV_JSON
                                     RESULT XML LV_HTML.
    CATCH CX_XSLT_RUNTIME_ERROR INTO 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.                    " FRM_DISPLAY_STRING
*&---------------------------------------------------------------------*
*&      Form  FRM_F4_ZCODE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_F4_ZCODE .
  DATA: BEGIN OF LT_ITAB OCCURS 0,
        ZCODE TYPE ZTSDY013-ZCODE,
        STEXT TYPE ZTSDY013-STEXT,
    END OF LT_ITAB.
  DATA: LT_RETURN_TAB TYPE TABLE OF DDSHRETVAL.
  REFRESH LT_ITAB.
  LT_ITAB-ZCODE = 'ZY_SD_COLLECTION_INFO'.
  LT_ITAB-STEXT = 'xxxxxx'.
  APPEND LT_ITAB.

  LT_ITAB-ZCODE = 'ZY_SD_SALES_COLLECTION_MATCH'.
  LT_ITAB-STEXT = 'xxxxxx'.
  APPEND LT_ITAB.

  LT_ITAB-ZCODE = 'ZY_SD_SALES_COLLECTION_MATCH_B'.
  LT_ITAB-STEXT = 'xxxxxx'.
  APPEND LT_ITAB.



  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD         = 'ZCODE'
      DYNPPROG         = SY-REPID
      DYNPNR           = SY-DYNNR
      DYNPROFIELD      = 'S_ZCODE'
      VALUE_ORG        = 'S'
      CALLBACK_PROGRAM = SY-REPID
*     CALLBACK_FORM    = 'CB_FORM'
    TABLES
      VALUE_TAB        = LT_ITAB
      RETURN_TAB       = LT_RETURN_TAB
    EXCEPTIONS
      PARAMETER_ERROR  = 1
      NO_VALUES_FOUND  = 2
      OTHERS           = 3.

ENDFORM.                    " FRM_F4_ZCODE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值