Advertisement
yaramohamed78

Untitled

Apr 18th, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 28.06 KB | None | 0 0
  1. *&---------------------------------------------------------------------*
  2. *& Report  Z_YYY_DISPOSAL_REQ_INQ
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8. *----------------------------------------------------------------------*
  9. * Author : <Yara Mohamed/Developer user ID>
  10. * Creation Date : <09-03-2017>
  11. * Transaction : <Transaction code if attached>
  12. * Technical design: <Assets Disposal Request Inquiry Screen>
  13. * Description : < Show Disposal Request Information>
  14. *----------------------------------------------------------------------*
  15.  
  16.  
  17.  
  18.  
  19. REPORT Z_YYY_DISPOSAL_REQ_INQ.
  20.  
  21. TABLES : ZFI_DISPOSAL_REQ , ZFI_LOOKUP.
  22.  
  23. *---------------------------------------------------------------------*
  24. *                        W O R K  A R E A S                           *
  25. *---------------------------------------------------------------------*
  26. *Internal table which will be used in filling the alv by returning the data from the fm inquiry.
  27. *TYPES : BEGIN OF IT_req,
  28. *          zzsr_number    TYPE ZFI_DISPOSAL_REQ-ZZSR_NUMBER,
  29. *          zzcompany_code TYPE ZFI_DISPOSAL_REQ-ZZCOMPANY_CODE,
  30. *          zzcost_center  TYPE ZFI_DISPOSAL_REQ-ZZCOST_CENTER,
  31. *          zzdate         TYPE ZFI_DISPOSAL_REQ-ZZDATE,
  32. *          s_zzdesc       TYPE ZFI_LOOKUP-ZZDESC,
  33. *          rs_zzdesc      TYPE ZFI_LOOKUP-ZZDESC,
  34. *          crea_user      TYPE ZFI_DISPOSAL_REQ-CREA_USER,
  35. *          crea_time      TYPE ZFI_DISPOSAL_REQ-CREA_TIME,
  36. *          chng_user      TYPE ZFI_DISPOSAL_REQ-CHNG_USER,
  37. *          chng_time      TYPE ZFI_DISPOSAL_REQ-CHNG_TIME,
  38. *
  39. *  END OF IT_req.
  40.  
  41. *Internal Table & work area for it.
  42. DATA : it_reqs  TYPE STANDARD TABLE OF ZFI_DISP_REQ_STRUCT,
  43.         wa_reqs TYPE ZFI_DISP_REQ_STRUCT,
  44.         WA_FIELDCAT TYPE LVC_S_FCAT,
  45.         T_FIELDCAT TYPE LVC_T_FCAT.
  46.  
  47. ********************************************************************************************************************************************************
  48.  
  49. *Internal tables we will need for the search help filtering
  50.  
  51. *Cost Center
  52. TYPES: BEGIN OF ty_req,
  53.        cost_center  TYPE ZFI_DISPOSAL_REQ-ZZCOST_CENTER,
  54.        END OF ty_req.
  55.  
  56. * Request Status & Service
  57. TYPES: BEGIN OF ty_lookup,
  58.         code      TYPE ZFI_LOOKUP-ZZCODE,
  59.        END OF ty_lookup.
  60.  
  61.  
  62. DATA:   gwa_req         TYPE ty_req,
  63.         gt_req          TYPE TABLE OF ty_req,
  64.         gwa_lookup      TYPE ty_lookup,
  65.         gt_lookup       TYPE TABLE OF ty_lookup,
  66.         gt_return       TYPE TABLE OF ddshretval,
  67.         gwa_return      TYPE ddshretval,
  68.         gwa_dynpfields  TYPE dynpread,
  69.         gt_dynpfields   TYPE TABLE OF dynpread,
  70.         gv_company_code TYPE ZFI_DISPOSAL_REQ-ZZCOMPANY_CODE,
  71.         gv_type         TYPE ZFI_LOOKUP-ZZTYPE.
  72.  
  73. *Working area for the three tables we will need to work on .
  74. DATA:   wa_req TYPE ZFI_DISPOSAL_REQ,
  75.         wa_service TYPE ZFI_LOOKUP,
  76.         wa_req_status TYPE ZFI_LOOKUP.
  77.  
  78. ********************************************************************************************************************************************************
  79. *   local data for the docking , gui_container , and the cl_salv
  80.     DATA: lo_dock TYPE REF TO cl_gui_docking_container,
  81.           lo_alv  TYPE REF TO cl_gui_alv_grid.
  82.  
  83. ********************************************************
  84. TYPES: BEGIN OF ts_data.
  85. INCLUDE  STRUCTURE ZFI_DISP_REQ_STRUCT.
  86. TYPES:   mod_type TYPE string.      " type of modification (for protocol)
  87. TYPES:   verified TYPE c.           " flag for verification
  88. TYPES:   celltab  TYPE lvc_t_styl.
  89. TYPES: END OF ts_data.
  90.  
  91. TYPES:
  92.   tt_data TYPE STANDARD TABLE OF ts_data WITH NON-UNIQUE DEFAULT KEY.
  93.  
  94. CLASS cl_event_handler DEFINITION DEFERRED.
  95.  
  96. DATA:
  97.   gt_data          TYPE tt_data,
  98.   go_grid          TYPE REF TO cl_gui_alv_grid,
  99.   go_cont          TYPE REF TO cl_gui_custom_container,
  100.   gt_fcat          TYPE lvc_t_fcat,
  101.   ok_code          LIKE sy-ucomm,
  102.   go_event_handler TYPE REF TO cl_event_handler.
  103.  
  104. *----------------------------------------------------------------------*
  105. *       CLASS cl_event_handler DEFINITION
  106. *----------------------------------------------------------------------*
  107. CLASS cl_event_handler DEFINITION.
  108.  
  109.   PUBLIC SECTION.
  110.  
  111.     CLASS-DATA:
  112.       data_changed_error  TYPE i,        " error flag
  113.       protocol_tab        TYPE tt_data.  " protocol of changes since last save
  114.  
  115.     METHODS handle_toolbar
  116.       FOR EVENT toolbar OF cl_gui_alv_grid
  117.         IMPORTING
  118.           e_object
  119.           e_interactive.
  120.  
  121.     METHODS handle_user_command
  122.       FOR EVENT user_command OF cl_gui_alv_grid
  123.         IMPORTING
  124.           e_ucomm.
  125.  
  126.     METHODS handle_data_changed
  127.       FOR EVENT data_changed OF cl_gui_alv_grid
  128.         IMPORTING
  129.           er_data_changed.
  130.  
  131.     METHODS protocol_add
  132.       IMPORTING
  133.         pi_tabix        TYPE i
  134.         er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
  135.  
  136. ENDCLASS.                    "cl_event_handler DEFINITION
  137.  
  138. *----------------------------------------------------------------------*
  139. *       CLASS cl_event_handler IMPLEMENTATION
  140. *----------------------------------------------------------------------*
  141. CLASS cl_event_handler IMPLEMENTATION.
  142.  
  143. *&---------------------------------------------------------------------*
  144. *&      METHOD handle_toolbar
  145. *&---------------------------------------------------------------------*
  146.   METHOD handle_toolbar.
  147.  
  148.     FIELD-SYMBOLS:
  149.       <fs_button> TYPE stb_button.
  150.  
  151. *   replace the standard function 'check' with own one
  152.     READ TABLE e_object->mt_toolbar ASSIGNING <fs_button>
  153.       WITH KEY function = cl_gui_alv_grid=>mc_fc_check. " '&CHECK'.
  154.     <fs_button>-function = 'CHECK'.
  155.  
  156. **  deactivate the 'copy row' function
  157. **  (not necessary in the logic of this program)
  158. *
  159. *   READ TABLE e_object->mt_toolbar ASSIGNING <fs_button>
  160. *     WITH KEY function = cl_gui_alv_grid=>mc_fc_loc_copy_row. " '&LOCAL&COPY_ROW'.
  161. *   <fs_button>-disabled = 'X'.
  162.   ENDMETHOD.                    "handle_toolbar
  163.  
  164. *&---------------------------------------------------------------------*
  165. *&      METHOD handle_user_command
  166. *&---------------------------------------------------------------------*
  167.   METHOD handle_user_command.
  168.  
  169. *   force PAI processing with user function as ok_code
  170.     cl_gui_cfw=>set_new_ok_code( e_ucomm ).
  171.  
  172.   ENDMETHOD.                    "handle_user_command
  173.  
  174. *&---------------------------------------------------------------------*
  175. *&      METHOD handle_data_changed
  176. *&---------------------------------------------------------------------*
  177. *&      validate changes against duplicate keys and collect the protocol
  178. *&      of the changes for further db update or transport of changes
  179. *&---------------------------------------------------------------------*
  180.   METHOD handle_data_changed.
  181.  
  182.     DATA:
  183.       ls_row          TYPE lvc_s_moce,
  184.       ls_cell         TYPE lvc_s_modi,
  185.       lt_data         TYPE tt_data,
  186.       ls_data         TYPE ts_data,
  187.       ls_data2        TYPE ts_data,
  188.       lv_tabix        TYPE i,
  189.       lv_tabix2       TYPE i,
  190.       lv_new          TYPE i.
  191.  
  192.     FIELD-SYMBOLS:
  193.       <ft_data>       TYPE tt_data,
  194.       <fs_cell>       TYPE lvc_s_modi.
  195.  
  196.     ASSIGN er_data_changed->mp_mod_rows->* TO <ft_data>.
  197.  
  198. *   consider present error messages from standard data checks
  199.     IF LINES( er_data_changed->mt_protocol ) = 0.
  200.       data_changed_error = 0.
  201.     ELSE.
  202.       data_changed_error = 1.
  203.     ENDIF.
  204.  
  205. *   1. collect the deleted rows (no checks needed)
  206.     LOOP AT er_data_changed->mt_deleted_rows INTO ls_row.
  207.  
  208.       READ TABLE gt_data INTO ls_data INDEX ls_row-row_id.
  209.       ls_data-mod_type = 'DELETE'.
  210.       APPEND ls_data TO protocol_tab.
  211.     ENDLOOP.
  212.  
  213. *   2. collect the 'old' changed rows (no changes on key fields)
  214.     LOOP AT <ft_data> INTO ls_data
  215.       WHERE verified = 'X'.
  216.  
  217.       ls_data-mod_type = 'UPDATE'.
  218.       APPEND ls_data TO protocol_tab.
  219.     ENDLOOP.
  220.  
  221. *   3. check the new rows against the old, verified rows
  222.     LOOP AT <ft_data> INTO ls_data
  223.       WHERE verified = ''.
  224.  
  225.       lv_tabix = sy-tabix.
  226.       ADD 1 TO lv_new.
  227.  
  228.  
  229.       CHECK sy-subrc = 0.
  230.  
  231.       data_changed_error = 1.
  232.  
  233.       CALL METHOD protocol_add
  234.         EXPORTING
  235.           pi_tabix        = lv_tabix
  236.           er_data_changed = er_data_changed.
  237.  
  238.     ENDLOOP.
  239.  
  240. *   4. check the new rows among themselves
  241.     IF lv_new > 1.
  242.       LOOP AT <ft_data> INTO ls_data
  243.         WHERE verified = ''.
  244.  
  245.         lv_tabix = sy-tabix.
  246.  
  247.         LOOP AT <ft_data> INTO ls_data2
  248.           WHERE verified = ''.
  249.  
  250.           lv_tabix2 = sy-tabix.
  251.           CHECK lv_tabix2 <> lv_tabix.
  252.  
  253.           CALL METHOD protocol_add
  254.             EXPORTING
  255.               pi_tabix        = lv_tabix
  256.               er_data_changed = er_data_changed.
  257.  
  258.           CALL METHOD protocol_add
  259.             EXPORTING
  260.               pi_tabix        = lv_tabix2
  261.               er_data_changed = er_data_changed.
  262.  
  263.         ENDLOOP.
  264.       ENDLOOP.
  265.     ENDIF.
  266.  
  267. *   5. last aktivities in event DATA_CHANGED
  268.     LOOP AT <ft_data> INTO ls_data
  269.       WHERE verified = ''.
  270.  
  271.       lv_tabix = sy-tabix.
  272.  
  273.       READ TABLE er_data_changed->mt_mod_cells INTO ls_cell WITH KEY tabix = sy-tabix.
  274.  
  275.       READ TABLE er_data_changed->mt_protocol TRANSPORTING NO FIELDS WITH KEY row_id = ls_cell-row_id.
  276.  
  277. *     if check against duplicate key was ok
  278.       CHECK sy-subrc <> 0.
  279.  
  280. *     collect new rows
  281.       ls_data-mod_type = 'INSERT'.
  282.       APPEND ls_data TO protocol_tab.
  283.  
  284. *     Schl�ssel-Felder schliessen
  285.       LOOP AT er_data_changed->mt_good_cells ASSIGNING <fs_cell>
  286.         WHERE tabix = lv_tabix.
  287.  
  288.         READ TABLE gt_fcat TRANSPORTING NO FIELDS WITH KEY fieldname = <fs_cell>-fieldname
  289.                                                            key       = 'X'.
  290.  
  291.         CHECK sy-subrc = 0.
  292.         <fs_cell>-style = cl_gui_alv_grid=>mc_style_disabled.
  293.       ENDLOOP.
  294.     ENDLOOP.
  295.  
  296. **   6. activate the copied rows
  297. **   (not necessary in the logic of this program)
  298. *
  299. *    DATA:
  300. *      ls_cell TYPE lvc_s_modi.
  301. *
  302. *    LOOP AT er_data_changed->mt_inserted_rows INTO ls_row.
  303. *
  304. *      LOOP AT er_data_changed->mt_mod_cells INTO ls_cell
  305. *        WHERE row_id = ls_row-row_id.
  306. *
  307. *        CALL METHOD er_data_changed->modify_style
  308. *          EXPORTING
  309. *            i_row_id    = ls_cell-row_id
  310. *            i_fieldname = ls_cell-fieldname
  311. *            i_style     = cl_gui_alv_grid=>mc_style_enabled.
  312. *      ENDLOOP.
  313. *    ENDLOOP.
  314.   ENDMETHOD.                    "handle_data_changed
  315.  
  316. *&---------------------------------------------------------------------*
  317. *&      METHOD protocol_add
  318. *&---------------------------------------------------------------------*
  319.   METHOD protocol_add.
  320.  
  321.     DATA:
  322.       ls_cell       TYPE lvc_s_modi,
  323.       ls_fcat       TYPE lvc_s_fcat,
  324.       lv_string     TYPE string,
  325.       lv_msgv1      TYPE symsgv,
  326.       lv_msgv2      TYPE symsgv,
  327.       ls_roid_front TYPE lvc_s_roid,
  328.       lv_row_id     TYPE i.
  329.  
  330.     LOOP AT er_data_changed->mt_mod_cells INTO ls_cell
  331.       WHERE tabix = pi_tabix.
  332.  
  333. *     report only key fields
  334.       READ TABLE gt_fcat INTO ls_fcat WITH KEY fieldname = ls_cell-fieldname.
  335.       CHECK ls_fcat-key = 'X'.
  336.  
  337. *     report only once
  338.       READ TABLE er_data_changed->mt_protocol TRANSPORTING NO FIELDS
  339.         WITH KEY fieldname = ls_cell-fieldname
  340.                  row_id    = ls_cell-row_id.
  341.  
  342.       CHECK sy-subrc <> 0.
  343.  
  344. *     map the row id between frontend and internal tables for the message
  345.       READ TABLE er_data_changed->mt_roid_front INTO ls_roid_front
  346.         WITH KEY row_id = ls_cell-row_id.
  347.  
  348.       lv_row_id = sy-tabix.
  349.  
  350.       lv_msgv1 = 'Row &1:'.
  351.       lv_string = lv_row_id.
  352.       REPLACE SUBSTRING '&1' IN lv_msgv1 WITH lv_string.
  353.  
  354.       lv_msgv2 = 'Duplicate key with value ''&1'''.
  355.       lv_string = ls_cell-value.
  356.       REPLACE SUBSTRING '&1' IN lv_msgv2 WITH lv_string.
  357.  
  358.       CALL METHOD er_data_changed->add_protocol_entry
  359.         EXPORTING
  360.           i_msgid     = '0K'
  361.           i_msgno     = '000'
  362.           i_msgty     = 'E'
  363.           i_msgv1     = lv_msgv1
  364.           i_msgv2     = lv_msgv2
  365.           i_fieldname = ls_cell-fieldname
  366.           i_row_id    = ls_cell-row_id.    " pass the row id without mapping here
  367.     ENDLOOP.
  368.   ENDMETHOD.                    "protocol_add
  369. ENDCLASS.                    "cl_event_handler IMPLEMENTATION
  370.  
  371.  
  372.  
  373.  
  374. ********************************************************
  375. SELECTION-SCREEN BEGIN OF BLOCK SELECTION WITH FRAME TITLE text-001.
  376.  
  377. *Company Code Default(1200)
  378. SELECTION-SCREEN BEGIN OF LINE.
  379.   SELECTION-SCREEN COMMENT (20) text-002 FOR FIELD COM_CODE .
  380. PARAMETERS :     COM_CODE LIKE ZFI_DISPOSAL_REQ-ZZCOMPANY_CODE DEFAULT '1200'.
  381. SELECTION-SCREEN POSITION 35.
  382.  
  383. *Cost Center - Search Help depending on the value for the company code
  384. SELECTION-SCREEN COMMENT (20) text-003 FOR FIELD COST_CNT .
  385. PARAMETERS :     COST_CNT LIKE ZFI_DISPOSAL_REQ-ZZCOST_CENTER.
  386. SELECTION-SCREEN POSITION 70.
  387. SELECTION-SCREEN END OF LINE.
  388.  
  389. *Serial Number
  390. SELECTION-SCREEN BEGIN OF LINE.
  391.   SELECTION-SCREEN COMMENT (20) text-004 FOR FIELD SER_NO .
  392. PARAMETERS :     SER_NO   LIKE ZFI_DISPOSAL_REQ-ZZSR_NUMBER.
  393.  
  394.  
  395. *SELECTION-SCREEN POSITION 10.
  396. *Service Type - Search Help
  397. SELECTION-SCREEN COMMENT (20) text-005 FOR FIELD SRV_TYPE .
  398. PARAMETERS :     SRV_TYPE LIKE ZFI_LOOKUP-ZZCODE .
  399. SELECTION-SCREEN POSITION 70.
  400. PARAMETERS :     SRV_DESC  LIKE ZFI_LOOKUP-ZZDESC.
  401. SELECTION-SCREEN END OF LINE.
  402. *Date
  403. SELECTION-SCREEN BEGIN OF LINE.
  404.   SELECTION-SCREEN COMMENT (20) text-006 FOR FIELD DATE .
  405. PARAMETERS :     DATE LIKE ZFI_DISPOSAL_REQ-ZZDATE.
  406. *SELECTION-SCREEN POSITION 35.
  407.  
  408. *Request Status - Search Help
  409. SELECTION-SCREEN COMMENT (20) text-007 FOR FIELD REQ_STS .
  410. PARAMETERS :     REQ_STS  LIKE ZFI_LOOKUP-ZZCODE.
  411. SELECTION-SCREEN END OF LINE.
  412. SELECTION-SCREEN BEGIN OF LINE.
  413. PARAMETERS :     REQ_DESC  LIKE ZFI_LOOKUP-ZZDESC.
  414.  
  415. *Search Button
  416. SELECTION-SCREEN PUSHBUTTON (10) BUT1 USER-COMMAND SEARCH.
  417.  
  418. *Reset Button
  419. SELECTION-SCREEN PUSHBUTTON (10) BUT2 USER-COMMAND RESET.
  420. SELECTION-SCREEN END OF LINE.
  421. SELECTION-SCREEN END OF BLOCK SELECTION.
  422.  
  423. *On Value Request for cost center - filter it depending on company code
  424. AT SELECTION-SCREEN ON VALUE-REQUEST FOR COST_CNT.
  425.  
  426.   REFRESH gt_dynpfields.
  427.  
  428. *Field i will filter upon
  429.   gwa_dynpfields-fieldname = 'COM_CODE'.
  430.   APPEND gwa_dynpfields TO gt_dynpfields.
  431.  
  432.   CALL FUNCTION 'DYNP_VALUES_READ'
  433.     EXPORTING
  434.       DYNAME                               = sy-repid
  435.       DYNUMB                               = sy-dynnr
  436.     TABLES
  437.       DYNPFIELDS                           = gt_dynpfields
  438.    EXCEPTIONS
  439.      INVALID_ABAPWORKAREA                 = 1
  440.      INVALID_DYNPROFIELD                  = 2
  441.      INVALID_DYNPRONAME                   = 3
  442.      INVALID_DYNPRONUMMER                 = 4
  443.      INVALID_REQUEST                      = 5
  444.      NO_FIELDDESCRIPTION                  = 6
  445.      INVALID_PARAMETER                    = 7
  446.      UNDEFIND_ERROR                       = 8
  447.      DOUBLE_CONVERSION                    = 9
  448.      STEPL_NOT_FOUND                      = 10
  449.      OTHERS                               = 11
  450.             .
  451.   READ TABLE gt_dynpfields INTO gwa_dynpfields
  452.              WITH KEY fieldname = 'COM_CODE'.
  453. *If there are no errors , assign the company code the value returned.
  454.   IF SY-SUBRC = 0.
  455.       gv_company_code = gwa_dynpfields-fieldvalue.
  456.   ENDIF.
  457.  
  458. *Select statement to get the cost center depending on the dynamic value for the company code & assign it to the table we created.
  459.   SELECT DISTINCT ZZCOST_CENTER
  460.          INTO TABLE gt_req
  461.          FROM ZFI_DISPOSAL_REQ
  462.          WHERE ZZCOMPANY_CODE = gv_company_code.
  463.  
  464. *Get cost center search help values depending on the company code.
  465.     CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  466.       EXPORTING
  467.         RETFIELD               = 'COST_CENTER'
  468.         VALUE_ORG              = 'S'
  469.       TABLES
  470.         VALUE_TAB              = gt_req
  471.         RETURN_TAB             = gt_return
  472.      EXCEPTIONS
  473.        PARAMETER_ERROR        = 1
  474.        NO_VALUES_FOUND        = 2
  475.        OTHERS                 = 3
  476.               .
  477.  
  478.      READ TABLE gt_return INTO gwa_return INDEX 1.
  479.  
  480. *If there are no errors , assign the returned table to the cost_cnt selection paramter.
  481.     IF SY-SUBRC = 0.
  482.       COST_CNT = gwa_return-fieldval.
  483.     ENDIF.
  484.  
  485.  
  486. *********************************************************************************************************************************************************
  487.  
  488. *On Value Request for Request Status
  489. AT SELECTION-SCREEN ON VALUE-REQUEST FOR  REQ_STS.
  490.   REFRESH gt_dynpfields.
  491.  
  492.   SELECT  ZZCODE
  493.          INTO TABLE gt_lookup
  494.          FROM ZFI_LOOKUP
  495.          WHERE ZZTYPE = '1'.
  496.  
  497.     CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  498.       EXPORTING
  499.         RETFIELD               = 'TYPE'
  500.         VALUE_ORG              = 'S'
  501.       TABLES
  502.         VALUE_TAB              = gt_lookup
  503.         RETURN_TAB             = gt_return
  504.      EXCEPTIONS
  505.        PARAMETER_ERROR        = 1
  506.        NO_VALUES_FOUND        = 2
  507.        OTHERS                 = 3
  508.               .
  509.  
  510.      READ TABLE gt_return INTO gwa_return INDEX 1.
  511.  
  512.     IF SY-SUBRC = 0.
  513.       REQ_STS = gwa_return-fieldval.
  514.     ENDIF.
  515.  
  516.       SELECT ZZDESC
  517.       INTO REQ_DESC
  518.       FROM ZFI_LOOKUP
  519.       WHERE ZZCODE = REQ_STS.
  520.      ENDSELECT.
  521.  
  522. *********************************************************************************************************************************************************
  523.  
  524. *On Value Request for Service Type
  525.  
  526.     AT SELECTION-SCREEN ON VALUE-REQUEST FOR  SRV_TYPE.
  527.   REFRESH gt_dynpfields.
  528.  
  529.   SELECT  ZZCODE
  530.          INTO TABLE gt_lookup
  531.          FROM ZFI_LOOKUP
  532.          WHERE ZZTYPE = '2'.
  533.  
  534.     CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  535.       EXPORTING
  536.         RETFIELD               = 'TYPE'
  537.         VALUE_ORG              = 'S'
  538.       TABLES
  539.         VALUE_TAB              = gt_lookup
  540.         RETURN_TAB             = gt_return
  541.      EXCEPTIONS
  542.        PARAMETER_ERROR        = 1
  543.        NO_VALUES_FOUND        = 2
  544.        OTHERS                 = 3
  545.               .
  546.  
  547.      READ TABLE gt_return INTO gwa_return INDEX 1.
  548.  
  549.     IF SY-SUBRC = 0.
  550.       SRV_TYPE = gwa_return-fieldval.
  551.     ENDIF.
  552.  
  553.     SELECT ZZDESC
  554.       INTO SRV_DESC
  555.       FROM ZFI_LOOKUP
  556.       WHERE ZZCODE = SRV_TYPE.
  557.      ENDSELECT.
  558.  
  559.  
  560.  
  561. *********************************************************************************************************************************************************
  562.  
  563.  
  564. ** Initialization
  565.  
  566. INITIALIZATION.
  567.  
  568. *Buttons Text
  569. BUT1 = 'Search'.
  570. BUT2 = 'Reset'.
  571.  
  572. AT SELECTION-SCREEN OUTPUT.
  573.  
  574.    LOOP AT SCREEN.
  575.    IF screen-NAME = 'COM_CODE'.
  576.      SCREEN-REQUIRED = 1.
  577.      SCREEN-INPUT = 0.
  578.      MODIFY SCREEN.
  579.      ENDIF.
  580.      IF SCREEN-NAME = 'SRV_DESC'.
  581.        SCREEN-REQUIRED = 1.
  582.        SCREEN-INPUT = 0.
  583.        MODIFY SCREEN.
  584.      ENDIF.
  585.        IF SCREEN-NAME = 'REQ_DESC'.
  586.        SCREEN-REQUIRED = 1.
  587.        SCREEN-INPUT = 0.
  588.        MODIFY SCREEN.
  589.      ENDIF.
  590.    ENDLOOP.
  591. *   MESSAGE ID 'ZALV_ERRORS' TYPE 'I' NUMBER '000' WITH 'Error1'.
  592. *
  593. * MESSAGE ID 'ZALV_ERRORS' TYPE 'I' NUMBER '000' WITH 'Error2'.
  594. *PERFORM DISPLAY_OUTPUT.
  595. *PERFORM CREATE_OBJECTS.
  596.  
  597.  
  598. AT SELECTION-SCREEN.
  599.  
  600. *Handle on Button Click
  601. CASE sy-ucomm.
  602.  
  603.  when 'SEARCH'.
  604.      PERFORM SEARCH CHANGING gt_data.
  605.      PERFORM alv_init.
  606.      PERFORM user_command.
  607.  
  608.   WHEN 'RESET'.
  609.     PERFORM RESET.
  610.  
  611. ENDCASE.
  612.  
  613. *******************************************************************************
  614. *Create Fieldcat
  615.  FORM DISPLAY_OUTPUT.
  616.    PERFORM FILL_FIELDCAT USING :
  617.           'ZZDATE'          'gt_data' 'Date' ''.
  618.  ENDFORM.
  619.  
  620. *Fill them using parameters send to the function
  621. FORM FILL_FIELDCAT USING pv_field    TYPE any
  622.                          pv_tabname  TYPE any
  623.                          pv_coltext  TYPE any
  624.                          pv_outputlen TYPE any.
  625.  
  626.  
  627.   wa_fieldcat-fieldname = pv_field.
  628.   wa_fieldcat-tabname = pv_tabname.
  629.   wa_fieldcat-coltext = pv_coltext.
  630.   APPEND wa_fieldcat TO t_fieldcat.
  631.   CLEAR wa_fieldcat.
  632.  
  633. ENDFORM.
  634. *Create all objects required (Docker,ALV,Grid)
  635. FORM create_objects.
  636.   CHECK lo_dock is INITIAL.
  637.   CREATE OBJECT lo_dock
  638.     EXPORTING
  639.    side                        = cl_gui_docking_container=>dock_at_bottom
  640.       extension                   = 230
  641.       caption                     = 'Assets Request Inquiry'
  642.     EXCEPTIONS
  643.       cntl_error                  = 1
  644.       cntl_system_error           = 2
  645.       create_error                = 3
  646.       lifetime_error              = 4
  647.       lifetime_dynpro_dynpro_link = 5
  648.       OTHERS                      = 6.
  649.   IF sy-subrc <> 0.
  650. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  651.           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  652.   ENDIF.                               "  IF sy-subrc <> 0.
  653.  
  654.  
  655. * To Create the Grid Instance
  656.   CREATE OBJECT lo_alv
  657.     EXPORTING
  658.       i_parent          = lo_dock
  659.     EXCEPTIONS
  660.       error_cntl_create = 1
  661.       error_cntl_init   = 2
  662.       error_cntl_link   = 3
  663.       error_dp_create   = 4
  664.       OTHERS            = 5.
  665.   IF sy-subrc <> 0.
  666.  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  667.              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  668.   ENDIF.                               " IF sy-subrc <> 0.
  669.  
  670. * Formatted Output Table is Sent to Control
  671. MESSAGE ID 'ZALV_ERRORS' TYPE 'I' NUMBER '000' WITH wa_req_status-ZZCODE.
  672.   CALL METHOD lo_alv->set_table_for_first_display
  673.     CHANGING
  674.       it_outtab                      =  it_reqs
  675.       it_fieldcatalog                =  t_fieldcat
  676. *      it_sort                       =
  677. *      it_filter                     =
  678.     EXCEPTIONS
  679.       invalid_parameter_combination = 1
  680.       program_error                 = 2
  681.       too_many_lines                = 3
  682.       OTHERS                        = 4
  683.           .
  684.   IF sy-subrc <> 0.
  685.    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  686.               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  687.   ENDIF.                               " IF sy-subrc <> 0.
  688.  
  689. ENDFORM.
  690.  
  691. FORM SEARCH CHANGING pt_data TYPE tt_data.
  692.  
  693. *Internal Table Fields that will be passed to FM
  694.    wa_req-ZZCOMPANY_CODE = COM_CODE.
  695.    wa_req-ZZCOST_CENTER  = COST_CNT.
  696.    wa_req-ZZSR_NUMBER  = SER_NO.
  697.    wa_req-ZZDATE = DATE.
  698.    wa_req_status-ZZCODE = REQ_STS.
  699.    wa_service-ZZCODE = SRV_TYPE.
  700.  
  701. CALL FUNCTION 'Z_REQ_FN_INQUIRY'
  702.   EXPORTING
  703.     WA_REQ              = WA_REQ
  704.     WA_REQ_STATUS       = WA_REQ_STATUS
  705.     WA_SERVICE          = WA_SERVICE
  706.   TABLES
  707.     QT_REQ              = pt_data
  708.           .
  709.  
  710. *CALL METHOD lo_alv->refresh_table_display.
  711. *pt_data = it_reqs.
  712. PERFORM data_verified_set CHANGING gt_data.
  713. PERFORM DISPLAY_OUTPUT.
  714. *PERFORM fieldcat_create CHANGING gt_fcat.
  715.  ENDFORM.
  716.  
  717. *Clear All fields.
  718.  FORM RESET.
  719.   CLEAR : COST_CNT,
  720.           SER_NO,
  721.            DATE,
  722.            REQ_STS,
  723.            SRV_TYPE,
  724.            it_reqs.
  725. CALL METHOD lo_alv->refresh_table_display.
  726.   ENDFORM.
  727.   FORM data_verified_set CHANGING pt_data TYPE tt_data.
  728.  
  729.   FIELD-SYMBOLS:
  730.     <fs_data> TYPE ts_data.
  731.  
  732.   LOOP AT pt_data ASSIGNING <fs_data>
  733.     WHERE verified = ''.
  734.  
  735.     <fs_data>-verified = 'X'.
  736.  
  737.   ENDLOOP.
  738. ENDFORM.                    "data_verified_set
  739.  
  740. FORM fieldcat_create CHANGING pt_fcat TYPE lvc_t_fcat.
  741.  
  742.   FIELD-SYMBOLS:
  743.     <fs_fcat> TYPE lvc_s_fcat.
  744.  
  745.   CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
  746.     EXPORTING
  747.       i_structure_name = 'ZFI_DISP_REQ_STRUCT'
  748.     CHANGING
  749.       ct_fieldcat      = gt_fcat.
  750.  
  751.   LOOP AT gt_fcat ASSIGNING <fs_fcat>.
  752.     <fs_fcat>-edit = 'X'.
  753.  
  754.       <fs_fcat>-key = ''.
  755.   ENDLOOP.
  756. ENDFORM.                    "fieldcat_create
  757.  
  758. FORM data_key_readonly_set USING    pt_fcat TYPE lvc_t_fcat
  759.                            CHANGING pt_data TYPE tt_data.
  760.  
  761.   DATA:
  762.     lt_style TYPE lvc_t_styl,
  763.     ls_style TYPE lvc_s_styl,
  764.     ls_fcat  TYPE lvc_s_fcat.
  765.  
  766.   FIELD-SYMBOLS:
  767.     <fs_data> TYPE ts_data.
  768.  
  769. * the following construct works well for function 'copy row' (MC_FC_LOC_COPY_ROW)
  770. * (the style of the whole row is not copied and the key fields are open for change)
  771.  
  772. * first deactivate complete row for edit
  773.   ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
  774.   INSERT ls_style INTO TABLE lt_style.
  775.  
  776.   LOOP AT pt_fcat INTO ls_fcat
  777.     WHERE NOT key = 'X'.
  778.  
  779. *   then activate non-key fields
  780.     ls_style-fieldname = ls_fcat-fieldname.
  781.     ls_style-style = cl_gui_alv_grid=>mc_style_enabled.
  782.     INSERT ls_style INTO TABLE lt_style.
  783.   ENDLOOP.
  784.  
  785.   LOOP AT pt_data ASSIGNING <fs_data>.
  786.     <fs_data>-celltab = lt_style.
  787.   ENDLOOP.
  788. ENDFORM.                    "data_key_readonly_set
  789.  
  790. FORM alv_init.
  791.  
  792.   DATA:
  793.     ls_layout TYPE lvc_s_layo.
  794.  
  795.   IF go_cont IS INITIAL.
  796.  
  797.     SET PF-STATUS 'STAT_0100'.
  798.  
  799.     CREATE OBJECT go_cont
  800.       EXPORTING
  801.         container_name = 'CONT1_0100'.
  802.  
  803.     CREATE OBJECT go_grid
  804.       EXPORTING
  805.         i_parent = go_cont.
  806.  
  807.     CREATE OBJECT go_event_handler.
  808. *    SET HANDLER go_event_handler->handle_toolbar      FOR go_grid.
  809.     SET HANDLER go_event_handler->handle_user_command FOR go_grid.
  810.     SET HANDLER go_event_handler->handle_data_changed FOR go_grid.
  811.  
  812.     ls_layout-stylefname = 'CELLTAB'.
  813.  
  814.     CALL METHOD go_grid->set_table_for_first_display
  815.       EXPORTING
  816.         is_layout       = ls_layout
  817.       CHANGING
  818.         it_fieldcatalog = t_fieldcat
  819.         it_outtab       = gt_data.
  820.  
  821. **   if you need event DATA_CHANGED after function 'copy row'
  822. **   (not necessary in the logic of this program)
  823. *
  824. *    CALL METHOD go_grid->register_edit_event
  825. *      EXPORTING
  826. *        i_event_id = cl_gui_alv_grid=>mc_evt_modified.
  827.   ENDIF.
  828. ENDFORM.                    "alv_init
  829.  
  830. *&---------------------------------------------------------------------*
  831. *&      Form  user_command
  832. *&---------------------------------------------------------------------*
  833. FORM user_command.
  834.  
  835.   CALL METHOD cl_gui_cfw=>dispatch.
  836.  
  837.   CASE ok_code.
  838.  
  839.     WHEN 'EXIT'.
  840.       LEAVE PROGRAM.
  841.  
  842.     WHEN 'CHECK'.
  843. *     1. synchronize the internal table and check against duplicate keys
  844.       CALL METHOD go_grid->check_changed_data.
  845.  
  846. *     2. if there are no duplicated keys
  847.       CHECK cl_event_handler=>data_changed_error = 0.
  848. *     post processing after successful synchronization
  849.       PERFORM data_change_post_processing CHANGING gt_data.
  850.  
  851.     WHEN 'SAVE'.
  852. *     1. synchronize the internal table
  853.       CALL METHOD go_grid->check_changed_data.
  854.  
  855. *     2. if there are no duplicated keys
  856.       CHECK cl_event_handler=>data_changed_error = 0.
  857. *     post processing after successful synchronization
  858.       PERFORM data_change_post_processing CHANGING gt_data.
  859.  
  860. *     3. if the data was changed
  861.       CHECK NOT cl_event_handler=>protocol_tab IS INITIAL.
  862. *     save the delta changes in database
  863.       PERFORM data_save.
  864. *     clear the protocol
  865.       CLEAR cl_event_handler=>protocol_tab.
  866.   ENDCASE.
  867.  
  868.   CLEAR ok_code.
  869. ENDFORM.                    "user_command
  870. *&---------------------------------------------------------------------*
  871. *&      Form  data_change_post_processing
  872. *&---------------------------------------------------------------------*
  873. FORM data_change_post_processing CHANGING pt_data TYPE tt_data.
  874.  
  875. * check all rows as verified
  876.   PERFORM data_verified_set CHANGING pt_data.
  877.  
  878. * deactivate edit mode of key fields
  879.   PERFORM data_key_readonly_set USING    gt_fcat
  880.                                 CHANGING pt_data.
  881.  
  882. * refresh ALV grid from internal table
  883.   CALL METHOD go_grid->refresh_table_display.
  884.  
  885. ENDFORM.                    "data_change_post_processing
  886. *&---------------------------------------------------------------------*
  887. *&      Form  data_save
  888. *&---------------------------------------------------------------------*
  889. FORM data_save.
  890.  
  891.   DATA:
  892.     ls_data    TYPE ts_data,
  893.     ls_db_data TYPE ZFI_DISPOSAL_REQ.
  894.  
  895.   LOOP AT cl_event_handler=>protocol_tab INTO ls_data.
  896.  
  897.     MOVE-CORRESPONDING ls_data TO ls_db_data.
  898.  
  899.     CASE ls_data-mod_type.
  900.  
  901.       WHEN 'INSERT'.
  902.         INSERT ZFI_DISPOSAL_REQ FROM ls_db_data.
  903.  
  904.       WHEN 'UPDATE'.
  905.         UPDATE ZFI_DISPOSAL_REQ FROM ls_db_data.
  906.  
  907.       WHEN 'DELETE'.
  908.         DELETE ZFI_DISPOSAL_REQ FROM ls_db_data.
  909.     ENDCASE.
  910.   ENDLOOP.
  911.  
  912.   COMMIT WORK.
  913.  
  914.   MESSAGE S999(B1) WITH 'Data saved'.
  915. ENDFORM.                    "data_save
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement