Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *&---------------------------------------------------------------------*
- *& Report Z_YYY_DISPOSAL_REQ_INQ
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- *----------------------------------------------------------------------*
- * Author : <Yara Mohamed/Developer user ID>
- * Creation Date : <09-03-2017>
- * Transaction : <Transaction code if attached>
- * Technical design: <Assets Disposal Request Inquiry Screen>
- * Description : < Show Disposal Request Information>
- *----------------------------------------------------------------------*
- REPORT Z_YYY_DISPOSAL_REQ_INQ.
- TABLES : ZFI_DISPOSAL_REQ , ZFI_LOOKUP.
- *---------------------------------------------------------------------*
- * W O R K A R E A S *
- *---------------------------------------------------------------------*
- *Internal table which will be used in filling the alv by returning the data from the fm inquiry.
- *TYPES : BEGIN OF IT_req,
- * zzsr_number TYPE ZFI_DISPOSAL_REQ-ZZSR_NUMBER,
- * zzcompany_code TYPE ZFI_DISPOSAL_REQ-ZZCOMPANY_CODE,
- * zzcost_center TYPE ZFI_DISPOSAL_REQ-ZZCOST_CENTER,
- * zzdate TYPE ZFI_DISPOSAL_REQ-ZZDATE,
- * s_zzdesc TYPE ZFI_LOOKUP-ZZDESC,
- * rs_zzdesc TYPE ZFI_LOOKUP-ZZDESC,
- * crea_user TYPE ZFI_DISPOSAL_REQ-CREA_USER,
- * crea_time TYPE ZFI_DISPOSAL_REQ-CREA_TIME,
- * chng_user TYPE ZFI_DISPOSAL_REQ-CHNG_USER,
- * chng_time TYPE ZFI_DISPOSAL_REQ-CHNG_TIME,
- *
- * END OF IT_req.
- *Internal Table & work area for it.
- DATA : it_reqs TYPE STANDARD TABLE OF ZFI_DISP_REQ_STRUCT,
- wa_reqs TYPE ZFI_DISP_REQ_STRUCT,
- WA_FIELDCAT TYPE LVC_S_FCAT,
- T_FIELDCAT TYPE LVC_T_FCAT.
- ********************************************************************************************************************************************************
- *Internal tables we will need for the search help filtering
- *Cost Center
- TYPES: BEGIN OF ty_req,
- cost_center TYPE ZFI_DISPOSAL_REQ-ZZCOST_CENTER,
- END OF ty_req.
- * Request Status & Service
- TYPES: BEGIN OF ty_lookup,
- code TYPE ZFI_LOOKUP-ZZCODE,
- END OF ty_lookup.
- DATA: gwa_req TYPE ty_req,
- gt_req TYPE TABLE OF ty_req,
- gwa_lookup TYPE ty_lookup,
- gt_lookup TYPE TABLE OF ty_lookup,
- gt_return TYPE TABLE OF ddshretval,
- gwa_return TYPE ddshretval,
- gwa_dynpfields TYPE dynpread,
- gt_dynpfields TYPE TABLE OF dynpread,
- gv_company_code TYPE ZFI_DISPOSAL_REQ-ZZCOMPANY_CODE,
- gv_type TYPE ZFI_LOOKUP-ZZTYPE.
- *Working area for the three tables we will need to work on .
- DATA: wa_req TYPE ZFI_DISPOSAL_REQ,
- wa_service TYPE ZFI_LOOKUP,
- wa_req_status TYPE ZFI_LOOKUP.
- ********************************************************************************************************************************************************
- * local data for the docking , gui_container , and the cl_salv
- DATA: lo_dock TYPE REF TO cl_gui_docking_container,
- lo_alv TYPE REF TO cl_gui_alv_grid.
- ********************************************************
- TYPES: BEGIN OF ts_data.
- INCLUDE STRUCTURE ZFI_DISP_REQ_STRUCT.
- TYPES: mod_type TYPE string. " type of modification (for protocol)
- TYPES: verified TYPE c. " flag for verification
- TYPES: celltab TYPE lvc_t_styl.
- TYPES: END OF ts_data.
- TYPES:
- tt_data TYPE STANDARD TABLE OF ts_data WITH NON-UNIQUE DEFAULT KEY.
- CLASS cl_event_handler DEFINITION DEFERRED.
- DATA:
- gt_data TYPE tt_data,
- go_grid TYPE REF TO cl_gui_alv_grid,
- go_cont TYPE REF TO cl_gui_custom_container,
- gt_fcat TYPE lvc_t_fcat,
- ok_code LIKE sy-ucomm,
- go_event_handler TYPE REF TO cl_event_handler.
- *----------------------------------------------------------------------*
- * CLASS cl_event_handler DEFINITION
- *----------------------------------------------------------------------*
- CLASS cl_event_handler DEFINITION.
- PUBLIC SECTION.
- CLASS-DATA:
- data_changed_error TYPE i, " error flag
- protocol_tab TYPE tt_data. " protocol of changes since last save
- METHODS handle_toolbar
- FOR EVENT toolbar OF cl_gui_alv_grid
- IMPORTING
- e_object
- e_interactive.
- METHODS handle_user_command
- FOR EVENT user_command OF cl_gui_alv_grid
- IMPORTING
- e_ucomm.
- METHODS handle_data_changed
- FOR EVENT data_changed OF cl_gui_alv_grid
- IMPORTING
- er_data_changed.
- METHODS protocol_add
- IMPORTING
- pi_tabix TYPE i
- er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
- ENDCLASS. "cl_event_handler DEFINITION
- *----------------------------------------------------------------------*
- * CLASS cl_event_handler IMPLEMENTATION
- *----------------------------------------------------------------------*
- CLASS cl_event_handler IMPLEMENTATION.
- *&---------------------------------------------------------------------*
- *& METHOD handle_toolbar
- *&---------------------------------------------------------------------*
- METHOD handle_toolbar.
- FIELD-SYMBOLS:
- <fs_button> TYPE stb_button.
- * replace the standard function 'check' with own one
- READ TABLE e_object->mt_toolbar ASSIGNING <fs_button>
- WITH KEY function = cl_gui_alv_grid=>mc_fc_check. " '&CHECK'.
- <fs_button>-function = 'CHECK'.
- ** deactivate the 'copy row' function
- ** (not necessary in the logic of this program)
- *
- * READ TABLE e_object->mt_toolbar ASSIGNING <fs_button>
- * WITH KEY function = cl_gui_alv_grid=>mc_fc_loc_copy_row. " '&LOCAL©_ROW'.
- * <fs_button>-disabled = 'X'.
- ENDMETHOD. "handle_toolbar
- *&---------------------------------------------------------------------*
- *& METHOD handle_user_command
- *&---------------------------------------------------------------------*
- METHOD handle_user_command.
- * force PAI processing with user function as ok_code
- cl_gui_cfw=>set_new_ok_code( e_ucomm ).
- ENDMETHOD. "handle_user_command
- *&---------------------------------------------------------------------*
- *& METHOD handle_data_changed
- *&---------------------------------------------------------------------*
- *& validate changes against duplicate keys and collect the protocol
- *& of the changes for further db update or transport of changes
- *&---------------------------------------------------------------------*
- METHOD handle_data_changed.
- DATA:
- ls_row TYPE lvc_s_moce,
- ls_cell TYPE lvc_s_modi,
- lt_data TYPE tt_data,
- ls_data TYPE ts_data,
- ls_data2 TYPE ts_data,
- lv_tabix TYPE i,
- lv_tabix2 TYPE i,
- lv_new TYPE i.
- FIELD-SYMBOLS:
- <ft_data> TYPE tt_data,
- <fs_cell> TYPE lvc_s_modi.
- ASSIGN er_data_changed->mp_mod_rows->* TO <ft_data>.
- * consider present error messages from standard data checks
- IF LINES( er_data_changed->mt_protocol ) = 0.
- data_changed_error = 0.
- ELSE.
- data_changed_error = 1.
- ENDIF.
- * 1. collect the deleted rows (no checks needed)
- LOOP AT er_data_changed->mt_deleted_rows INTO ls_row.
- READ TABLE gt_data INTO ls_data INDEX ls_row-row_id.
- ls_data-mod_type = 'DELETE'.
- APPEND ls_data TO protocol_tab.
- ENDLOOP.
- * 2. collect the 'old' changed rows (no changes on key fields)
- LOOP AT <ft_data> INTO ls_data
- WHERE verified = 'X'.
- ls_data-mod_type = 'UPDATE'.
- APPEND ls_data TO protocol_tab.
- ENDLOOP.
- * 3. check the new rows against the old, verified rows
- LOOP AT <ft_data> INTO ls_data
- WHERE verified = ''.
- lv_tabix = sy-tabix.
- ADD 1 TO lv_new.
- CHECK sy-subrc = 0.
- data_changed_error = 1.
- CALL METHOD protocol_add
- EXPORTING
- pi_tabix = lv_tabix
- er_data_changed = er_data_changed.
- ENDLOOP.
- * 4. check the new rows among themselves
- IF lv_new > 1.
- LOOP AT <ft_data> INTO ls_data
- WHERE verified = ''.
- lv_tabix = sy-tabix.
- LOOP AT <ft_data> INTO ls_data2
- WHERE verified = ''.
- lv_tabix2 = sy-tabix.
- CHECK lv_tabix2 <> lv_tabix.
- CALL METHOD protocol_add
- EXPORTING
- pi_tabix = lv_tabix
- er_data_changed = er_data_changed.
- CALL METHOD protocol_add
- EXPORTING
- pi_tabix = lv_tabix2
- er_data_changed = er_data_changed.
- ENDLOOP.
- ENDLOOP.
- ENDIF.
- * 5. last aktivities in event DATA_CHANGED
- LOOP AT <ft_data> INTO ls_data
- WHERE verified = ''.
- lv_tabix = sy-tabix.
- READ TABLE er_data_changed->mt_mod_cells INTO ls_cell WITH KEY tabix = sy-tabix.
- READ TABLE er_data_changed->mt_protocol TRANSPORTING NO FIELDS WITH KEY row_id = ls_cell-row_id.
- * if check against duplicate key was ok
- CHECK sy-subrc <> 0.
- * collect new rows
- ls_data-mod_type = 'INSERT'.
- APPEND ls_data TO protocol_tab.
- * Schl�ssel-Felder schliessen
- LOOP AT er_data_changed->mt_good_cells ASSIGNING <fs_cell>
- WHERE tabix = lv_tabix.
- READ TABLE gt_fcat TRANSPORTING NO FIELDS WITH KEY fieldname = <fs_cell>-fieldname
- key = 'X'.
- CHECK sy-subrc = 0.
- <fs_cell>-style = cl_gui_alv_grid=>mc_style_disabled.
- ENDLOOP.
- ENDLOOP.
- ** 6. activate the copied rows
- ** (not necessary in the logic of this program)
- *
- * DATA:
- * ls_cell TYPE lvc_s_modi.
- *
- * LOOP AT er_data_changed->mt_inserted_rows INTO ls_row.
- *
- * LOOP AT er_data_changed->mt_mod_cells INTO ls_cell
- * WHERE row_id = ls_row-row_id.
- *
- * CALL METHOD er_data_changed->modify_style
- * EXPORTING
- * i_row_id = ls_cell-row_id
- * i_fieldname = ls_cell-fieldname
- * i_style = cl_gui_alv_grid=>mc_style_enabled.
- * ENDLOOP.
- * ENDLOOP.
- ENDMETHOD. "handle_data_changed
- *&---------------------------------------------------------------------*
- *& METHOD protocol_add
- *&---------------------------------------------------------------------*
- METHOD protocol_add.
- DATA:
- ls_cell TYPE lvc_s_modi,
- ls_fcat TYPE lvc_s_fcat,
- lv_string TYPE string,
- lv_msgv1 TYPE symsgv,
- lv_msgv2 TYPE symsgv,
- ls_roid_front TYPE lvc_s_roid,
- lv_row_id TYPE i.
- LOOP AT er_data_changed->mt_mod_cells INTO ls_cell
- WHERE tabix = pi_tabix.
- * report only key fields
- READ TABLE gt_fcat INTO ls_fcat WITH KEY fieldname = ls_cell-fieldname.
- CHECK ls_fcat-key = 'X'.
- * report only once
- READ TABLE er_data_changed->mt_protocol TRANSPORTING NO FIELDS
- WITH KEY fieldname = ls_cell-fieldname
- row_id = ls_cell-row_id.
- CHECK sy-subrc <> 0.
- * map the row id between frontend and internal tables for the message
- READ TABLE er_data_changed->mt_roid_front INTO ls_roid_front
- WITH KEY row_id = ls_cell-row_id.
- lv_row_id = sy-tabix.
- lv_msgv1 = 'Row &1:'.
- lv_string = lv_row_id.
- REPLACE SUBSTRING '&1' IN lv_msgv1 WITH lv_string.
- lv_msgv2 = 'Duplicate key with value ''&1'''.
- lv_string = ls_cell-value.
- REPLACE SUBSTRING '&1' IN lv_msgv2 WITH lv_string.
- CALL METHOD er_data_changed->add_protocol_entry
- EXPORTING
- i_msgid = '0K'
- i_msgno = '000'
- i_msgty = 'E'
- i_msgv1 = lv_msgv1
- i_msgv2 = lv_msgv2
- i_fieldname = ls_cell-fieldname
- i_row_id = ls_cell-row_id. " pass the row id without mapping here
- ENDLOOP.
- ENDMETHOD. "protocol_add
- ENDCLASS. "cl_event_handler IMPLEMENTATION
- ********************************************************
- SELECTION-SCREEN BEGIN OF BLOCK SELECTION WITH FRAME TITLE text-001.
- *Company Code Default(1200)
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT (20) text-002 FOR FIELD COM_CODE .
- PARAMETERS : COM_CODE LIKE ZFI_DISPOSAL_REQ-ZZCOMPANY_CODE DEFAULT '1200'.
- SELECTION-SCREEN POSITION 35.
- *Cost Center - Search Help depending on the value for the company code
- SELECTION-SCREEN COMMENT (20) text-003 FOR FIELD COST_CNT .
- PARAMETERS : COST_CNT LIKE ZFI_DISPOSAL_REQ-ZZCOST_CENTER.
- SELECTION-SCREEN POSITION 70.
- SELECTION-SCREEN END OF LINE.
- *Serial Number
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT (20) text-004 FOR FIELD SER_NO .
- PARAMETERS : SER_NO LIKE ZFI_DISPOSAL_REQ-ZZSR_NUMBER.
- *SELECTION-SCREEN POSITION 10.
- *Service Type - Search Help
- SELECTION-SCREEN COMMENT (20) text-005 FOR FIELD SRV_TYPE .
- PARAMETERS : SRV_TYPE LIKE ZFI_LOOKUP-ZZCODE .
- SELECTION-SCREEN POSITION 70.
- PARAMETERS : SRV_DESC LIKE ZFI_LOOKUP-ZZDESC.
- SELECTION-SCREEN END OF LINE.
- *Date
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT (20) text-006 FOR FIELD DATE .
- PARAMETERS : DATE LIKE ZFI_DISPOSAL_REQ-ZZDATE.
- *SELECTION-SCREEN POSITION 35.
- *Request Status - Search Help
- SELECTION-SCREEN COMMENT (20) text-007 FOR FIELD REQ_STS .
- PARAMETERS : REQ_STS LIKE ZFI_LOOKUP-ZZCODE.
- SELECTION-SCREEN END OF LINE.
- SELECTION-SCREEN BEGIN OF LINE.
- PARAMETERS : REQ_DESC LIKE ZFI_LOOKUP-ZZDESC.
- *Search Button
- SELECTION-SCREEN PUSHBUTTON (10) BUT1 USER-COMMAND SEARCH.
- *Reset Button
- SELECTION-SCREEN PUSHBUTTON (10) BUT2 USER-COMMAND RESET.
- SELECTION-SCREEN END OF LINE.
- SELECTION-SCREEN END OF BLOCK SELECTION.
- *On Value Request for cost center - filter it depending on company code
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR COST_CNT.
- REFRESH gt_dynpfields.
- *Field i will filter upon
- gwa_dynpfields-fieldname = 'COM_CODE'.
- APPEND gwa_dynpfields TO gt_dynpfields.
- CALL FUNCTION 'DYNP_VALUES_READ'
- EXPORTING
- DYNAME = sy-repid
- DYNUMB = sy-dynnr
- TABLES
- DYNPFIELDS = gt_dynpfields
- EXCEPTIONS
- INVALID_ABAPWORKAREA = 1
- INVALID_DYNPROFIELD = 2
- INVALID_DYNPRONAME = 3
- INVALID_DYNPRONUMMER = 4
- INVALID_REQUEST = 5
- NO_FIELDDESCRIPTION = 6
- INVALID_PARAMETER = 7
- UNDEFIND_ERROR = 8
- DOUBLE_CONVERSION = 9
- STEPL_NOT_FOUND = 10
- OTHERS = 11
- .
- READ TABLE gt_dynpfields INTO gwa_dynpfields
- WITH KEY fieldname = 'COM_CODE'.
- *If there are no errors , assign the company code the value returned.
- IF SY-SUBRC = 0.
- gv_company_code = gwa_dynpfields-fieldvalue.
- ENDIF.
- *Select statement to get the cost center depending on the dynamic value for the company code & assign it to the table we created.
- SELECT DISTINCT ZZCOST_CENTER
- INTO TABLE gt_req
- FROM ZFI_DISPOSAL_REQ
- WHERE ZZCOMPANY_CODE = gv_company_code.
- *Get cost center search help values depending on the company code.
- CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
- EXPORTING
- RETFIELD = 'COST_CENTER'
- VALUE_ORG = 'S'
- TABLES
- VALUE_TAB = gt_req
- RETURN_TAB = gt_return
- EXCEPTIONS
- PARAMETER_ERROR = 1
- NO_VALUES_FOUND = 2
- OTHERS = 3
- .
- READ TABLE gt_return INTO gwa_return INDEX 1.
- *If there are no errors , assign the returned table to the cost_cnt selection paramter.
- IF SY-SUBRC = 0.
- COST_CNT = gwa_return-fieldval.
- ENDIF.
- *********************************************************************************************************************************************************
- *On Value Request for Request Status
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR REQ_STS.
- REFRESH gt_dynpfields.
- SELECT ZZCODE
- INTO TABLE gt_lookup
- FROM ZFI_LOOKUP
- WHERE ZZTYPE = '1'.
- CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
- EXPORTING
- RETFIELD = 'TYPE'
- VALUE_ORG = 'S'
- TABLES
- VALUE_TAB = gt_lookup
- RETURN_TAB = gt_return
- EXCEPTIONS
- PARAMETER_ERROR = 1
- NO_VALUES_FOUND = 2
- OTHERS = 3
- .
- READ TABLE gt_return INTO gwa_return INDEX 1.
- IF SY-SUBRC = 0.
- REQ_STS = gwa_return-fieldval.
- ENDIF.
- SELECT ZZDESC
- INTO REQ_DESC
- FROM ZFI_LOOKUP
- WHERE ZZCODE = REQ_STS.
- ENDSELECT.
- *********************************************************************************************************************************************************
- *On Value Request for Service Type
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR SRV_TYPE.
- REFRESH gt_dynpfields.
- SELECT ZZCODE
- INTO TABLE gt_lookup
- FROM ZFI_LOOKUP
- WHERE ZZTYPE = '2'.
- CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
- EXPORTING
- RETFIELD = 'TYPE'
- VALUE_ORG = 'S'
- TABLES
- VALUE_TAB = gt_lookup
- RETURN_TAB = gt_return
- EXCEPTIONS
- PARAMETER_ERROR = 1
- NO_VALUES_FOUND = 2
- OTHERS = 3
- .
- READ TABLE gt_return INTO gwa_return INDEX 1.
- IF SY-SUBRC = 0.
- SRV_TYPE = gwa_return-fieldval.
- ENDIF.
- SELECT ZZDESC
- INTO SRV_DESC
- FROM ZFI_LOOKUP
- WHERE ZZCODE = SRV_TYPE.
- ENDSELECT.
- *********************************************************************************************************************************************************
- ** Initialization
- INITIALIZATION.
- *Buttons Text
- BUT1 = 'Search'.
- BUT2 = 'Reset'.
- AT SELECTION-SCREEN OUTPUT.
- LOOP AT SCREEN.
- IF screen-NAME = 'COM_CODE'.
- SCREEN-REQUIRED = 1.
- SCREEN-INPUT = 0.
- MODIFY SCREEN.
- ENDIF.
- IF SCREEN-NAME = 'SRV_DESC'.
- SCREEN-REQUIRED = 1.
- SCREEN-INPUT = 0.
- MODIFY SCREEN.
- ENDIF.
- IF SCREEN-NAME = 'REQ_DESC'.
- SCREEN-REQUIRED = 1.
- SCREEN-INPUT = 0.
- MODIFY SCREEN.
- ENDIF.
- ENDLOOP.
- * MESSAGE ID 'ZALV_ERRORS' TYPE 'I' NUMBER '000' WITH 'Error1'.
- *
- * MESSAGE ID 'ZALV_ERRORS' TYPE 'I' NUMBER '000' WITH 'Error2'.
- *PERFORM DISPLAY_OUTPUT.
- *PERFORM CREATE_OBJECTS.
- AT SELECTION-SCREEN.
- *Handle on Button Click
- CASE sy-ucomm.
- when 'SEARCH'.
- PERFORM SEARCH CHANGING gt_data.
- PERFORM alv_init.
- PERFORM user_command.
- WHEN 'RESET'.
- PERFORM RESET.
- ENDCASE.
- *******************************************************************************
- *Create Fieldcat
- FORM DISPLAY_OUTPUT.
- PERFORM FILL_FIELDCAT USING :
- 'ZZDATE' 'gt_data' 'Date' ''.
- ENDFORM.
- *Fill them using parameters send to the function
- FORM FILL_FIELDCAT USING pv_field TYPE any
- pv_tabname TYPE any
- pv_coltext TYPE any
- pv_outputlen TYPE any.
- wa_fieldcat-fieldname = pv_field.
- wa_fieldcat-tabname = pv_tabname.
- wa_fieldcat-coltext = pv_coltext.
- APPEND wa_fieldcat TO t_fieldcat.
- CLEAR wa_fieldcat.
- ENDFORM.
- *Create all objects required (Docker,ALV,Grid)
- FORM create_objects.
- CHECK lo_dock is INITIAL.
- CREATE OBJECT lo_dock
- EXPORTING
- side = cl_gui_docking_container=>dock_at_bottom
- extension = 230
- caption = 'Assets Request Inquiry'
- 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. " IF sy-subrc <> 0.
- * To Create the Grid Instance
- CREATE OBJECT lo_alv
- EXPORTING
- i_parent = lo_dock
- EXCEPTIONS
- error_cntl_create = 1
- error_cntl_init = 2
- error_cntl_link = 3
- error_dp_create = 4
- OTHERS = 5.
- IF sy-subrc <> 0.
- MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
- WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
- ENDIF. " IF sy-subrc <> 0.
- * Formatted Output Table is Sent to Control
- MESSAGE ID 'ZALV_ERRORS' TYPE 'I' NUMBER '000' WITH wa_req_status-ZZCODE.
- CALL METHOD lo_alv->set_table_for_first_display
- CHANGING
- it_outtab = it_reqs
- it_fieldcatalog = t_fieldcat
- * it_sort =
- * it_filter =
- EXCEPTIONS
- invalid_parameter_combination = 1
- program_error = 2
- too_many_lines = 3
- OTHERS = 4
- .
- IF sy-subrc <> 0.
- MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
- WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
- ENDIF. " IF sy-subrc <> 0.
- ENDFORM.
- FORM SEARCH CHANGING pt_data TYPE tt_data.
- *Internal Table Fields that will be passed to FM
- wa_req-ZZCOMPANY_CODE = COM_CODE.
- wa_req-ZZCOST_CENTER = COST_CNT.
- wa_req-ZZSR_NUMBER = SER_NO.
- wa_req-ZZDATE = DATE.
- wa_req_status-ZZCODE = REQ_STS.
- wa_service-ZZCODE = SRV_TYPE.
- CALL FUNCTION 'Z_REQ_FN_INQUIRY'
- EXPORTING
- WA_REQ = WA_REQ
- WA_REQ_STATUS = WA_REQ_STATUS
- WA_SERVICE = WA_SERVICE
- TABLES
- QT_REQ = pt_data
- .
- *CALL METHOD lo_alv->refresh_table_display.
- *pt_data = it_reqs.
- PERFORM data_verified_set CHANGING gt_data.
- PERFORM DISPLAY_OUTPUT.
- *PERFORM fieldcat_create CHANGING gt_fcat.
- ENDFORM.
- *Clear All fields.
- FORM RESET.
- CLEAR : COST_CNT,
- SER_NO,
- DATE,
- REQ_STS,
- SRV_TYPE,
- it_reqs.
- CALL METHOD lo_alv->refresh_table_display.
- ENDFORM.
- FORM data_verified_set CHANGING pt_data TYPE tt_data.
- FIELD-SYMBOLS:
- <fs_data> TYPE ts_data.
- LOOP AT pt_data ASSIGNING <fs_data>
- WHERE verified = ''.
- <fs_data>-verified = 'X'.
- ENDLOOP.
- ENDFORM. "data_verified_set
- FORM fieldcat_create CHANGING pt_fcat TYPE lvc_t_fcat.
- FIELD-SYMBOLS:
- <fs_fcat> TYPE lvc_s_fcat.
- CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
- EXPORTING
- i_structure_name = 'ZFI_DISP_REQ_STRUCT'
- CHANGING
- ct_fieldcat = gt_fcat.
- LOOP AT gt_fcat ASSIGNING <fs_fcat>.
- <fs_fcat>-edit = 'X'.
- <fs_fcat>-key = ''.
- ENDLOOP.
- ENDFORM. "fieldcat_create
- FORM data_key_readonly_set USING pt_fcat TYPE lvc_t_fcat
- CHANGING pt_data TYPE tt_data.
- DATA:
- lt_style TYPE lvc_t_styl,
- ls_style TYPE lvc_s_styl,
- ls_fcat TYPE lvc_s_fcat.
- FIELD-SYMBOLS:
- <fs_data> TYPE ts_data.
- * the following construct works well for function 'copy row' (MC_FC_LOC_COPY_ROW)
- * (the style of the whole row is not copied and the key fields are open for change)
- * first deactivate complete row for edit
- ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
- INSERT ls_style INTO TABLE lt_style.
- LOOP AT pt_fcat INTO ls_fcat
- WHERE NOT key = 'X'.
- * then activate non-key fields
- ls_style-fieldname = ls_fcat-fieldname.
- ls_style-style = cl_gui_alv_grid=>mc_style_enabled.
- INSERT ls_style INTO TABLE lt_style.
- ENDLOOP.
- LOOP AT pt_data ASSIGNING <fs_data>.
- <fs_data>-celltab = lt_style.
- ENDLOOP.
- ENDFORM. "data_key_readonly_set
- FORM alv_init.
- DATA:
- ls_layout TYPE lvc_s_layo.
- IF go_cont IS INITIAL.
- SET PF-STATUS 'STAT_0100'.
- CREATE OBJECT go_cont
- EXPORTING
- container_name = 'CONT1_0100'.
- CREATE OBJECT go_grid
- EXPORTING
- i_parent = go_cont.
- CREATE OBJECT go_event_handler.
- * SET HANDLER go_event_handler->handle_toolbar FOR go_grid.
- SET HANDLER go_event_handler->handle_user_command FOR go_grid.
- SET HANDLER go_event_handler->handle_data_changed FOR go_grid.
- ls_layout-stylefname = 'CELLTAB'.
- CALL METHOD go_grid->set_table_for_first_display
- EXPORTING
- is_layout = ls_layout
- CHANGING
- it_fieldcatalog = t_fieldcat
- it_outtab = gt_data.
- ** if you need event DATA_CHANGED after function 'copy row'
- ** (not necessary in the logic of this program)
- *
- * CALL METHOD go_grid->register_edit_event
- * EXPORTING
- * i_event_id = cl_gui_alv_grid=>mc_evt_modified.
- ENDIF.
- ENDFORM. "alv_init
- *&---------------------------------------------------------------------*
- *& Form user_command
- *&---------------------------------------------------------------------*
- FORM user_command.
- CALL METHOD cl_gui_cfw=>dispatch.
- CASE ok_code.
- WHEN 'EXIT'.
- LEAVE PROGRAM.
- WHEN 'CHECK'.
- * 1. synchronize the internal table and check against duplicate keys
- CALL METHOD go_grid->check_changed_data.
- * 2. if there are no duplicated keys
- CHECK cl_event_handler=>data_changed_error = 0.
- * post processing after successful synchronization
- PERFORM data_change_post_processing CHANGING gt_data.
- WHEN 'SAVE'.
- * 1. synchronize the internal table
- CALL METHOD go_grid->check_changed_data.
- * 2. if there are no duplicated keys
- CHECK cl_event_handler=>data_changed_error = 0.
- * post processing after successful synchronization
- PERFORM data_change_post_processing CHANGING gt_data.
- * 3. if the data was changed
- CHECK NOT cl_event_handler=>protocol_tab IS INITIAL.
- * save the delta changes in database
- PERFORM data_save.
- * clear the protocol
- CLEAR cl_event_handler=>protocol_tab.
- ENDCASE.
- CLEAR ok_code.
- ENDFORM. "user_command
- *&---------------------------------------------------------------------*
- *& Form data_change_post_processing
- *&---------------------------------------------------------------------*
- FORM data_change_post_processing CHANGING pt_data TYPE tt_data.
- * check all rows as verified
- PERFORM data_verified_set CHANGING pt_data.
- * deactivate edit mode of key fields
- PERFORM data_key_readonly_set USING gt_fcat
- CHANGING pt_data.
- * refresh ALV grid from internal table
- CALL METHOD go_grid->refresh_table_display.
- ENDFORM. "data_change_post_processing
- *&---------------------------------------------------------------------*
- *& Form data_save
- *&---------------------------------------------------------------------*
- FORM data_save.
- DATA:
- ls_data TYPE ts_data,
- ls_db_data TYPE ZFI_DISPOSAL_REQ.
- LOOP AT cl_event_handler=>protocol_tab INTO ls_data.
- MOVE-CORRESPONDING ls_data TO ls_db_data.
- CASE ls_data-mod_type.
- WHEN 'INSERT'.
- INSERT ZFI_DISPOSAL_REQ FROM ls_db_data.
- WHEN 'UPDATE'.
- UPDATE ZFI_DISPOSAL_REQ FROM ls_db_data.
- WHEN 'DELETE'.
- DELETE ZFI_DISPOSAL_REQ FROM ls_db_data.
- ENDCASE.
- ENDLOOP.
- COMMIT WORK.
- MESSAGE S999(B1) WITH 'Data saved'.
- ENDFORM. "data_save
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement