*&---------------------------------------------------------------------*
*& 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'.
*&---------------------------------------------------------------------*