Skip to content
Skip to content
Menu
SAP ABAP DWIMAN
  • About
SAP ABAP DWIMAN

SAP ABAP – ALV with Dock Header and Footer

By juananda.satria on August 2, 2026August 2, 2026
*&---------------------------------------------------------------------*
*& Report  ZALV_DOCK_APPROVE
*&---------------------------------------------------------------------*
*& Docking container + 3-row splitter layout:
*&   Row 1 (fixed px) : Title / selection parameters / record count
*&   Row 2 (rest)     : ALV grid (display only, row-selectable)
*&   Row 3 (fixed px) : Signature block
*&
*& Buttons SUBMIT / APPROVE are added to the ALV toolbar (no SE41 work
*& required for them). Screen 100 still needs a small GUI status for
*& BACK / EXIT / CANCEL - see notes at the bottom of this file.
*&
*& Written in classic syntax (7.02-safe). No inline declarations.
*&---------------------------------------------------------------------*
REPORT zalv_dock_approve.

TYPE-POOLS: icon.

TABLES: sflight.

*----------------------------------------------------------------------*
* Types
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_out,
         icon     TYPE icon_d,
         carrid   TYPE sflight-carrid,
         connid   TYPE sflight-connid,
         fldate   TYPE sflight-fldate,
         price    TYPE sflight-price,
         currency TYPE sflight-currency,
         seatsocc TYPE sflight-seatsocc,
         zstatus  TYPE char12,
       END OF ty_out.

*----------------------------------------------------------------------*
* Globals
*----------------------------------------------------------------------*
DATA: gt_out TYPE STANDARD TABLE OF ty_out,
      gs_out TYPE ty_out.

DATA: go_dock      TYPE REF TO cl_gui_docking_container,
      go_split     TYPE REF TO cl_gui_splitter_container,
      go_cont_top  TYPE REF TO cl_gui_container,
      go_cont_grid TYPE REF TO cl_gui_container,
      go_cont_bot  TYPE REF TO cl_gui_container,
      go_grid      TYPE REF TO cl_gui_alv_grid,
      go_dd_top    TYPE REF TO cl_dd_document,
      go_dd_bot    TYPE REF TO cl_dd_document.

DATA: gv_ok_code    TYPE sy-ucomm,
      gv_top_shown  TYPE abap_bool,
      gv_bot_shown  TYPE abap_bool,
      gv_cnt_total  TYPE i,
      gv_cnt_subm   TYPE i,
      gv_cnt_appr   TYPE i.

* Header / footer heights in PIXELS (splitter runs in absolute mode)
CONSTANTS: gc_top_height TYPE i VALUE 95,
           gc_bot_height TYPE i VALUE 80.

*----------------------------------------------------------------------*
* Event handler for the ALV grid
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
  PUBLIC SECTION.
    METHODS:
      on_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive,
      on_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,
      on_print_top_of_page
        FOR EVENT print_top_of_page OF cl_gui_alv_grid,
      on_print_end_of_list
        FOR EVENT print_end_of_list OF cl_gui_alv_grid.
ENDCLASS.

DATA: go_handler TYPE REF TO lcl_event_handler.

*----------------------------------------------------------------------*
* Selection screen
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-b01.
SELECT-OPTIONS: s_carrid FOR sflight-carrid,
                s_fldate FOR sflight-fldate.
PARAMETERS:     p_maxrow TYPE i DEFAULT 500.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
  PERFORM get_data.

  IF gt_out IS INITIAL.
    MESSAGE 'No data found for the given selection' TYPE 'S'
            DISPLAY LIKE 'W'.
    RETURN.
  ENDIF.

  CALL SCREEN 0100.

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
FORM get_data.

  DATA: lt_flight TYPE STANDARD TABLE OF sflight,
        ls_flight TYPE sflight.

  CLEAR: gt_out.

  SELECT carrid connid fldate price currency seatsocc
    FROM sflight
    INTO CORRESPONDING FIELDS OF TABLE lt_flight
    UP TO p_maxrow ROWS
   WHERE carrid IN s_carrid
     AND fldate IN s_fldate.

  LOOP AT lt_flight INTO ls_flight.
    CLEAR gs_out.
    MOVE-CORRESPONDING ls_flight TO gs_out.

*   Replace this with the real status read from your Z-table.
    gs_out-zstatus = 'NEW'.
    PERFORM set_status_icon CHANGING gs_out.

    APPEND gs_out TO gt_out.
  ENDLOOP.

  PERFORM count_records.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form SET_STATUS_ICON
