Dialog程序中使用SELECT-OPTIONS,ALV报表输入条件和ALV在一个页面

一、效果展示

二、dialog画屏

三、源代码

YXHRR513


REPORT YXHRR513.



INCLUDE YXHRR513_TOP.




INCLUDE YXHRR513_MAIN.




INCLUDE YXHRR513_FM01.

YXHRR513_TOP(9001子屏幕)

*&---------------------------------------------------------------------*
*& 包含               YXHRR513_TOP
*&---------------------------------------------------------------------*

TABLES:yshr_log.

DATA : wa_container        TYPE scrfname VALUE 'CONTAIN',
       alv_grid            TYPE REF TO cl_gui_alv_grid,
       wa_custom_container TYPE REF TO cl_gui_custom_container.

DATA: gt_fieldcat TYPE lvc_t_fcat,
      gs_layout   TYPE lvc_s_layo.

DATA: gt_ui_func TYPE ui_functions. "隐藏alv菜单控件

DATA: ok_code TYPE sy-ucomm, " 用于接收屏幕操作
      save_ok TYPE sy-ucomm. " 接入屏幕操作 并清空ok_code

DATA: dynn_9001(4) VALUE '9001'.


TYPES: BEGIN OF ty_alv,
         programm    TYPE programm,
         direc       TYPE ye_direc,
         sdate       TYPE ye_hrdate,
         stims       TYPE ye_hrtims,
         businessid  TYPE ye_businessid,
         remark      TYPE ye_remark,
         sjson       TYPE ye_hrxml,
         show        TYPE char5,
         field_style TYPE  lvc_t_styl,
       END OF ty_alv.

DATA: gt_alv TYPE STANDARD TABLE OF ty_alv,
      gs_alv TYPE ty_alv.



CLASS lcl_event_handler DEFINITION DEFERRED.
* 事件处理类
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
*      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
*        IMPORTING e_object e_interactive,

      handle_button_click
        FOR EVENT button_click OF cl_gui_alv_grid
        IMPORTING es_col_id es_row_no,


      handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm.

*      handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
*        IMPORTING er_data_changed,
*
*      handle_onf4_help  FOR EVENT onf4 OF cl_gui_alv_grid
*        IMPORTING e_fieldname
*                  es_row_no
*                  er_event_data.

ENDCLASS.




DATA: go_event_handler TYPE REF TO lcl_event_handler.
DATA: g_xml TYPE REF TO cl_xml_document.



"增加子程序
SELECTION-SCREEN BEGIN OF SCREEN 9001 AS SUBSCREEN.

  SELECTION-SCREEN:BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS:s_prog FOR yshr_log-programm,
    s_direc FOR yshr_log-direc,
    s_date FOR yshr_log-sdate,
    s_tims FOR yshr_log-stims,
    s_busin FOR yshr_log-businessid.
  SELECTION-SCREEN:END OF BLOCK blk1.

SELECTION-SCREEN END OF SCREEN 9001.

YXHRR513_MAIN

*&---------------------------------------------------------------------*
*& 包含               YXHRR513_MAIN
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&INITIALIZATION/选择屏幕前初始化(选择屏幕展示之前执行)
*&---------------------------------------------------------------------*
INITIALIZATION .

*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN OUTPUT/选择屏幕控制(第二屏输出)
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT .

*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN/选择屏幕执行(参数输入检查)
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN .

*&---------------------------------------------------------------------*
*& START-OF-SELECTION/开始选择屏幕(点击执行按钮之后执行的语块)
*&---------------------------------------------------------------------*
START-OF-SELECTION .
  CALL SCREEN 100.

*&---------------------------------------------------------------------*
*& END-OF-SELECTION/结束选择屏幕(程序结束处理,输出等)
*&---------------------------------------------------------------------*
END-OF-SELECTION .

YXHRR513_FM01

*&---------------------------------------------------------------------*
*& 包含               YXHRR513_FM01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '0100'.
  SET TITLEBAR '0100'.
  PERFORM init_alv.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  save_ok = ok_code.
  CLEAR:ok_code.

  CASE save_ok.
    WHEN '&F03' OR '&F15' OR '&F12'.
      LEAVE TO SCREEN 0.
    WHEN 'ZSEARCH'.
      PERFORM frm_get_data.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*& Form init_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM init_alv .

  PERFORM frm_set_layout.  "设置ALV输出格式
  PERFORM frm_set_fieldcat.  "设置ALV输出字段
  PERFORM frm_set_toolbar.   "设置alv状态栏

  IF wa_custom_container IS INITIAL .
    CREATE OBJECT wa_custom_container
      EXPORTING
        container_name = wa_container.

    CREATE OBJECT alv_grid
      EXPORTING
        i_parent = wa_custom_container.

    "实例化方法
    CREATE OBJECT go_event_handler.

    "事件注入
*    SET HANDLER event_receiverundo->handle_toolbar_prod FOR alv_grid_prod.
    SET HANDLER go_event_handler->handle_user_command FOR alv_grid.
    SET HANDLER go_event_handler->handle_button_click FOR alv_grid.

    CREATE OBJECT g_xml.
  ENDIF.

  CALL METHOD alv_grid->set_table_for_first_display
    EXPORTING
      i_structure_name     = 'GS_PROD'
      is_layout            = gs_layout
      it_toolbar_excluding = gt_ui_func
    CHANGING
      it_outtab            = gt_alv
      it_fieldcatalog      = gt_fieldcat.
  PERFORM frm_refresh_alv USING alv_grid.

ENDFORM.


