Report: Z_R_ALV
REPORT z_r_alv. CLASS gcl_event_handler DEFINITION DEFERRED. "Data Declaration INCLUDE z_r_alv_top. "Class Declaration INCLUDE z_r_alv_cl. "Screen Module Declaration INCLUDE z_r_alv_mod. "Subroutines Declaraion INCLUDE z_r_alv_sub. START-OF-SELECTION. CALL SCREEN 1100.
Include: Z_R_ALV_TOP
*&---------------------------------------------------------------------* *& Include Z_R_ALV_TOP *&---------------------------------------------------------------------* TYPES: BEGIN OF gty_extract, call_req_id TYPE zzcall_req_id, object TYPE zzobjname, serviceid TYPE zzcall_sys_id, servicekey TYPE zzcall_sys_key, batch_size TYPE zzbsize, compression TYPE zzkdpcompress, mdata TYPE zzkdpchar1, format TYPE zzkdpformat, projections TYPE string, selections TYPE string, numb_of_lines TYPE zzkdpnolines, from_date TYPE zztimestamp, to_date TYPE zztimestamp, extract_mode TYPE zzkdpchar1, execution_mode TYPE zzkdpchar1, response_mode TYPE zzkdpchar1, celltab TYPE lvc_t_styl, END OF gty_extract, gtt_extract TYPE STANDARD TABLE OF gty_extract, gtt_t_f4 TYPE STANDARD TABLE OF lvc_s_f4. DATA: gt_extract TYPE STANDARD TABLE OF gty_extract, go_container TYPE scrfname VALUE 'CONT1', go_grid1 TYPE REF TO cl_gui_alv_grid, go_custom_container TYPE REF TO cl_gui_docking_container, gs_layout TYPE lvc_s_layo, gv_max TYPE i VALUE 100.Include: Z_R_ALV_CL*&---------------------------------------------------------------------* *& Include Z_R_ALV_CL *&---------------------------------------------------------------------* ************************************************************************************************* *LOCAL CLASS DEFINITION ************************************************************************************************* *Class definition to handle the ONF4 event CLASS gcl_event_handler DEFINITION. PUBLIC SECTION. METHODS: on_f4 FOR EVENT onf4 OF cl_gui_alv_grid IMPORTING sender e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display. ENDCLASS. "lcl_event_handler DEFINITION ************************************************************************************************* *LOCAL CLASS IMPLEMENTATION ************************************************************************************************* *Class implementation to handle the ONF4 event CLASS gcl_event_handler IMPLEMENTATION. METHOD on_f4. TYPES: BEGIN OF lty_exe_mode, mode TYPE zzkdpchar1, END OF lty_exe_mode. DATA: lt_data TYPE STANDARD TABLE OF lty_exe_mode, lt_ret TYPE STANDARD TABLE OF ddshretval, ls_data LIKE LINE OF lt_data, ls_sel LIKE LINE OF lt_ret, ls_modi TYPE lvc_s_modi, ls_stable TYPE lvc_s_stbl. FIELD-SYMBOLS: <lfs_extract> TYPE gty_extract. CASE e_fieldname. WHEN 'EXECUTION_MODE'. "Add the custom F4 values; here we are adding 2 values 'Uncertain' and 'Relevant' for the field STATE IF lt_data[] IS INITIAL. ls_data-mode = 'B'. APPEND ls_data TO lt_data. CLEAR ls_data. ls_data-mode = 'R'. APPEND ls_data TO lt_data. ENDIF. "Call the function module to display the custom F4 values CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'MODE' window_title = 'Execution Mode' value_org = 'S' TABLES value_tab = lt_data[] return_tab = lt_ret[] EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc = 0. READ TABLE lt_ret INTO ls_sel INDEX 1. IF sy-subrc EQ 0. READ TABLE gt_extract INDEX es_row_no-row_id ASSIGNING <lfs_extract>. IF sy-subrc EQ 0. <lfs_extract>-execution_mode = ls_sel-fieldval. IF go_grid1 IS BOUND. ls_stable-row = abap_true. ls_stable-col = abap_true. CALL METHOD go_grid1->refresh_table_display EXPORTING is_stable = ls_stable EXCEPTIONS finished = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDIF. ENDIF. ENDIF. ENDIF. WHEN 'PROJECTIONS'. "Write the code for the other columns WHEN OTHERS. ENDCASE. er_event_data->m_event_handled = abap_true. "(to inform grid that f4 was handled manually) ENDMETHOD. ENDCLASS. "lcl_event_handler IMPLEMENTATIONInclude: Z_R_ALV_MOD*&---------------------------------------------------------------------* *& Include Z_R_ALV_MOD *&---------------------------------------------------------------------* *---------------------------------------------------------------------* * MODULE PBO OUTPUT * *---------------------------------------------------------------------* MODULE status_1100 OUTPUT. SET PF-STATUS 'PF_STATUS'. "Preapre the ALV PERFORM prepare_alv. ENDMODULE. "pbo OUTPUT *---------------------------------------------------------------------* * MODULE PAI INPUT * *---------------------------------------------------------------------* MODULE user_command_1100 INPUT. * save_ok = ok_code. * CLEAR ok_code. CASE sy-ucomm. WHEN '&EXE'. CALL METHOD go_grid1->check_changed_data. WHEN OTHERS. ENDCASE. ENDMODULE. "pai INPUTInclude: Z_R_ALV_SUB*&---------------------------------------------------------------------* *& Include Z_R_ALV_SUB *&---------------------------------------------------------------------* *---------------------------------------------------------------------* * PREPARE_ALV * *---------------------------------------------------------------------* FORM prepare_alv. DATA: lt_fieldcatalog TYPE lvc_t_fcat, lt_f4 TYPE lvc_t_f4, lt_f4_tmp TYPE gtt_t_f4, lo_event_obj TYPE REF TO gcl_event_handler. IF go_custom_container IS INITIAL. CREATE OBJECT go_custom_container EXPORTING repid = sy-repid dynnr = '1100' ratio = '90' 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 ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. CREATE OBJECT go_grid1 EXPORTING i_parent = go_custom_container. "Build Field Catalog PERFORM populate_fcat USING '1' 'CALL_REQ_ID' 'Call Req ID' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '2' 'OBJECT' 'Object' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '3' 'SERVICEID' 'Service ID' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '4' 'SERVICEKEY' 'Service Key' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '5' 'BATCH_SIZE' 'Batch Size' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '6' 'COMPRESSION' 'Compression' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '7' 'MDATA' 'MDATA' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '8' 'FORMAT' 'Format' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '9' 'PROJECTIONS' 'Projection' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '10' 'SELECTIONS' 'Selection' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '11' 'NUMB_OF_LINES' 'Number of lines' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '12' 'FROM_DATE' 'From Date' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '13' 'TO_DATE' 'To Date' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '14' 'EXTRACT_MODE' 'Extract Mode' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '15' 'EXECUTION_MODE' 'Execution Mode' CHANGING lt_fieldcatalog. PERFORM populate_fcat USING '16' 'RESPONSE_MODE' 'Response Mode' CHANGING lt_fieldcatalog. "Prepare F4 help PERFORM prepare_f4 USING 'PROJECTIONS' CHANGING lt_f4_tmp. PERFORM prepare_f4 USING 'EXECUTION_MODE' CHANGING lt_f4_tmp. "Register for F4 lt_f4[] = lt_f4_tmp[]. CREATE OBJECT lo_event_obj. SET HANDLER lo_event_obj->on_f4 FOR go_grid1. CALL METHOD go_grid1->register_f4_for_fields EXPORTING it_f4 = lt_f4. "enable for input PERFORM enable_input_cell CHANGING gt_extract. "add new entry PERFORM add_new_entry CHANGING gt_extract. PERFORM add_new_entry CHANGING gt_extract. CALL METHOD go_grid1->set_table_for_first_display EXPORTING i_structure_name = 'GTY_EXTRACT' is_layout = gs_layout CHANGING it_fieldcatalog = lt_fieldcatalog it_outtab = gt_extract[]. ENDIF. ENDFORM. *---------------------------------------------------------------------* * PREPARE_F4 * *---------------------------------------------------------------------* FORM prepare_f4 USING pv_fieldname TYPE lvc_fname CHANGING ct_f4 TYPE gtt_t_f4. DATA: ls_f4 LIKE LINE OF ct_f4. ls_f4-fieldname = pv_fieldname. ls_f4-register = abap_true. ls_f4-getbefore = space. ls_f4-chngeafter = space. APPEND ls_f4 TO ct_f4. ENDFORM. *---------------------------------------------------------------------* * ADD_NEW_ENTRY * *---------------------------------------------------------------------* FORM add_new_entry CHANGING ct_extract TYPE gtt_extract. FIELD-SYMBOLS: <lfs_extract> LIKE LINE OF ct_extract. APPEND INITIAL LINE TO gt_extract ASSIGNING <lfs_extract>. <lfs_extract>-serviceid = '1001'. <lfs_extract>-batch_size = '2000'. <lfs_extract>-compression = 'GZIP'. <lfs_extract>-format = 'JSON'. <lfs_extract>-extract_mode = 'F'. <lfs_extract>-execution_mode = 'B'. <lfs_extract>-response_mode = 'H'. ENDFORM. *---------------------------------------------------------------------* * ENABLE_INPUT_CELL * *---------------------------------------------------------------------* FORM enable_input_cell CHANGING ct_extract TYPE gtt_extract. DATA: lt_celltab TYPE lvc_t_styl, l_mode TYPE raw4, lv_index TYPE i. FIELD-SYMBOLS: <lfs_extract> LIKE LINE OF ct_extract, <lfs_celltab> LIKE LINE OF lt_celltab. l_mode = cl_gui_alv_grid=>mc_style_enabled. LOOP AT ct_extract ASSIGNING <lfs_extract>. lv_index = sy-tabix. CLEAR: lt_celltab[]. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'CALL_REQ_ID'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'OBJECT'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'SERVICEID'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'SERVICEKEY'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'BATCH_SIZE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'COMPRESSION'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'MDATA'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'FORMAT'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'PROJECTIONS'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'SELECTIONS'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'NUMB_OF_LINES'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'FROM_DATE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'TO_DATE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'EXTRACT_MODE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'EXECUTION_MODE'. <lfs_celltab>-style = l_mode. APPEND INITIAL LINE TO lt_celltab ASSIGNING <lfs_celltab>. <lfs_celltab>-fieldname = 'RESPONSE_MODE'. <lfs_celltab>-style = l_mode. <lfs_extract>-celltab[] = lt_celltab[]. CLEAR: lt_celltab[]. ENDLOOP. "set edit enabled cells ready for input CALL METHOD go_grid1->set_ready_for_input EXPORTING i_ready_for_input = 1. ENDFORM. *---------------------------------------------------------------------* * FORM EXIT_PROGRAM * *---------------------------------------------------------------------* FORM exit_program. LEAVE PROGRAM. ENDFORM. "exit_program *---------------------------------------------------------------------* * FORM POPULATE_FCAT * *---------------------------------------------------------------------* FORM populate_fcat USING pv_col_pos TYPE lvc_colpos pv_fieldname TYPE lvc_fname pv_scrtext_m TYPE scrtext_m CHANGING ct_fcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <lfs_fieldcatalog> LIKE LINE OF ct_fcat. APPEND INITIAL LINE TO ct_fcat ASSIGNING <lfs_fieldcatalog>. <lfs_fieldcatalog>-col_pos = pv_col_pos. <lfs_fieldcatalog>-edit = abap_true. <lfs_fieldcatalog>-fieldname = pv_fieldname. <lfs_fieldcatalog>-scrtext_m = pv_scrtext_m. IF pv_fieldname = 'EXECUTION_MODE' OR pv_fieldname = 'PROJECTIONS'. <lfs_fieldcatalog>-f4availabl = abap_true. ENDIF. ENDFORM. "populate_fcat