*&---------------------------------------------------------------------*
FORM set_status_icon CHANGING cs_out TYPE ty_out.

  CASE cs_out-zstatus.
    WHEN 'APPROVED'.
      cs_out-icon = icon_green_light.
    WHEN 'SUBMITTED'.
      cs_out-icon = icon_yellow_light.
    WHEN OTHERS.
      cs_out-icon = icon_light_out.
  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form COUNT_RECORDS
*&---------------------------------------------------------------------*
FORM count_records.

  DATA: ls_out TYPE ty_out.

  CLEAR: gv_cnt_total, gv_cnt_subm, gv_cnt_appr.

  DESCRIBE TABLE gt_out LINES gv_cnt_total.

  LOOP AT gt_out INTO ls_out.
    CASE ls_out-zstatus.
      WHEN 'SUBMITTED'. gv_cnt_subm = gv_cnt_subm + 1.
      WHEN 'APPROVED'.  gv_cnt_appr = gv_cnt_appr + 1.
    ENDCASE.
  ENDLOOP.

ENDFORM.

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  SET PF-STATUS 'ST100'.
  SET TITLEBAR  'TB100'.

  IF go_dock IS INITIAL.
    PERFORM build_containers.
    PERFORM build_header.
    PERFORM build_footer.
    PERFORM build_alv.
  ENDIF.

ENDMODULE.

*&---------------------------------------------------------------------*
*& Form BUILD_CONTAINERS
*&---------------------------------------------------------------------*
FORM build_containers.

* One docking container attached to the left edge with an extension
* larger than any screen width -> it fills the whole dynpro area.
  CREATE OBJECT go_dock
    EXPORTING
      repid                       = sy-repid
      dynnr                       = sy-dynnr
      side                        = cl_gui_docking_container=>dock_at_left
      extension                   = 2000
      no_autodef_progid_dynnr     = abap_true
    EXCEPTIONS
      cntl_error                  = 1
      cntl_system_error           = 2
      create_error                = 3
      lifetime_error              = 4
      lifetime_dynpro_dynpro_link = 5
      OTHERS                      = 6.
  IF sy-subrc <> 0.
    MESSAGE 'Could not create docking container' TYPE 'E'.
  ENDIF.

* 3 rows x 1 column
  CREATE OBJECT go_split
    EXPORTING
      parent  = go_dock
      rows    = 3
      columns = 1.

* Absolute mode -> row heights are given in PIXELS, not percent.
* Row 2 (the grid) automatically takes whatever is left over.
  CALL METHOD go_split->set_row_mode
    EXPORTING
      mode = cl_gui_splitter_container=>mode_absolute.

  CALL METHOD go_split->set_row_height
    EXPORTING
      id     = 1
      height = gc_top_height.

  CALL METHOD go_split->set_row_height
    EXPORTING
      id     = 3
      height = gc_bot_height.

* Lock both sashes so the user cannot drag the header/footer away
  PERFORM lock_sash USING 1.
  PERFORM lock_sash USING 2.

  go_cont_top  = go_split->get_container( row = 1 column = 1 ).
  go_cont_grid = go_split->get_container( row = 2 column = 1 ).
  go_cont_bot  = go_split->get_container( row = 3 column = 1 ).

ENDFORM.

*&---------------------------------------------------------------------*
*& Form LOCK_SASH
*&---------------------------------------------------------------------*
FORM lock_sash USING iv_id TYPE i.

  CALL METHOD go_split->set_row_sash
    EXPORTING
      id    = iv_id
      type  = cl_gui_splitter_container=>type_movable
      value = cl_gui_splitter_container=>false.

  CALL METHOD go_split->set_row_sash
    EXPORTING
      id    = iv_id
      type  = cl_gui_splitter_container=>type_sashvisible
      value = cl_gui_splitter_container=>false.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form BUILD_HEADER
*&---------------------------------------------------------------------*
FORM build_header.

  DATA: lv_text TYPE sdydo_text_element,
        lv_sel  TYPE string,
        lv_num  TYPE char10.

  IF go_dd_top IS INITIAL.
    CREATE OBJECT go_dd_top
      EXPORTING
        style = 'ALV_GRID'.
  ENDIF.

  CALL METHOD go_dd_top->initialize_document.

* ---- Line 1 : title
  lv_text = 'Flight Approval Report'.
  CALL METHOD go_dd_top->add_text
    EXPORTING
      text         = lv_text
      sap_style    = cl_dd_document=>heading
      sap_emphasis = cl_dd_document=>strong.

  CALL METHOD go_dd_top->new_line.