*&---------------------------------------------------------------------*
*& Form frm_set_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_layout .
  gs_layout = VALUE #( zebra = abap_on
                        cwidth_opt = abap_on
                        stylefname = 'FIELD_STYLE' ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_fieldcat
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_fieldcat .

  REFRESH:gt_fieldcat.

  DEFINE set_fieldcat.
    APPEND VALUE #(
      fieldname = &1
      ref_table = &2
      ref_field = &3
      coltext = &4
      scrtext_l = &4
      scrtext_m = &4
      scrtext_s = &4
    ) TO gt_fieldcat.
  END-OF-DEFINITION.

  set_fieldcat 'PROGRAMM' 'YTHR_ORGINF' 'PROGRAMM' '程序名字'. "
  set_fieldcat 'DIREC' 'YTHR_ORGINF' 'DIREC' '数据方向'. "
  set_fieldcat 'SDATE' 'YTHR_ORGINF' 'SDATE' '接口发送日期'. "
  set_fieldcat 'STIMS' 'YTHR_ORGINF' 'STIMS' '接口发送时间'. "
  set_fieldcat 'BUSINESSID' 'YTHR_ORGINF' 'BUSINESSID' '人才激发ID'. "
  set_fieldcat 'REMARK' 'YTHR_ORGINF' 'REMARK' '备注'. "
  set_fieldcat 'SHOW' 'YTHR_ORGINF' 'TYPE' '显示数据'. "

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_set_toolbar
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_toolbar .

  DATA: ls_ui_func TYPE ui_func.

  REFRESH: gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_copy_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_cut .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_refresh .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_move_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_paste_new_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_undo .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_pc_file .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_delete_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_insert_row .
  APPEND ls_ui_func TO gt_ui_func.
  ls_ui_func = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND ls_ui_func TO gt_ui_func.

ENDFORM.


FORM frm_refresh_alv  USING pv_grid TYPE REF TO cl_gui_alv_grid.

  CALL METHOD pv_grid->check_changed_data. "检查ALV更改数据

  pv_grid->get_frontend_layout( IMPORTING es_layout = DATA(ls_layout) ).
  ls_layout-cwidth_opt = abap_on.
  pv_grid->set_frontend_layout( is_layout = ls_layout ).


  CALL METHOD cl_gui_control=>set_focus
    EXPORTING
      control = pv_grid.

  "刷新变量
  DATA: ls_stable TYPE lvc_s_stbl.

  "刷新显示
  CLEAR ls_stable.
  ls_stable-row = 'X'."基于行刷新
  ls_stable-col = 'X'."基于列刷新
  CALL METHOD pv_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable
    EXCEPTIONS
      finished  = 0.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_EXIT_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_exit_0100 INPUT.


ENDMODULE.
*&---------------------------------------------------------------------*
*& Form frm_get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .


  DATA:ls_stylelin TYPE lvc_s_styl.

  REFRESH:gt_alv.

  SELECT *
    FROM ythr_orginf
    WHERE programm IN @s_prog
    AND direc IN @s_direc
    AND sdate IN @s_date
    AND stims IN @s_tims
    AND businessid IN @s_busin
    INTO TABLE @DATA(lt_orginf).
  IF sy-subrc EQ 0.
    LOOP AT lt_orginf INTO DATA(ls_orginf).
      MOVE-CORRESPONDING ls_orginf TO gs_alv.
      IF ls_orginf-sjson IS NOT INITIAL.
        ls_stylelin-fieldname = 'SHOW'.                        " 需要编辑的列名
        ls_stylelin-style = cl_gui_alv_grid=>mc_style_button.   " 设置为BUTEN
        INSERT ls_stylelin INTO TABLE gs_alv-field_style.
        CLEAR ls_stylelin.
        gs_alv-show = '显示'.
      ENDIF.
      APPEND gs_alv TO gt_alv.
      CLEAR:gs_alv,ls_orginf.
    ENDLOOP.
  ELSE.
    MESSAGE '没有满足条件的数据' TYPE  'S' DISPLAY LIKE 'E'.
  ENDIF.


ENDFORM.


CLASS lcl_event_handler IMPLEMENTATION.


  METHOD handle_user_command.
*    CASE e_ucomm.
*      WHEN 'ADD'.
*    ENDCASE.

  ENDMETHOD.

  METHOD handle_button_click.
    PERFORM sub_button_click USING es_col_id es_row_no.
  ENDMETHOD.
  "handle_double_click

ENDCLASS.
*&---------------------------------------------------------------------*
*& Form sub_button_click
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> ES_COL_ID
*&      --> ES_ROW_NO
*&---------------------------------------------------------------------*
FORM sub_button_click USING p_col_id TYPE lvc_s_col
                        p_row_no TYPE lvc_s_roid.

  DATA: lv_convert  TYPE string,
        lv_err_text TYPE string.


  READ TABLE gt_alv INTO gs_alv INDEX p_row_no-row_id.


  IF p_col_id-fieldname = 'SHOW'.

    IF gs_alv-sjson IS INITIAL.
      MESSAGE '无请求JSON数据' TYPE 'E'.
      EXIT.
    ENDIF.

    TRY.
*   将JSON转换为HTML
        CALL TRANSFORMATION sjson2html SOURCE XML gs_alv-sjson
                                       RESULT XML DATA(lv_html).
      CATCH cx_xslt_runtime_error INTO DATA(lo_err).
        lv_err_text = lo_err->get_text( ).
        MESSAGE lv_err_text TYPE 'E'.
        RETURN.
    ENDTRY.

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

*    CALL METHOD g_xml->parse_string
*      EXPORTING
*        stream = gs_alv-sjson.
*
*    CALL METHOD g_xml->display.
  ENDIF.
ENDFORM. "sub_button_click

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值