前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >One order event display tool

One order event display tool

作者头像
Jerry Wang
发布2019-07-19 10:46:21
5230
发布2019-07-19 10:46:21
举报
知识共享许可协议
知识共享许可协议

版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

Created by Jerry Wang, last modified on Feb 15, 2015

执行report,输入要查看的process type:

clipboard1
clipboard1

得到执行结果:

clipboard2
clipboard2

source code:

代码语言:javascript
复制
PROGRAM bcalvc_print.

PARAMETERS: type TYPE crmt_process_type OBLIGATORY DEFAULT 'OPSM'.
CLASS lcl_event_receiver DEFINITION DEFERRED.
*
*********


DATA: ok_code          LIKE sy-ucomm,
      g_max            TYPE i VALUE 100,
      gt_sflight       TYPE TABLE OF sflight,
      g_repid          LIKE sy-repid,
      gs_print         TYPE lvc_s_prnt,
      gs_layout        TYPE lvc_s_layo,
      mycontainer      TYPE scrfname VALUE 'BCALVC_EVENT1_CONT1',
      lt_callbacks_hdr TYPE crmt_event_callbacks,
      lt_out           TYPE STANDARD TABLE OF crm_event_callbacks,

      custom_container TYPE REF TO cl_gui_custom_container,
      grid1            TYPE REF TO cl_gui_alv_grid,
      event_receiver   TYPE REF TO lcl_event_receiver.

CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.
* § 2. Define a method for each print event you need.
    METHODS:
      handle_top_of_page
         FOR EVENT print_top_of_page OF cl_gui_alv_grid,

      handle_end_of_page
         FOR EVENT print_end_of_page OF cl_gui_alv_grid,

      handle_top_of_list
         FOR EVENT print_top_of_list OF cl_gui_alv_grid,

      handle_end_of_list
         FOR EVENT print_end_of_list OF cl_gui_alv_grid.

  PRIVATE SECTION.
    DATA: pagenum TYPE i.

ENDCLASS.

CLASS lcl_event_receiver IMPLEMENTATION.
*§ 3. Implement your event handler methods. Use WRITE to provide output.
  METHOD handle_top_of_page.
    DATA: tablename(30) TYPE c.
    PERFORM get_tablename CHANGING tablename.
    WRITE: /,'Event: PRINT_TOP_OF_PAGE'(001),
             'Table: '(002),tablename.

  ENDMETHOD.                           "handle_top_of_page
*-------------------------------------------
  METHOD handle_end_of_page.
    DATA: tablename(30) TYPE c.

    PERFORM get_tablename CHANGING tablename.
    ADD 1 TO pagenum.
    WRITE: /,'Event: PRINT_END_OF_PAGE'(003),
             text-002,tablename,
             'Number of pages so far: '(004), pagenum.

  ENDMETHOD.                           "handle_end_of_page
*-------------------------------------------
  METHOD handle_top_of_list.
    DATA: tablename(30) TYPE c.
    CLEAR pagenum.
    PERFORM get_tablename CHANGING tablename.
    WRITE: /,'Event: PRINT_TOP_OF_LIST'(005),
             text-002,tablename.

  ENDMETHOD.                           "handle_top_of_list
*-------------------------------------------
  METHOD handle_end_of_list.
    DATA: tablename(30) TYPE c.
    PERFORM get_tablename CHANGING tablename.
    WRITE: /,'Event: PRINT_END_OF_LIST'(006),
             text-002,tablename.

  ENDMETHOD.                           "handle_end_of_list
*-------------------------------------------
ENDCLASS.
*
* c_event_receiver (Implementation)
*===================================================================

START-OF-SELECTION.
  CALL FUNCTION 'CRM_EVENT_FILTER_PROC_TYPE_OW'
    EXPORTING
      iv_proc_type     = type
    IMPORTING
      et_callbacks_hdr = lt_callbacks_hdr.
  lt_out = lt_callbacks_hdr.
*
END-OF-SELECTION.
  g_repid = sy-repid.
  CALL SCREEN 100.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'MAIN100'.
  IF custom_container IS INITIAL.
* create a custom container control for our ALV Control
    CREATE OBJECT custom_container
      EXPORTING
        container_name              = mycontainer
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5.
    IF sy-subrc NE 0.
* add your handling, for example
      CALL FUNCTION 'POPUP_TO_INFORM'
        EXPORTING
          titel = g_repid
          txt2  = sy-subrc
          txt1  = 'The control could not be created'(010).
    ENDIF.
* create an instance of alv control
    CREATE OBJECT grid1
      EXPORTING
        i_parent = custom_container.
*
* Set a titlebar for the grid control
*
    gs_layout-grid_title = 'Flights'(100).

    gs_print-reservelns = 2.


********
* ->Create Object to receive events and link them to handler methods.
* When the ALV Control raises the event for the specified instance
* the corresponding method is automatically called.
*

********

* § 4. Link used print events and event handler methods.
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_top_of_list FOR grid1.
    SET HANDLER event_receiver->handle_top_of_page FOR grid1.
    SET HANDLER event_receiver->handle_end_of_list FOR grid1.
    SET HANDLER event_receiver->handle_end_of_page FOR grid1.
*
    CALL METHOD grid1->set_table_for_first_display
      EXPORTING
        i_structure_name = 'CRM_EVENT_CALLBACKS'
        is_print         = gs_print
        is_layout        = gs_layout
      CHANGING
        it_outtab        = lt_out.

  ENDIF.

  CALL METHOD cl_gui_control=>set_focus EXPORTING control = grid1.

* Control Framework flushes at the end of PBO automatically!
ENDMODULE.
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE pai INPUT.
  CASE ok_code.
    WHEN 'EXIT'.
      PERFORM exit_program.
  ENDCASE.
  CLEAR ok_code.
ENDMODULE.
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM exit_program.
  CALL METHOD custom_container->free.
  CALL METHOD cl_gui_cfw=>flush.
  IF sy-subrc NE 0.
* add your handling, for example
    CALL FUNCTION 'POPUP_TO_INFORM'
      EXPORTING
        titel = g_repid
        txt2  = sy-subrc
        txt1  = 'Error in Flush'(009).
  ENDIF.
  LEAVE PROGRAM.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  GET_TABLENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_TABLENAME  text
*----------------------------------------------------------------------*
FORM get_tablename CHANGING p_tablename.
  DATA: lt_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat,
        ls_fieldcat TYPE lvc_s_fcat.

  CALL METHOD grid1->get_frontend_fieldcatalog
    IMPORTING
      et_fieldcatalog = lt_fieldcat.


  CALL METHOD cl_gui_cfw=>flush.
  IF sy-subrc <> 0.
    p_tablename = 'No tablename in fieldcatalog!'(008).
    CALL FUNCTION 'POPUP_TO_INFORM'
      EXPORTING
        titel = g_repid
        txt2  = p_tablename
        txt1  = 'Error in Flush'(011).
  ELSE.
    READ TABLE lt_fieldcat INDEX 1 INTO ls_fieldcat.
    p_tablename = ls_fieldcat-ref_table.
  ENDIF.

ENDFORM.                               " GET_TABLENAME 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Created by Jerry Wang, last modified on Feb 15, 2015
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档