SAP ALV 拖拽放置 drag&drop 实现方法

本文详细介绍了如何在SAP ALV(ABAP List Viewer)中实现拖放(drag & drop)功能,包括定义技术字段、设置内表、注册布局参数事件、实现拖放方法等步骤,以及在拖放操作中的源数据捕获和目标位置处理。通过这个过程,可以增强SAP ALV的交互性和用户友好性。
摘要由CSDN通过智能技术生成

SAP ALV 拖拽放置 drag&drop 实现方法

1.ALV Display 内表中定义技术字段(as cellstyle color等)

 Data: begin of gt_dis OCCURS 0,
             field1 type c lenth 10,
             field2 type c lenth 10,
             dnd type lvc_t_drdr,
           end of gt_dis .
 go_dragdrop TYPE REF TO cl_dragdrop 

2.内表赋值

  CREATE OBJECT go_dragdrop.
  lv_effect = cl_dragdrop=>move + cl_dragdrop=>copy.
  CALL METHOD c_dragdropalv->add
    EXPORTING
      flavor     = 'MOVE'
      dragsrc    = 'X'
      droptarget = 'X'
      effect     =  lv_effect.
      
*Get the handle for drag and drop
  CALL METHOD c_dragdropalv->get_handle
    IMPORTING
      handle = lv_handle_alv.  
      
Data: ls_drdr type lvc_s_drdr ,
         lt_drdr type lvc_t_drdr .
 
 "赋值后field1字段可以将进行拖放
 clear ls_drdr.
 ls_drdr-fieldname  = 'FIELD1'. 
 ls_drdr-handle     =  lv_handle_alv.  
 append ls_drdr TO lt_drdr .
 
 "赋值后field2字段可以将进行拖放
 clear ls_drdr.
 ls_drdr-fieldname  = 'FIELD2'. 
 ls_drdr-handle     =  lv_handle_alv.  
 append ls_drdr TO lt_drdr .

 gt_dis-field1      = 'Test1'.
 gt_dis-field2      = 'Test2'.
 gt_dis-dnd        = lt_drdr.
 APPEND gt_dis.

2.Layout 参数事件注册

     “ 参数赋值
      is_layout-s_dragdrop-row_ddid   = handle_alv.
      is_layout-s_dragdrop-fieldname  ='DND'
      
      ”注册事件 as hotspot or dada change
      DATA go_event TYPE REF TO lcl_objdragdropapp .
      CREATE OBJECT go_event.
      SET HANDLER go_event->handle_alv_drag FOR go_alv.
      SET HANDLER go_event->handle_alv_drop FOR go_alv.

3.方法实现

CLASS lcl_objdragdropapp DEFINITION.
  PUBLIC SECTION.
    METHODS:
      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
CLASS lcl_objdragdropapp IMPLEMENTATION.
  METHOD handle_alv_drag.
       e_column-fieldname : 拖拽时选择的源数据的列名
       e_row-index : 拖拽时选择的源数据行
       或者用get_selected_cells 方法得到当前的行和列
                 call method go_alv->get_selected_cells 
                       IMPORTING ~
      
       记录下source data 的行和列或内表数据:
         Example:
         DATA:  lo_dataobj TYPE REF TO lcl_dragdrop,
         CREATE OBJECT  lo_dataobj.
         MOVE e_row-index TO  lo_dataobj->index. “保存当前行
         READ TABLE gt_dis INTO  lo_dataobj->wa INDEX e_row-index."保存当前数据
         e_dragdropobj->object = dataobj.
  ENDMETHOD.                    "HANDLE_ALV_DRAG

  METHOD handle_alv_drop.
* Catch-Statement to ensure the drag&drop-Operation is aborted properly.
    CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
      DATA: lo_dataobj TYPE REF TO lcl_dragdrop,
       lo_dataobj?= e_dragdropobj->object.
       ”Main Logic
       e_column-fieldname : 放置时选择的目的cell列名
       e_row-index : 放置时选择的目的cell行
       与在drag中记录的lo_dataobj行列进行对比
       两个ALV之间的拖放可通过:e_dragdropobj->dragsourcectrl属性进行区分
       根据业务需要进行内表的操作后刷新ALV显示
    ENDCATCH.
    IF sy-subrc <> 0.
      CALL METHOD e_dragdropobj->abort.
    ENDIF.
  ENDMETHOD.                    "HANDLE_ALV_DROP
  
ENDCLASS.                    "LCL_objdragdropapp IMPLEMENTATION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的刘刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值