* ---- Line 2 : selection parameters
  PERFORM build_sel_text CHANGING lv_sel.
  lv_text = lv_sel.
  CALL METHOD go_dd_top->add_text
    EXPORTING
      text      = lv_text
      sap_style = cl_dd_document=>small.

  CALL METHOD go_dd_top->new_line.

* ---- Line 3 : counters
  CLEAR lv_text.
  WRITE gv_cnt_total TO lv_num LEFT-JUSTIFIED.
  CONCATENATE 'Records:' lv_num INTO lv_text SEPARATED BY space.
  CALL METHOD go_dd_top->add_text
    EXPORTING
      text         = lv_text
      sap_emphasis = cl_dd_document=>strong.

  CALL METHOD go_dd_top->add_gap EXPORTING width = 20.

  CLEAR lv_text.
  WRITE gv_cnt_subm TO lv_num LEFT-JUSTIFIED.
  CONCATENATE 'Submitted:' lv_num INTO lv_text SEPARATED BY space.
  CALL METHOD go_dd_top->add_text
    EXPORTING
      text = lv_text.

  CALL METHOD go_dd_top->add_gap EXPORTING width = 20.

  CLEAR lv_text.
  WRITE gv_cnt_appr TO lv_num LEFT-JUSTIFIED.
  CONCATENATE 'Approved:' lv_num INTO lv_text SEPARATED BY space.
  CALL METHOD go_dd_top->add_text
    EXPORTING
      text = lv_text.

  CALL METHOD go_dd_top->merge_document.

  IF gv_top_shown = abap_false.
    CALL METHOD go_dd_top->display_document
      EXPORTING
        parent = go_cont_top
      EXCEPTIONS
        OTHERS = 1.
    gv_top_shown = abap_true.
  ELSE.
*   reuse_control = 'X' repaints the existing HTML control in place
    CALL METHOD go_dd_top->display_document
      EXPORTING
        reuse_control = abap_true
        parent        = go_cont_top
      EXCEPTIONS
        OTHERS        = 1.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form BUILD_SEL_TEXT
*&---------------------------------------------------------------------*
FORM build_sel_text CHANGING cv_text TYPE string.

  DATA: lv_carr TYPE string,
        lv_date TYPE string,
        lv_lo   TYPE char20,
        lv_hi   TYPE char20.

  IF s_carrid[] IS INITIAL.
    lv_carr = 'All'.
  ELSE.
    READ TABLE s_carrid INDEX 1.
    lv_lo = s_carrid-low.
    lv_hi = s_carrid-high.
    IF s_carrid-high IS INITIAL.
      lv_carr = lv_lo.
    ELSE.
      CONCATENATE lv_lo '-' lv_hi INTO lv_carr SEPARATED BY space.
    ENDIF.
  ENDIF.

  IF s_fldate[] IS INITIAL.
    lv_date = 'All'.
  ELSE.
    READ TABLE s_fldate INDEX 1.
    WRITE s_fldate-low TO lv_lo.
    IF s_fldate-high IS INITIAL.
      lv_date = lv_lo.
    ELSE.
      WRITE s_fldate-high TO lv_hi.
      CONCATENATE lv_lo '-' lv_hi INTO lv_date SEPARATED BY space.
    ENDIF.
  ENDIF.

  CONCATENATE 'Carrier:' lv_carr '|' 'Flight date:' lv_date
         INTO cv_text SEPARATED BY space.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form BUILD_FOOTER
*&---------------------------------------------------------------------*
FORM build_footer.

  DATA: lo_table TYPE REF TO cl_dd_table_element,
        lo_col1  TYPE REF TO cl_dd_area,
        lo_col2  TYPE REF TO cl_dd_area,
        lo_col3  TYPE REF TO cl_dd_area,
        lv_text  TYPE sdydo_text_element,
        lv_line  TYPE sdydo_text_element.

  lv_line = '______________________'.

  IF go_dd_bot IS INITIAL.
    CREATE OBJECT go_dd_bot
      EXPORTING
        style = 'ALV_GRID'.
  ENDIF.

  CALL METHOD go_dd_bot->initialize_document.

  CALL METHOD go_dd_bot->add_table
    EXPORTING
      no_of_columns               = 3
      border                      = '0'
      width                       = '100%'
      cell_background_transparent = abap_true
    IMPORTING
      table                       = lo_table.

  CALL METHOD lo_table->add_column
    EXPORTING width = '33%' IMPORTING column = lo_col1.
  CALL METHOD lo_table->add_column
    EXPORTING width = '33%' IMPORTING column = lo_col2.
  CALL METHOD lo_table->add_column
    EXPORTING width = '34%' IMPORTING column = lo_col3.

