• 实现ALV Grid 和A…


    使用class CL_GUI_ALV_TREE 和CL_GUI_ALV_GRID的ON_DRAG、ON_DROP 事件来实现相应的拖拽功能。
    ALV Grid的示例程序如下,此程序可以通过拖拽来改变ALV控件数据行的顺序:
    1、创建一个600屏幕,只需一个屏幕元素OK_CODE即可
    2、创建一个gui status,命名为STATUS,增加对退出按钮的相应
    *&---------------------------------------------------------------------*
    *& Report  YZ_TEST32
    *&
    *&---------------------------------------------------------------------*
    *&copy from SAPTechnical.com
    *&ALV report with drag and drop functionality on its rows
    *&---------------------------------------------------------------------*

    REPORT  YZ_TEST32.

    *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.
    DATA OK_CODE LIKE SY-UCOMM.
    *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.
        DATAWA 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.
        DATADATAOBJ 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 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.
        DATADATAOBJ 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 Custom container and name it CC_CONT and OK code as OK_CODE.
    *Save check and Activate the screen painter.
    *Now normal screen with number 600 is created which holds the ALV grid.
    PBO of the actual screen ,Here we can give title and customized menus
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_0600  OUTPUT
    *&---------------------------------------------------------------------*
          text
    *----------------------------------------------------------------------*
    MODULE STATUS_0600 OUTPUT.
      SET PF-STATUS 'STATUS'.
     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 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.
      OK_CODE SY-UCOMM.
      CASE OK_CODE.
        WHEN 'EXIT'.
          LEAVE PROGRAM.
        WHEN OTHERS.
      ENDCASE.
    ENDMODULE                USER_COMMAND_0600  INPUT

    ALV Tree的示例程序:BCALV_GRID_DND_TREE,
    可以将左侧ALV TREE的节点拖拽到右侧的ALV上。
    实现ALV TREE的树结构拖拽,可以参考上述两个程序。

    http://blog.sina.com.cn/sapliumeng
  • 相关阅读:
    写点别的,关于二维码,由印美图想到的
    600篇以上博客,才能进阶到精通的地步,奋斗吧少年
    写博客真的很枯燥,更麻烦的是我还不会MD,排版太不友好了啊。
    对sqlserver存储过程合游标的一些理解
    sqlserver的存储过程
    Apache负载均衡配置
    组合模式解决原型创建对象传参和共享难题
    原型创建对象
    构造函数创建对象
    jQuery实现瀑布流的简单方法
  • 原文地址:https://www.cnblogs.com/senlinmu110/p/3802052.html
Copyright © 2020-2023  润新知