生活随笔
收集整理的這篇文章主要介紹了
可手工拖拽alv行记录的实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序代碼: *Structure declaration for T016T TYPES : BEGIN OF ty_t016t, ? ?? ?? ?brsch TYPE brsch, ? ?? ?? ?brtxt TYPE text1_016t, ? ?? ?? ?spras TYPE spras, ? ?? ?? ?END OF ty_t016t. *Work area and internal table for??T016T DATA : it_t016t TYPE STANDARD TABLE OF ty_t016t, ? ?? ? wa_t016t TYPE ty_t016t. *class declaration CLASS lcl_objdragdropapp DEFINITION DEFERRED. *data declarations for?ALV DATA:? ?c_dragdropapp TYPE REF TO lcl_objdragdropapp, ? ?? ???c_dockingcont TYPE REF TO cl_gui_docking_container, ? ?? ???c_alv TYPE REF TO cl_gui_alv_grid, * reference variable to CL_DRAGDROP: ? ?? ???c_dragdropalv TYPE REF TO cl_dragdrop, ? ?? ???it_layout TYPE lvc_s_layo, ? ?? ???it_fcat??TYPE lvc_t_fcat.? ?? ?? ?? ?"Field catalogue *declarations for handle event DATA:? ?effect TYPE i, ? ?? ???handle_alv TYPE i. *initialization event INITIALIZATION. *start of selection event START-OF-SELECTION. *select data ??PERFORM fetch_data. *ALV output ??PERFORM alv_output. * Class definitions and method implementation for drag and drop CLASS lcl_dragdrop DEFINITION. ??PUBLIC SECTION. ? ? DATA: wa TYPE ty_t016t, ? ?? ?? ? index TYPE i.? ?"Index of Line to be moved ENDCLASS.? ?? ?? ?? ?? ?? ???"LCL_DRAGDROP DEFINITION *Application class definition CLASS lcl_objdragdropapp DEFINITION. ??PUBLIC SECTION. ? ? METHODS: *Handling Event Drag ? ?? ?handle_alv_drag ? ?? ???FOR EVENT ondrag ? ?? ???OF cl_gui_alv_grid ? ?? ???IMPORTING e_row e_column e_dragdropobj, *Handling event DROP ? ?? ?handle_alv_drop ? ?? ???FOR EVENT ondrop ? ?? ???OF cl_gui_alv_grid ? ?? ???IMPORTING e_row e_column e_dragdropobj. ENDCLASS.? ?? ?? ?? ?? ?? ???"LCL_objdragdropapp DEFINITION *Application class implementation CLASS lcl_objdragdropapp IMPLEMENTATION. *??OnDrag event is used to 'fetch' information from the drag source. ??METHOD handle_alv_drag. ? ? DATA: dataobj TYPE REF TO lcl_dragdrop, ? ?? ?? ? line TYPE ty_t016t. * Read dragged row ? ? READ TABLE it_t016t INDEX e_row-index INTO line. * create and fill dataobject for events ONDROP ? ? CREATE OBJECT dataobj. * Remembering row index to move a line ? ? MOVE e_row-index TO dataobj->index. * store the dragged line. ? ? READ TABLE it_t016t INTO dataobj->wa INDEX e_row-index. * Assigning data object to the refering event parameter ? ? e_dragdropobj->object = dataobj. ??ENDMETHOD.? ?? ?? ?? ?? ?? ???"HANDLE_ALV_DRAG *Event handler for event 'OnDrop'. This event is used *to use your dragged information in combination with your drop source. ??METHOD handle_alv_drop. ? ? DATA: dataobj TYPE REF TO lcl_dragdrop, ? ?? ?? ? drop_index TYPE i, ? ?? ?? ? stable TYPE lvc_s_stbl. * Refresh Alv Grid Control without scrolling ? ? stable-row = 'X'. ? ? stable-col = 'X'. * Catch-Statement to ensure the drag&drop-Operation is aborted properly. ? ? CATCH SYSTEM-EXCEPTIONS move_cast_error = 1. ? ?? ?dataobj ?= e_dragdropobj->object. ? ?? ?DELETE it_t016t INDEX dataobj->index. ? ?? ?INSERT dataobj->wa INTO it_t016t INDEX e_row-index. *Refreshing the ALV ? ?? ?CALL METHOD c_alv->refresh_table_display ? ?? ???EXPORTING ? ?? ?? ? i_soft_refresh = 'X' ? ?? ?? ? is_stable? ?? ?= stable. ? ? ENDCATCH. ? ? IF sy-subrc <> 0. * If anything went wrong aborting the drag and drop operation: ? ?? ?CALL METHOD e_dragdropobj->abort. ? ? ENDIF. ??ENDMETHOD.? ?? ?? ?? ?? ?? ???"HANDLE_ALV_DROP ENDCLASS.? ?? ?? ?? ?? ?? ???"LCL_objdragdropapp IMPLEMENTATION *&---------------------------------------------------------------------* *&? ?? ?Form??alv_output *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* *??-->??p1? ?? ???text *??<--??p2? ?? ???text *----------------------------------------------------------------------* FORM alv_output . ??CALL SCREEN 600. ENDFORM.? ?? ?? ?? ?? ?? ???" alv_output ** Calling the ALV screen with custom container *On this statement double click??it takes you to the screen painter SE51. *Enter the attributes *Create a Custom container and name it CC_CONT and OK code as OK_CODE. *Save check and Activate the screen painter. *Now a normal screen with number 600 is created which holds the ALV grid. * PBO of the actual screen ,Here we can give a title and customized menus *&---------------------------------------------------------------------* *&? ?? ?Module??STATUS_0600??OUTPUT *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* MODULE status_0600 OUTPUT. *??SET PF-STATUS 'xxxxxxxx'. *??SET TITLEBAR 'xxx'. ??IF c_alv IS INITIAL. ? ? PERFORM alv_controls. ??ENDIF. ENDMODULE.? ?? ?? ?? ?? ???" STATUS_0600??OUTPUT *&---------------------------------------------------------------------* *&? ?? ?Form??alv_CONTROLS *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* *??-->??p1? ?? ???text *??<--??p2? ?? ???text *----------------------------------------------------------------------* FORM alv_controls. * create docking container for alv control ??CREATE OBJECT c_dockingcont ? ? EXPORTING ? ?? ???dynnr = '600' ? ?? ???extension = 300 ? ?? ???side = cl_gui_docking_container=>dock_at_top. * create alv control ??CREATE OBJECT c_alv ? ???EXPORTING i_parent = c_dockingcont. * create the application object to handle the?ABAP?Objects Events ??CREATE OBJECT c_dragdropapp. * Events alv control *For Dragging ??SET HANDLER c_dragdropapp->handle_alv_drag FOR c_alv. *For Dropping ??SET HANDLER c_dragdropapp->handle_alv_drop FOR c_alv. * build tree nodes for drag&drop ??PERFORM build_handle. * Fieldcatalogue for ALV ??PERFORM alv_build_fieldcat. * ALV attributes FOR LAYOUT ??PERFORM alv_report_layout. * Call ALV GRID ??CALL METHOD c_alv->set_table_for_first_display ? ? EXPORTING ? ?? ?is_layout? ?? ?? ?? ?? ?? ?? ?= it_layout ? ? CHANGING ? ?? ?it_outtab? ?? ?? ?? ?? ?? ?? ?= it_t016t ? ?? ?it_fieldcatalog? ?? ?? ?? ?? ?= it_fcat ? ? 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. ENDFORM.? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? "ALV_CONTROLS *&---------------------------------------------------------------------* *&? ?? ?Form??build_handle *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* *??-->??p1? ?? ???text *??<--??p2? ?? ???text *----------------------------------------------------------------------* FORM build_handle. * define a drag & Drop behaviour for the whole grid ??CREATE OBJECT c_dragdropalv. ??effect = cl_dragdrop=>move + cl_dragdrop=>copy. ??CALL METHOD c_dragdropalv->add ? ? EXPORTING ? ?? ?flavor? ???= 'Line' ? ?? ?dragsrc? ? = 'X' ? ?? ?droptarget = 'X' ? ?? ?effect? ???= effect. *getting the handle for drag and drop ??CALL METHOD c_dragdropalv->get_handle ? ? IMPORTING ? ?? ?handle = handle_alv. ENDFORM.? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? " build_handle *&---------------------------------------------------------------------* *&? ?? ?Form??fetch_data *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* *??-->??p1? ?? ???text *??<--??p2? ?? ???text *----------------------------------------------------------------------* FORM fetch_data . * select and display data from t016 ??SELECT brtxt brsch spras FROM t016t INTO CORRESPONDING FIELDS OF TABLE it_t016t ??WHERE spras = 'EN'. ENDFORM.? ?? ?? ?? ?? ?? ???" fetch_data *&---------------------------------------------------------------------* *&? ?? ?Form??alv_report_layout *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* *??-->??p1? ?? ???text *??<--??p2? ?? ???text *----------------------------------------------------------------------* FORM alv_report_layout . ??it_layout-grid_title = 'ALV Drag Drop'. * provide handle to alv control to all rows for same drag & drop behaviour ??it_layout-s_dragdrop-row_ddid = handle_alv. ENDFORM.? ?? ?? ?? ?? ?? ???" alv_report_layout *&---------------------------------------------------------------------* *&? ?? ?Form??alv_build_fieldcat *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* *??-->??p1? ?? ???text *??<--??p2? ?? ???text *----------------------------------------------------------------------* FORM alv_build_fieldcat . ??DATA lv_fldcat TYPE lvc_s_fcat. ??CLEAR lv_fldcat. ??lv_fldcat-row_pos? ?= '1'. ??lv_fldcat-col_pos? ?= '1'. ??lv_fldcat-fieldname = 'BRSCH'. ??lv_fldcat-tabname? ?= 'IT_T016T'. ??lv_fldcat-outputlen = 8. ??lv_fldcat-scrtext_m = 'Industry'. ??APPEND lv_fldcat TO it_fcat. ??CLEAR lv_fldcat. ??lv_fldcat-row_pos? ?= '1'. ??lv_fldcat-col_pos? ?= '2'. ??lv_fldcat-fieldname = 'BRTXT'. ??lv_fldcat-tabname? ?= 'IT_T016T'. ??lv_fldcat-outputlen = 15. ??lv_fldcat-scrtext_m = 'Description'. ??APPEND lv_fldcat TO it_fcat. ??CLEAR lv_fldcat. ENDFORM.? ?? ?? ?? ?? ?? ???" alv_build_fieldcat * PAI module of the screen created. In case we use an interactive ALV or *for additional functionalities we can create OK codes *and based on the user command we can do the coding. *&---------------------------------------------------------------------* *&? ?? ?Module??USER_COMMAND_0600??INPUT *&---------------------------------------------------------------------* *? ?? ? text *----------------------------------------------------------------------* MODULE user_command_0600 INPUT. ENDMODULE.? ?? ?? ?? ?? ???" USER_COMMAND_0600??INPUT 復制代碼 程序執行效果: ? alv行記錄被拖拽之后的效果 ? |
總結
以上是生活随笔為你收集整理的可手工拖拽alv行记录的实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。