* ---- Row 1 : signature lines
  CALL METHOD lo_col1->add_text EXPORTING text = lv_line.
  CALL METHOD lo_col2->add_text EXPORTING text = lv_line.
  CALL METHOD lo_col3->add_text EXPORTING text = lv_line.

  CALL METHOD lo_table->new_row.

* ---- Row 2 : roles
  lv_text = 'Prepared by'.
  CALL METHOD lo_col1->add_text
    EXPORTING text = lv_text sap_style = cl_dd_document=>small.

  lv_text = 'Checked by'.
  CALL METHOD lo_col2->add_text
    EXPORTING text = lv_text sap_style = cl_dd_document=>small.

  lv_text = 'Approved by'.
  CALL METHOD lo_col3->add_text
    EXPORTING text = lv_text sap_style = cl_dd_document=>small.

  CALL METHOD go_dd_bot->merge_document.

  IF gv_bot_shown = abap_false.
    CALL METHOD go_dd_bot->display_document
      EXPORTING parent = go_cont_bot
      EXCEPTIONS OTHERS = 1.
    gv_bot_shown = abap_true.
  ELSE.
    CALL METHOD go_dd_bot->display_document
      EXPORTING reuse_control = abap_true
                parent        = go_cont_bot
      EXCEPTIONS OTHERS = 1.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form BUILD_ALV
*&---------------------------------------------------------------------*
FORM build_alv.

  DATA: lt_fcat TYPE lvc_t_fcat,
        ls_fcat TYPE lvc_s_fcat,
        ls_layo TYPE lvc_s_layo,
        ls_vari TYPE disvariant.

  CREATE OBJECT go_grid
    EXPORTING
      i_parent = go_cont_grid.

* ---- register events BEFORE first display
  CREATE OBJECT go_handler.
  SET HANDLER go_handler->on_toolbar           FOR go_grid.
  SET HANDLER go_handler->on_user_command      FOR go_grid.
  SET HANDLER go_handler->on_print_top_of_page FOR go_grid.
  SET HANDLER go_handler->on_print_end_of_list FOR go_grid.

  PERFORM build_fieldcat CHANGING lt_fcat.

* ---- layout
* sel_mode = 'A' : multiple row selection, NO editable cells needed
  ls_layo-sel_mode   = 'A'.
  ls_layo-zebra      = abap_true.
  ls_layo-cwidth_opt = abap_true.
  ls_layo-no_rowmark = abap_false.

  ls_vari-report = sy-repid.
  ls_vari-handle = 'MAIN'.

  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      is_variant      = ls_vari
      i_save          = 'A'
      is_layout       = ls_layo
    CHANGING
      it_fieldcatalog = lt_fcat
      it_outtab       = gt_out.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
FORM build_fieldcat CHANGING ct_fcat TYPE lvc_t_fcat.

  DATA: ls_fcat TYPE lvc_s_fcat,
        lv_pos  TYPE i.

  DEFINE add_field.
    lv_pos = lv_pos + 1.
    CLEAR ls_fcat.
    ls_fcat-col_pos   = lv_pos.
    ls_fcat-fieldname = &1.
    ls_fcat-scrtext_l = &2.
    ls_fcat-scrtext_m = &2.
    ls_fcat-scrtext_s = &2.
    ls_fcat-coltext   = &2.
    ls_fcat-outputlen = &3.
    APPEND ls_fcat TO ct_fcat.
  END-OF-DEFINITION.

  add_field 'ICON'     ''             4.
  add_field 'CARRID'   'Carrier'      8.
  add_field 'CONNID'   'Connection'  10.
  add_field 'FLDATE'   'Flight Date' 12.
  add_field 'PRICE'    'Price'       15.
  add_field 'CURRENCY' 'Curr.'        5.
  add_field 'SEATSOCC' 'Occupied'    10.
  add_field 'ZSTATUS'  'Status'      12.

* icon column needs the ICON flag
  READ TABLE ct_fcat INTO ls_fcat WITH KEY fieldname = 'ICON'.
  IF sy-subrc = 0.
    ls_fcat-icon     = abap_true.
    ls_fcat-just     = 'C'.
    MODIFY ct_fcat FROM ls_fcat INDEX sy-tabix.
  ENDIF.

