*&---------------------------------------------------------------------* *& Report Z_CLOCO_STATUS_MONITOR *& *&---------------------------------------------------------------------* *& This program can track the status of various tasks * *& in multiple task lists. * *&---------------------------------------------------------------------* REPORT z_cloco_status_monitor MESSAGE-ID fh. *----------------------------------------------------------------------* * CLASS lcl_handle_events DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_handle_events DEFINITION. "#EC CLAS_FINAL PUBLIC SECTION. METHODS : on_link_click FOR EVENT link_click OF cl_salv_events_table IMPORTING row column, on_link_click1 FOR EVENT link_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "lcl_handle_events DEFINITION TYPES : BEGIN OF ty_outputsummary, profile TYPE tfc_profile, "Task List Name keydate TYPE ddate, "Key Date fstatus TYPE char20, "Task List Status total TYPE i, "Total tasks checked TYPE i, "Checked status compl TYPE i, "Completed status complww TYPE i, "Completed with warning status wip TYPE i, "In processing status complwe TYPE i, "Completed with error status unknown TYPE i, "Other unknown status notstart TYPE i, "Not Started status END OF ty_outputsummary, BEGIN OF ty_outputdetail, profile TYPE tfc_profile, "Task List Name keydate TYPE ddate, "Key Date fstatus TYPE char20, "Task List Status path TYPE char100, "Organization hierarchy path type TYPE char25, "Task Type text TYPE tfc_folder_text, "Task description report TYPE tfc_programm, "Program Name variante TYPE tfc_variant, "Variant transact TYPE tfc_transaction, "Transaction sequence TYPE tfc_sequence, "Flow Definition exe_usr TYPE tfc_task_owner, "Processor res_usr TYPE tfc_task_res, "Person Responsible agr_name TYPE agr_name, "Role name status TYPE sm_char50, "Task status locked TYPE tfc_locked, "Task completed count TYPE i, "Counter for totalling purpose END OF ty_outputdetail. DATA: v_tasklist TYPE profile, v_keydate TYPE ddate, v_task TYPE tfc_folder_text, v_exeusr TYPE tfc_task_owner, v_resusr TYPE tfc_task_res, v_agrnam TYPE agr_name, v_node TYPE scma_node, "#EC NEEDED v_node2 TYPE scma_node, "#EC NEEDED wa_variant TYPE disvariant. "#EC NEEDED CONSTANTS: c_checked TYPE sm_char50 VALUE 'Checked', "#EC NOTEXT c_compl TYPE sm_char50 VALUE 'Completed Without Errors', "#EC NOTEXT c_complww TYPE sm_char50 VALUE 'Completed with Warnings', "#EC NOTEXT c_wip TYPE sm_char50 VALUE 'In Processing', "#EC NOTEXT c_complwe TYPE sm_char50 VALUE 'Completed with Errors', "#EC NOTEXT c_notstart TYPE sm_char50 VALUE 'Not Started'. "#EC NOTEXT DATA: it_instance TYPE STANDARD TABLE OF tfc_instance, "#EC NEEDED it_inst_hdr TYPE STANDARD TABLE OF tfc_inst_hdr, "#EC NEEDED it_inst_item TYPE STANDARD TABLE OF tfc_inst_item, "#EC NEEDED it_inst_org TYPE STANDARD TABLE OF tfc_inst_org, "#EC NEEDED it_inst_org2 TYPE STANDARD TABLE OF tfc_inst_org, "#EC NEEDED it_outputsummary TYPE STANDARD TABLE OF ty_outputsummary, "#EC NEEDED it_outputdetail TYPE STANDARD TABLE OF ty_outputdetail, "#EC NEEDED it_outputdetail2 TYPE STANDARD TABLE OF ty_outputdetail, "#EC NEEDED l_wa_instance TYPE tfc_instance, "#EC NEEDED l_wa_inst_hdr TYPE tfc_inst_hdr, "#EC NEEDED l_wa_inst_item TYPE tfc_inst_item, "#EC NEEDED l_wa_inst_org TYPE tfc_inst_org, "#EC NEEDED l_wa_outputsummary TYPE ty_outputsummary, "#EC NEEDED l_wa_outputdetail TYPE ty_outputdetail, "#EC NEEDED l_wa_outputdetail2 TYPE ty_outputdetail, "#EC NEEDED ld_item_text_abh TYPE tfc_folder_text, "#EC NEEDED ld_can_start_ab TYPE char1, "#EC NEEDED ls_outputdetail TYPE smoutput, "#EC NEEDED o_table TYPE REF TO cl_salv_table, "#EC NEEDED o_functions TYPE REF TO cl_salv_functions, "#EC NEEDED o_columns TYPE REF TO cl_salv_columns_table, "#EC NEEDED o_column TYPE REF TO cl_salv_column_table, "#EC NEEDED o_levents TYPE REF TO lcl_handle_events, "#EC NEEDED o_cevents TYPE REF TO cl_salv_events_table, "#EC NEEDED o_salv_msg TYPE REF TO cx_salv_msg, "#EC NEEDED o_salv_not_found TYPE REF TO cx_salv_not_found, "#EC NEEDED o_salv_existing TYPE REF TO cx_salv_existing, "#EC NEEDED o_salv_data_error TYPE REF TO cx_salv_data_error, "#EC NEEDED o_layout TYPE REF TO cl_salv_layout. "#EC NEEDED ************************************************************************ * SELECTION SCREEN * ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01. "Text-s01 Contains 'Selection Parameters' SELECT-OPTIONS : s_taskl FOR v_tasklist OBLIGATORY, "Task List s_keyd FOR v_keydate OBLIGATORY. "Key Date SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-s02. "Text-s02 Contains 'Processing Options' SELECT-OPTIONS : s_task FOR v_task, "Task name s_exeusr FOR v_exeusr, "Processsor s_resusr FOR v_resusr, "Person Responsible s_agrnam FOR v_agrnam. "Role SELECTION-SCREEN END OF BLOCK b2. SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-s03. "Text-s03 Contains 'Output Layouts' PARAMETERS: p_layou1 TYPE disvariant-variant, "Summary Layout specifications p_layou2 TYPE disvariant-variant. "Detailed Layout specifications SELECTION-SCREEN END OF BLOCK b3. ************************************************************************ * INITIALIZATION * ************************************************************************ INITIALIZATION. *---------------------------------------------------------------------* * AT-SELECTION-SCREEN-OUTPUT * *---------------------------------------------------------------------* AT SELECTION-SCREEN OUTPUT. *----------------------------------------------------------------------* * AT SELECTION SCREEN ON * *----------------------------------------------------------------------* *--- Validation of selection screen fields---* AT SELECTION-SCREEN ON p_layou1. IF NOT p_layou1 IS INITIAL. PERFORM alv_variant_existence_check USING sy-repid p_layou1 'X' . ENDIF. *--->Existence Check for Display Variant AT SELECTION-SCREEN ON p_layou2. IF NOT p_layou2 IS INITIAL. PERFORM alv_variant_existence_check USING sy-repid p_layou2 'X' . ENDIF. *--->Display Variant - Value-Request AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layou1. wa_variant = sy-repid. PERFORM alv_variant_f4 CHANGING p_layou1 wa_variant. *--->Display Variant - Value-Request AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_layou2. wa_variant = sy-repid. PERFORM alv_variant_f4 CHANGING p_layou2 wa_variant. *----------------------------------------------------------------------* * START-OF-SELECTION *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM fetch_data. PERFORM fill_detail_data. PERFORM summarize_data. IF it_outputsummary IS NOT INITIAL. PERFORM display_output. ELSE. MESSAGE i359(f4). "No data found. LEAVE LIST-PROCESSING. ENDIF. *&---------------------------------------------------------------------* *& Form FETCH_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM fetch_data. SELECT * FROM tfc_instance INTO TABLE it_instance WHERE profile IN s_taskl AND ddate IN s_keyd. IF sy-subrc = 0. SELECT * FROM tfc_inst_hdr INTO TABLE it_inst_hdr FOR ALL ENTRIES IN it_instance WHERE profile EQ it_instance-profile AND instance EQ it_instance-instance. IF sy-subrc = 0. SELECT * FROM tfc_inst_item INTO TABLE it_inst_item FOR ALL ENTRIES IN it_instance WHERE profile EQ it_instance-profile AND instance EQ it_instance-instance AND text IN s_task AND exe_usr IN s_exeusr AND res_usr IN s_resusr AND agr_name IN s_agrnam. IF sy-subrc = 0. SELECT * FROM tfc_inst_org INTO TABLE it_inst_org FOR ALL ENTRIES IN it_instance WHERE profile EQ it_instance-profile AND instance EQ it_instance-instance AND type NE 'MANDT'. IF sy-subrc = 0. LOOP AT it_inst_org INTO l_wa_inst_org. CONDENSE l_wa_inst_org-org_id. APPEND l_wa_inst_org TO it_inst_org2. CLEAR l_wa_inst_org. ENDLOOP. ENDIF. ENDIF. ENDIF. ENDIF. ENDFORM. "FETCH_DATA *&---------------------------------------------------------------------* *& Form FILL_DETAIL_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM fill_detail_data. DATA: l_it_inst_item TYPE STANDARD TABLE OF tfc_inst_item, l_it_inst_org TYPE STANDARD TABLE OF tfc_inst_org, l_fstatus TYPE char20. LOOP AT it_instance INTO l_wa_instance. READ TABLE it_inst_hdr INTO l_wa_inst_hdr WITH KEY profile = l_wa_instance-profile instance = l_wa_instance-instance. IF sy-subrc = 0. CLEAR l_fstatus. IF l_wa_inst_hdr-ready IS INITIAL. l_fstatus = 'NOT RELEASED' . ELSEIF l_wa_inst_hdr-ready EQ 'X'. l_fstatus = 'RELEASED' . ELSEIF l_wa_inst_hdr-ready EQ 'A'. l_fstatus = 'ACTIVE' . ELSEIF l_wa_inst_hdr-ready EQ 'F'. l_fstatus = 'FINISHED' . ENDIF. ENDIF. REFRESH l_it_inst_item. l_it_inst_item[] = it_inst_item[]. SORT l_it_inst_item BY profile instance node item. DELETE l_it_inst_item[] WHERE profile NE l_wa_instance-profile. DELETE l_it_inst_item[] WHERE instance NE l_wa_instance-instance. REFRESH l_it_inst_org. l_it_inst_org[] = it_inst_org2[]. SORT l_it_inst_org BY profile instance org_id org_pid. DELETE l_it_inst_org[] WHERE profile NE l_wa_instance-profile. DELETE l_it_inst_org[] WHERE instance NE l_wa_instance-instance. LOOP AT l_it_inst_item INTO l_wa_inst_item. CLEAR l_wa_outputdetail. l_wa_outputdetail-profile = l_wa_instance-profile. l_wa_outputdetail-keydate = l_wa_instance-ddate. l_wa_outputdetail-fstatus = l_fstatus. IF l_wa_inst_item-kind = 0. l_wa_outputdetail-type = 'TASK'. ELSEIF l_wa_inst_item-kind = 1. l_wa_outputdetail-type = 'FLOW DEFINITION'. ELSEIF l_wa_inst_item-kind = 2. l_wa_outputdetail-type = 'TRANSACTION'. ELSEIF l_wa_inst_item-kind = 3. l_wa_outputdetail-type = 'NOTES'. ELSEIF l_wa_inst_item-kind = 4. l_wa_outputdetail-type = 'PROGRAM'. ELSEIF l_wa_inst_item-kind = 5. l_wa_outputdetail-type = 'REMOTE TASK'. ENDIF. l_wa_outputdetail-report = l_wa_inst_item-report. l_wa_outputdetail-variante = l_wa_inst_item-variante. l_wa_outputdetail-transact = l_wa_inst_item-transact. l_wa_outputdetail-sequence = l_wa_inst_item-sequence. l_wa_outputdetail-text = l_wa_inst_item-text. l_wa_outputdetail-exe_usr = l_wa_inst_item-exe_usr. l_wa_outputdetail-res_usr = l_wa_inst_item-res_usr. l_wa_outputdetail-agr_name = l_wa_inst_item-agr_name. CALL METHOD c_utils=>get_item_status EXPORTING is_item = l_wa_inst_item IMPORTING ed_checked_task_name = ld_item_text_abh CHANGING cd_can_start = ld_can_start_ab cs_output = ls_outputdetail. l_wa_outputdetail-status = ls_outputdetail-aplstat_text. l_wa_outputdetail-locked = l_wa_inst_item-locked. CLEAR: l_wa_inst_org, v_node, v_node2. PERFORM field_conversion USING l_wa_inst_item-node 'X' CHANGING v_node. PERFORM field_conversion USING l_wa_inst_item-node ' ' CHANGING v_node2. DO 10 TIMES. READ TABLE l_it_inst_org INTO l_wa_inst_org WITH KEY org_id = v_node. IF sy-subrc = 0. CONCATENATE l_wa_inst_org-text '/' l_wa_outputdetail-path INTO l_wa_outputdetail-path. PERFORM field_conversion USING l_wa_inst_org-org_pid 'X' CHANGING v_node. PERFORM field_conversion USING l_wa_inst_org-org_pid ' ' CHANGING v_node2. ELSE. READ TABLE l_it_inst_org INTO l_wa_inst_org WITH KEY org_id = v_node2. IF sy-subrc = 0. CONCATENATE l_wa_inst_org-text '/' l_wa_outputdetail-path INTO l_wa_outputdetail-path. PERFORM field_conversion USING l_wa_inst_org-org_pid 'X' CHANGING v_node. PERFORM field_conversion USING l_wa_inst_org-org_pid ' ' CHANGING v_node2. ELSE. CLEAR: v_node, v_node2. ENDIF. ENDIF. ENDDO. l_wa_outputdetail-count = 1 . APPEND l_wa_outputdetail TO it_outputdetail. CLEAR: l_wa_inst_item, l_wa_outputdetail. ENDLOOP. ENDLOOP. ENDFORM. " FILL_DETAIL_DATA *&---------------------------------------------------------------------* *& Form SUMMARIZE__DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM summarize_data. DATA: l_wa_profile TYPE tfc_profile, l_wa_keydate TYPE ddate. IF it_outputdetail[] IS NOT INITIAL. LOOP AT it_outputdetail INTO l_wa_outputdetail. CLEAR l_wa_outputdetail-path. CLEAR l_wa_outputdetail-type. CLEAR l_wa_outputdetail-text. CLEAR l_wa_outputdetail-report. CLEAR l_wa_outputdetail-variante. CLEAR l_wa_outputdetail-transact. CLEAR l_wa_outputdetail-sequence. CLEAR l_wa_outputdetail-exe_usr. CLEAR l_wa_outputdetail-res_usr. CLEAR l_wa_outputdetail-agr_name. CLEAR l_wa_outputdetail-locked. COLLECT l_wa_outputdetail INTO it_outputdetail2. CLEAR: l_wa_outputdetail. ENDLOOP. ENDIF. LOOP AT it_outputdetail2 INTO l_wa_outputdetail2. IF ( l_wa_profile IS NOT INITIAL AND l_wa_profile NE l_wa_outputdetail2-profile ) OR ( l_wa_profile EQ l_wa_outputdetail2-profile AND l_wa_keydate NE l_wa_outputdetail2-keydate ) . APPEND l_wa_outputsummary TO it_outputsummary. CLEAR l_wa_outputsummary. ENDIF. l_wa_outputsummary-profile = l_wa_outputdetail2-profile. l_wa_outputsummary-keydate = l_wa_outputdetail2-keydate. l_wa_outputsummary-fstatus = l_wa_outputdetail2-fstatus. l_wa_outputsummary-total = l_wa_outputsummary-total + l_wa_outputdetail2-count. IF l_wa_outputdetail2-status EQ c_checked. l_wa_outputsummary-checked = l_wa_outputdetail2-count. ELSEIF l_wa_outputdetail2-status EQ c_compl. l_wa_outputsummary-compl = l_wa_outputdetail2-count. ELSEIF l_wa_outputdetail2-status EQ c_complww. l_wa_outputsummary-complww = l_wa_outputdetail2-count. ELSEIF l_wa_outputdetail2-status EQ c_wip. l_wa_outputsummary-wip = l_wa_outputdetail2-count. ELSEIF l_wa_outputdetail2-status EQ c_complwe. l_wa_outputsummary-complwe = l_wa_outputdetail2-count. ELSEIF l_wa_outputdetail2-status EQ c_notstart. l_wa_outputsummary-notstart = l_wa_outputdetail2-count. ELSE. l_wa_outputsummary-unknown = l_wa_outputsummary-unknown + l_wa_outputdetail2-count. ENDIF. l_wa_profile = l_wa_outputdetail2-profile. l_wa_keydate = l_wa_outputdetail2-keydate. CLEAR: l_wa_outputdetail2. ENDLOOP. IF l_wa_outputsummary-profile IS NOT INITIAL. APPEND l_wa_outputsummary TO it_outputsummary. CLEAR l_wa_outputsummary. ENDIF. ENDFORM. " SUMMARIZE_DATA *&---------------------------------------------------------------------* *& Form DISPLAY_OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM display_output. DATA: l_wa_key TYPE salv_s_layout_key, l_v_field TYPE lvc_fname, l_v_color TYPE i, l_wa_color TYPE lvc_s_colo. TRY . cl_salv_table=>factory( IMPORTING r_salv_table = o_table CHANGING t_table = it_outputsummary ). o_functions = o_table->get_functions( ). o_functions->set_all( abap_true ). * *-->For Layout Settings o_layout = o_table->get_layout( ). l_wa_key-report = sy-repid. o_layout->set_key( l_wa_key ). o_layout->set_save_restriction( cl_salv_layout=>restrict_none ). o_columns = o_table->get_columns( ). o_layout->set_initial_layout( p_layou1 ). *--> Reproting Category. PERFORM f_alv_atrr USING 'PROFILE' text-o01 text-o01 text-o01 '12 '. PERFORM f_alv_atrr USING 'KEYDATE' text-o02 text-o02 text-o02 '12 '. PERFORM f_alv_atrr USING 'FSTATUS' text-o03 text-o04 text-o04 '20 '. PERFORM f_alv_atrr USING 'TOTAL' text-o05 text-o05 text-o05 '10 '. PERFORM f_alv_atrr USING 'CHECKED' text-o06 text-o06 text-o06 '10 '. PERFORM f_alv_atrr USING 'COMPL' text-o07 text-o07 text-o07 '10 '. PERFORM f_alv_atrr USING 'COMPLWW' text-o08 text-o08 text-o08 '10 '. PERFORM f_alv_atrr USING 'WIP' text-o09 text-o09 text-o09 '10 '. PERFORM f_alv_atrr USING 'COMPLWE' text-o10 text-o10 text-o10 '10 '. PERFORM f_alv_atrr USING 'UNKNOWN' text-o11 text-o11 text-o11 '10 '. PERFORM f_alv_atrr USING 'NOTSTART' text-o12 text-o12 text-o12 '10 '. *-->Coloring various columns CLEAR : l_v_field, l_wa_color, l_v_color. l_v_color = '4'. l_v_field = 'PROFILE'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '4'. l_v_field = 'KEYDATE'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '4'. l_v_field = 'FSTATUS'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '7'. l_v_field = 'TOTAL'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '5'. l_v_field = 'CHECKED'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '5'. l_v_field = 'COMPL'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '3'. l_v_field = 'COMPLWW'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '3'. l_v_field = 'WIP'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '6'. l_v_field = 'COMPLWE'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '6'. l_v_field = 'UNKNOWN'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '2'. l_v_field = 'NOTSTART'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. * Set the HotSpot for Columns PERFORM col_hotspot USING 'PROFILE'. PERFORM col_hotspot USING 'KEYDATE'. PERFORM col_hotspot USING 'FSTATUS'. PERFORM col_hotspot USING 'TOTAL'. PERFORM col_hotspot USING 'CHECKED'. PERFORM col_hotspot USING 'COMPL'. PERFORM col_hotspot USING 'COMPLWW'. PERFORM col_hotspot USING 'WIP'. PERFORM col_hotspot USING 'COMPLWE'. PERFORM col_hotspot USING 'UNKNOWN'. PERFORM col_hotspot USING 'NOTSTART'. * To record the event on the screen. o_cevents = o_table->get_event( ). CREATE OBJECT o_levents. * Button Creation SET HANDLER o_levents->on_link_click FOR o_cevents. *-->In case of error while displaying ALV , catch all Exceptions *--->To Catch Exceptions CATCH cx_salv_msg INTO o_salv_msg. MESSAGE e999 WITH o_salv_msg->msgv1 o_salv_msg->msgv2 o_salv_msg->msgv3 o_salv_msg->msgv4. CATCH cx_salv_not_found INTO o_salv_not_found. MESSAGE e999 WITH o_salv_not_found->object o_salv_not_found->textid o_salv_not_found->key o_salv_not_found->method. CATCH cx_salv_data_error INTO o_salv_data_error. MESSAGE e999 WITH o_salv_data_error->object o_salv_data_error->textid o_salv_data_error->key o_salv_data_error->method. CATCH cx_salv_existing INTO o_salv_existing. MESSAGE e999 WITH o_salv_existing->object o_salv_existing->textid o_salv_existing->key o_salv_existing->method. ENDTRY. *-->Display an ALV o_table->display( ). ENDFORM. " DISPLAY_OUTPUT * Implementation of class used to implement the event handling CLASS lcl_handle_events IMPLEMENTATION. METHOD on_link_click. IF row IS NOT INITIAL. PERFORM display_output_detail USING row column . ENDIF. ENDMETHOD. "on_link_click METHOD on_link_click1. IF row IS NOT INITIAL. PERFORM disp_object USING row column . ENDIF. ENDMETHOD. "on_link_click1 ENDCLASS. "lcl_handle_events IMPLEMENTATION *&---------------------------------------------------------------------* *& Form DISPLAY_output_detail *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* * -->P_ROW text * -->P_COLUMN text *----------------------------------------------------------------------* FORM display_output_detail USING fp_row TYPE salv_de_row fp_column TYPE salv_de_column. DATA: l_wa_key TYPE salv_s_layout_key, l_v_field TYPE lvc_fname, l_v_color TYPE i, l_wa_color TYPE lvc_s_colo, l_para_value TYPE as4text. IF fp_column EQ 'PROFILE' OR fp_column EQ 'KEYDATE' OR fp_column EQ 'FSTATUS' . CLEAR: l_wa_outputdetail2, l_para_value. READ TABLE it_outputsummary INTO l_wa_outputsummary INDEX fp_row. IF l_wa_outputsummary-keydate IS NOT INITIAL. CONCATENATE l_wa_outputsummary-profile '$' l_wa_outputsummary-keydate '$1' INTO l_para_value. SET PARAMETER ID 'CLOCO_TASKLIST' FIELD l_para_value. IF l_wa_outputsummary-fstatus = 'NOT RELEASED' . CALL TRANSACTION 'CLOCOC'. ELSE. CALL TRANSACTION 'CLOCO'. ENDIF. ENDIF. ELSE. REFRESH it_outputdetail2. it_outputdetail2[] = it_outputdetail[]. SORT it_outputdetail2 BY profile keydate status. CLEAR: l_wa_outputsummary. READ TABLE it_outputsummary INTO l_wa_outputsummary INDEX fp_row. DELETE it_outputdetail2[] WHERE profile NE l_wa_outputsummary-profile. DELETE it_outputdetail2[] WHERE keydate NE l_wa_outputsummary-keydate. IF fp_column EQ 'CHECKED'. DELETE it_outputdetail2[] WHERE status NE c_checked. ELSEIF fp_column EQ 'COMPL'. DELETE it_outputdetail2[] WHERE status NE c_compl. ELSEIF fp_column EQ 'COMPLWW'. DELETE it_outputdetail2[] WHERE status NE c_complww. ELSEIF fp_column EQ 'COMPLWE'. DELETE it_outputdetail2[] WHERE status NE c_complwe. ELSEIF fp_column EQ 'WIP'. DELETE it_outputdetail2[] WHERE status NE c_wip. ELSEIF fp_column EQ 'NOTSTART'. DELETE it_outputdetail2[] WHERE status NE c_notstart. ELSEIF fp_column EQ 'UNKNOWN'. DELETE it_outputdetail2[] WHERE status EQ c_checked. DELETE it_outputdetail2[] WHERE status EQ c_compl. DELETE it_outputdetail2[] WHERE status EQ c_complww. DELETE it_outputdetail2[] WHERE status EQ c_complwe. DELETE it_outputdetail2[] WHERE status EQ c_wip. DELETE it_outputdetail2[] WHERE status EQ c_notstart. ENDIF. IF it_outputdetail2[] IS INITIAL. MESSAGE i359(f4). "No data found RETURN. ENDIF. TRY . cl_salv_table=>factory( IMPORTING r_salv_table = o_table CHANGING t_table = it_outputdetail2 ). o_functions = o_table->get_functions( ). o_functions->set_all( abap_true ). * *-->For Layout Settings o_layout = o_table->get_layout( ). l_wa_key-report = sy-repid. o_layout->set_key( l_wa_key ). o_layout->set_save_restriction( cl_salv_layout=>restrict_none ). o_columns = o_table->get_columns( ). o_layout->set_initial_layout( p_layou2 ). *--> Reproting Category. PERFORM f_alv_atrr USING 'PROFILE' text-o01 text-o01 text-o01 '12 '. PERFORM f_alv_atrr USING 'KEYDATE' text-o02 text-o02 text-o02 '12 '. PERFORM f_alv_atrr USING 'FSTATUS' text-o03 text-o04 text-o04 '20 '. PERFORM f_alv_atrr USING 'PATH' text-o13 text-o14 text-o14 '50 '. PERFORM f_alv_atrr USING 'TYPE' text-o15 text-o15 text-o15 '15 '. PERFORM f_alv_atrr USING 'TEXT' text-o16 text-o17 text-o17 '50 '. PERFORM f_alv_atrr USING 'REPORT' text-o18 text-o18 text-o18 '15 '. PERFORM f_alv_atrr USING 'VARIANTE' text-o19 text-o19 text-o19 '15 '. PERFORM f_alv_atrr USING 'TRANSACT' text-o20 text-o20 text-o20 '20 '. PERFORM f_alv_atrr USING 'SEQUENCE' text-o21 text-o21 text-o21 '10 '. PERFORM f_alv_atrr USING 'EXE_USR' text-o22 text-o22 text-o22 '10 '. PERFORM f_alv_atrr USING 'RES_USR' text-o23 text-o24 text-o24 '10 '. PERFORM f_alv_atrr USING 'AGR_NAME' text-o25 text-o25 text-o25 '20 '. PERFORM f_alv_atrr USING 'STATUS' text-o26 text-o26 text-o26 '30 '. PERFORM f_alv_atrr USING 'LOCKED' text-o27 text-o27 text-o27 '5 '. PERFORM f_alv_atrr USING 'COUNT' text-o28 text-o28 text-o28 '10'. *-->Coloring various columns CLEAR : l_v_field, l_wa_color, l_v_color. l_v_color = '4'. l_v_field = 'PROFILE'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '4'. l_v_field = 'KEYDATE'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. l_v_color = '4'. l_v_field = 'FSTATUS'. PERFORM color_column USING l_v_color l_v_field CHANGING l_wa_color. * Set the HotSpot for Columns PERFORM col_hotspot USING 'PROFILE'. PERFORM col_hotspot USING 'KEYDATE'. PERFORM col_hotspot USING 'FSTATUS'. ** To record the event on the screen. o_cevents = o_table->get_event( ). CREATE OBJECT o_levents. * Button Creation SET HANDLER o_levents->on_link_click1 FOR o_cevents. *-->In case of error while displaying ALV , catch all Exceptions *--->To Catch Exceptions CATCH cx_salv_msg INTO o_salv_msg. MESSAGE e999 WITH o_salv_msg->msgv1 o_salv_msg->msgv2 o_salv_msg->msgv3 o_salv_msg->msgv4. CATCH cx_salv_not_found INTO o_salv_not_found. MESSAGE e999 WITH o_salv_not_found->object o_salv_not_found->textid o_salv_not_found->key o_salv_not_found->method. CATCH cx_salv_data_error INTO o_salv_data_error. MESSAGE e999 WITH o_salv_data_error->object o_salv_data_error->textid o_salv_data_error->key o_salv_data_error->method. CATCH cx_salv_existing INTO o_salv_existing. MESSAGE e999 WITH o_salv_existing->object o_salv_existing->textid o_salv_existing->key o_salv_existing->method. ENDTRY. *-->Display an ALV o_table->display( ). ENDIF. ENDFORM. " DISPLAY_output_detail *&---------------------------------------------------------------------* *& Form DISP_OBJECT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_ROW text * -->P_COLUMN text *----------------------------------------------------------------------* FORM disp_object USING fp_row TYPE salv_de_row fp_column TYPE salv_de_column. DATA: l_para_value TYPE as4text. IF fp_column EQ 'PROFILE' OR fp_column EQ 'KEYDATE' OR fp_column EQ 'FSTATUS'. CLEAR: l_wa_outputdetail2, l_para_value. READ TABLE it_outputdetail2 INTO l_wa_outputdetail2 INDEX fp_row. IF l_wa_outputdetail2-keydate IS NOT INITIAL. CONCATENATE l_wa_outputdetail2-profile '$' l_wa_outputdetail2-keydate '$1' INTO l_para_value. IF l_wa_outputdetail2-fstatus = 'NOT RELEASED' . SET PARAMETER ID 'CLOCO_TASKLIST' FIELD l_para_value. CALL TRANSACTION 'CLOCOC'. ELSE. SET PARAMETER ID 'CLOCO_TASKLIST' FIELD l_para_value. CALL TRANSACTION 'CLOCO'. ENDIF. ENDIF. ENDIF. ENDFORM. " DISP_OBJECT *&---------------------------------------------------------------------* *& Form FIELD_CONVERSION *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* *----------------------------------------------------------------------* FORM field_conversion USING fp_l_input TYPE any fp_l_format TYPE any CHANGING fp_l_output TYPE any. IF fp_l_format = 'X'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = fp_l_input IMPORTING output = fp_l_output. ELSE. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = fp_l_input IMPORTING output = fp_l_output. ENDIF. ENDFORM. "field_conversion *&---------------------------------------------------------------------* *& Form F_ALV_ATRR *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_0454 text * -->P_TEXT_002 text * -->P_TEXT_002 text * -->P_TEXT_002 text * -->P_0458 text *----------------------------------------------------------------------* FORM f_alv_atrr USING fp_text_f TYPE any "lvc_fname fp_text_s TYPE any "SCRTEXT_s fp_text_m TYPE any "scrtext_m fp_text_l TYPE any "scrtext_l fp_l_c_len TYPE any. "lvc_outlen. *--- Local data declaration DATA: l_v_field TYPE lvc_fname, l_v_name_l TYPE scrtext_l, l_v_name_m TYPE scrtext_m, l_v_name_s TYPE scrtext_s, l_c_len TYPE lvc_outlen. l_v_field = fp_text_f. l_v_name_s = fp_text_s. l_v_name_m = fp_text_m. l_v_name_l = fp_text_l. l_c_len = fp_l_c_len. *--- To set Long , Medium and short text for columns and column length. TRY. o_columns = o_table->get_columns( ). o_column ?= o_columns->get_column( l_v_field ). o_column->set_short_text( l_v_name_s ) . o_column->set_medium_text( l_v_name_m ) . o_column->set_long_text( l_v_name_l ) . o_column->set_tooltip( l_v_name_l ). o_column->set_output_length( l_c_len ). "default length CATCH cx_salv_not_found INTO o_salv_not_found. MESSAGE e999 WITH o_salv_not_found->object o_salv_not_found->textid o_salv_not_found->key o_salv_not_found->method. ENDTRY. ENDFORM. " F_ALV_ATRR *&---------------------------------------------------------------------* *& Form COLOR_COLUMN *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_L_V_COLOR text * -->P_L_V_FIELD text * <--P_L_WA_COLOR text *----------------------------------------------------------------------* FORM color_column USING fp_l_v_color TYPE any fp_l_v_field TYPE any CHANGING fp_l_wa_color TYPE lvc_s_colo. TRY . o_column ?= o_columns->get_column( fp_l_v_field ). fp_l_wa_color-col = fp_l_v_color. fp_l_wa_color-int = '1'. fp_l_wa_color-inv = '0'. o_column->set_color( fp_l_wa_color ). CATCH cx_salv_data_error INTO o_salv_data_error. MESSAGE e999 WITH o_salv_existing->object o_salv_existing->textid o_salv_existing->key o_salv_existing->method. CATCH cx_salv_not_found INTO o_salv_not_found. MESSAGE e999 WITH o_salv_existing->object o_salv_existing->textid o_salv_existing->key o_salv_existing->method. ENDTRY. ENDFORM. " COLOR_COLUMN *&---------------------------------------------------------------------* *& Form ALV_VARIANT_EXISTENCE_CHECK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_SY_REPID text * -->P_P_LAYOU1 text *----------------------------------------------------------------------* FORM alv_variant_existence_check USING fp_repid TYPE sy-repid fp_vari TYPE slis_vari fp_message TYPE char1. DATA: l_v_variant TYPE disvariant. l_v_variant-report = fp_repid. l_v_variant-variant = fp_vari. CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = 'A' CHANGING cs_variant = l_v_variant EXCEPTIONS wrong_input = 1 not_found = 2 program_error = 3 OTHERS = 4. IF sy-subrc = 2 AND fp_message = 'X'. MESSAGE e054(f4) WITH fp_vari. "No variant found ENDIF. ENDFORM. " ALV_VARIANT_EXISTENCE_CHECK *&---------------------------------------------------------------------* *& Form ALV_VARIANT_F4 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_P_LAYOU1 text * <--P_WA_VARIANT text *----------------------------------------------------------------------* FORM alv_variant_f4 CHANGING fp_vari TYPE disvariant-variant fp_wa_variant TYPE disvariant. DATA l_v_exit TYPE char1. CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = fp_wa_variant i_save = 'A' IMPORTING e_exit = l_v_exit es_variant = fp_wa_variant EXCEPTIONS not_found = 2. IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF l_v_exit IS INITIAL. fp_vari = fp_wa_variant-variant. ENDIF. ENDIF. ENDFORM. " ALV_VARIANT_F4 *&---------------------------------------------------------------------* *& Form COL_HOTSPOT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM col_hotspot USING fp_text_f TYPE any. "lvc_fname *--- Local data declaration DATA: l_v_field TYPE lvc_fname. l_v_field = fp_text_f. *--- To set hotspot for PO Column. TRY. o_columns = o_table->get_columns( ). o_column ?= o_columns->get_column( l_v_field ). CALL METHOD o_column->set_cell_type EXPORTING value = if_salv_c_cell_type=>hotspot. CATCH cx_salv_not_found INTO o_salv_not_found. "Column was not found. MESSAGE e999 WITH o_salv_not_found->object o_salv_not_found->textid o_salv_not_found->key o_salv_not_found->method. ENDTRY. ENDFORM. " COL_HOTSPOT