* currency reference for PRICE
  READ TABLE ct_fcat INTO ls_fcat WITH KEY fieldname = 'PRICE'.
  IF sy-subrc = 0.
    ls_fcat-cfieldname = 'CURRENCY'.
    MODIFY ct_fcat FROM ls_fcat INDEX sy-tabix.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form PROCESS_ACTION
*&---------------------------------------------------------------------*
FORM process_action USING iv_new_status TYPE char12.

  DATA: lt_rows   TYPE lvc_t_row,
        ls_row    TYPE lvc_s_row,
        ls_stable TYPE lvc_s_stbl,
        lv_ok     TYPE i,
        lv_skip   TYPE i,
        lv_msg    TYPE string,
        lv_num1   TYPE char10,
        lv_num2   TYPE char10.

  FIELD-SYMBOLS: <ls_out> TYPE ty_out.

  CALL METHOD go_grid->get_selected_rows
    IMPORTING
      et_index_rows = lt_rows.

  IF lt_rows IS INITIAL.
    MESSAGE 'Please select at least one row' TYPE 'S' DISPLAY LIKE 'W'.
    RETURN.
  ENDIF.

  LOOP AT lt_rows INTO ls_row.

    READ TABLE gt_out ASSIGNING <ls_out> INDEX ls_row-index.
    IF sy-subrc <> 0.
      CONTINUE.
    ENDIF.

*   ---- status transition rules
    IF iv_new_status = 'SUBMITTED' AND <ls_out>-zstatus <> 'NEW'.
      lv_skip = lv_skip + 1.
      CONTINUE.
    ENDIF.
    IF iv_new_status = 'APPROVED' AND <ls_out>-zstatus <> 'SUBMITTED'.
      lv_skip = lv_skip + 1.
      CONTINUE.
    ENDIF.

*   ------------------------------------------------------------------
*   TODO: replace this block with the real persistence layer
*
*   CALL FUNCTION 'ENQUEUE_EZ<your_lock_object>'
*     EXPORTING carrid = <ls_out>-carrid
*               connid = <ls_out>-connid
*               fldate = <ls_out>-fldate
*     EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3.
*   IF sy-subrc <> 0.  lv_skip = lv_skip + 1.  CONTINUE.  ENDIF.
*
*   Re-read the CURRENT status from the database here. The grid holds
*   a snapshot taken at selection time and may be stale.
*
*   UPDATE z_approval SET zstatus  = iv_new_status
*                         approver = sy-uname
*                         appdate  = sy-datum
*                   WHERE ...
*
*   CALL FUNCTION 'DEQUEUE_EZ<your_lock_object>' ...
*   ------------------------------------------------------------------

    <ls_out>-zstatus = iv_new_status.
    PERFORM set_status_icon CHANGING <ls_out>.
    lv_ok = lv_ok + 1.

  ENDLOOP.

  IF lv_ok > 0.
    COMMIT WORK AND WAIT.
  ENDIF.

  PERFORM count_records.
  PERFORM build_header.          " refresh the counters in the header

  ls_stable-row = abap_true.
  ls_stable-col = abap_true.
  CALL METHOD go_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable.

  WRITE lv_ok   TO lv_num1 LEFT-JUSTIFIED.
  WRITE lv_skip TO lv_num2 LEFT-JUSTIFIED.
  CONCATENATE lv_num1 'row(s) processed,' lv_num2 'skipped'
         INTO lv_msg SEPARATED BY space.
  MESSAGE lv_msg TYPE 'S'.

ENDFORM.

*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  DATA: lv_ucomm TYPE sy-ucomm.

  lv_ucomm = gv_ok_code.
  CLEAR gv_ok_code.

  CASE lv_ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      PERFORM free_controls.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.

*&---------------------------------------------------------------------*
*& Form FREE_CONTROLS
*&---------------------------------------------------------------------*
FORM free_controls.

  IF go_grid IS NOT INITIAL.
    CALL METHOD go_grid->free.
    CLEAR go_grid.
  ENDIF.

  IF go_split IS NOT INITIAL.
    CALL METHOD go_split->free.
    CLEAR go_split.
  ENDIF.

  IF go_dock IS NOT INITIAL.
    CALL METHOD go_dock->free.
    CLEAR go_dock.
  ENDIF.

  CLEAR: go_cont_top, go_cont_grid, go_cont_bot,
         go_dd_top, go_dd_bot,
         gv_top_shown, gv_bot_shown.

  CALL METHOD cl_gui_cfw=>flush.

ENDFORM.

*&---------------------------------------------------------------------*
*& CLASS lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.

  METHOD on_toolbar.

    DATA: ls_btn TYPE stb_button.

*   separator
    CLEAR ls_btn.
    ls_btn-butn_type = 3.
    APPEND ls_btn TO e_object->mt_toolbar.

*   SUBMIT
    CLEAR ls_btn.
    ls_btn-function  = 'SUBMIT'.
    ls_btn-icon      = icon_system_save.
    ls_btn-text      = 'Submit'.
    ls_btn-quickinfo = 'Submit the selected rows'.
    ls_btn-butn_type = 0.
    APPEND ls_btn TO e_object->mt_toolbar.

*   APPROVE
    CLEAR ls_btn.
    ls_btn-function  = 'APPROVE'.
    ls_btn-icon      = icon_okay.
    ls_btn-text      = 'Approve'.
    ls_btn-quickinfo = 'Approve the selected rows'.
    ls_btn-butn_type = 0.
    APPEND ls_btn TO e_object->mt_toolbar.

  ENDMETHOD.

  METHOD on_user_command.

    CASE e_ucomm.
      WHEN 'SUBMIT'.
        PERFORM process_action USING 'SUBMITTED'.
      WHEN 'APPROVE'.
        PERFORM process_action USING 'APPROVED'.
    ENDCASE.

  ENDMETHOD.

* --------------------------------------------------------------------
* PRINT events: the splitter header/footer above are SCREEN ONLY.
* These two handlers put the same information on the printout.
* --------------------------------------------------------------------
  METHOD on_print_top_of_page.

    DATA: lv_sel TYPE string.

    PERFORM build_sel_text CHANGING lv_sel.

    WRITE: / 'Flight Approval Report'.
    WRITE: / lv_sel.
    WRITE: / 'Records:', gv_cnt_total,
             'Submitted:', gv_cnt_subm,
             'Approved:', gv_cnt_appr.
    ULINE.

  ENDMETHOD.

  METHOD on_print_end_of_list.

    SKIP 3.
    WRITE: /5  '______________________',
            45 '______________________',
            85 '______________________'.
    WRITE: /5  'Prepared by',
            45 'Checked by',
            85 'Approved by'.
    WRITE: /5  sy-uname,
            85 'Date: ______________'.

  ENDMETHOD.

ENDCLASS.

*&---------------------------------------------------------------------*
* WHAT YOU STILL HAVE TO CREATE MANUALLY
*&---------------------------------------------------------------------*
* 1) Screen 0100 (SE51 / SE80, type "Normal", leave the layout EMPTY -
*    the docking container covers the whole dynpro):
*
*      PROCESS BEFORE OUTPUT.
*        MODULE status_0100.
*
*      PROCESS AFTER INPUT.
*        MODULE user_command_0100.
*
*    In the screen element list add one field:
*      Name = GV_OK_CODE, Type = OK, Length = 20
*
* 2) GUI status 'ST100' (SE41) with function codes BACK, EXIT, CANC
*    on F3 / Shift-F3 / F12. Nothing else is needed - SUBMIT and
*    APPROVE live in the ALV toolbar.
*
* 3) Title 'TB100'.
*
* 4) Text symbol text-b01 = 'Selection'.
*&---------------------------------------------------------------------*

Post navigation

SAP ABAP Fast Coding With This Template – Editable ALV With Events
SAP ABAP – ALV Dock with Approval 2 Columns

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • SAP ABAP – ALV Dock with Approval 2 Columns
  • SAP ABAP – ALV with Dock Header and Footer
  • SAP ABAP Fast Coding With This Template – Editable ALV With Events
  • SAP ABAP – Generate Fiori URL
  • SAP ABAP – Workflow Agents CDS

Recent Comments

  1. SAP ABAP – Simple Interface FTP Inbound (SAP Consume File From FTP) – SAP ABAP DWIMAN on SAP ABAP – String Encode & Decode BASE64
  2. Upload file – SAP ABAP DWIMAN on F4 Search Help File

Archives

  • August 2026
  • July 2026
  • May 2025
  • August 2024
  • June 2024
  • May 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • May 2023
  • April 2023

Categories

  • Uncategorized
©2026 SAP ABAP DWIMAN | WordPress Theme by SuperbThemes.com