SAP Drag or drop tree

1 *&---------------------------------------------------------------------*
2 *& Report RSDEMO_DRAG_DROP_EDIT_TREE *
3 *& *
4 *&---------------------------------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------------------------------*
8
9 REPORT rsdemo_drag_drop_edit_tree .
10 DATA ok_code TYPE sy-ucomm.
11 DATA node_itab_left LIKE node_str OCCURS 0.
12 DATA node_itab_right LIKE node_str OCCURS 0.
13 DATA node LIKE node_str.
14
15 DATA container TYPE REF TO cl_gui_custom_container.
16 DATA splitter TYPE REF TO cl_gui_easy_splitter_container.
17 DATA right TYPE REF TO cl_gui_container.
18 DATA left TYPE REF TO cl_gui_container.
19
20 DATA tree_right TYPE REF TO cl_gui_simple_tree.
21 DATA tree_left TYPE REF TO cl_gui_simple_tree.
22
23 DATA behaviour_left TYPE REF TO cl_dragdrop.
24 DATA behaviour_right TYPE REF TO cl_dragdrop.
25
26 DATA handle_tree_left TYPE i.
27 DATA handle_tree_right TYPE i.
28
29 *---------------------------------------------------------------------*
30 * CLASS lcl_treeobject DEFINITION
31 *---------------------------------------------------------------------*
32 * Definition of Data Container *
33 *---------------------------------------------------------------------*
34 CLASS lcl_drag_object DEFINITION.
35 PUBLIC SECTION.
36 DATA text TYPE STANDARD TABLE OF mtreesnode-text.
37 ENDCLASS.
38
39
40 *---------------------------------------------------------------------*
41 * CLASS dragdrop_receiver DEFINITION
42 *---------------------------------------------------------------------*
43 * ........ *
44 *---------------------------------------------------------------------*
45 CLASS lcl_dragdrop_receiver DEFINITION.
46 PUBLIC SECTION.
47 METHODS:
48 flavor_select FOR EVENT on_drop_get_flavor OF cl_gui_simple_tree
49 IMPORTING node_key flavors drag_drop_object,
50 left_drag FOR EVENT on_drag_multiple OF cl_gui_simple_tree
51 IMPORTING node_key_table drag_drop_object,
52 right_drop FOR EVENT on_drop OF cl_gui_simple_tree
53 IMPORTING node_key drag_drop_object,
54 drop_complete FOR EVENT on_drop_complete_multiple OF
55 cl_gui_simple_tree
56 IMPORTING node_key_table drag_drop_object.
57
58 ENDCLASS.
59
60 ************************************************************************
61
62
63 ************************************************************************
64
65 START-OF-SELECTION.
66 CALL SCREEN 100.
67 *&---------------------------------------------------------------------*
68 *& Module START OUTPUT
69 *&---------------------------------------------------------------------*
70 * text
71 *----------------------------------------------------------------------*
72 MODULE start OUTPUT.
73 SET PF-STATUS 'BASE'.
74 IF container is initial.
75 CREATE OBJECT container
76 EXPORTING container_name = 'CONTAINER'.
77 CREATE OBJECT splitter
78 EXPORTING parent = container
79 orientation = 1.
80 left = splitter->top_left_container.
81 right = splitter->bottom_right_container.
82 CREATE OBJECT tree_right
83 EXPORTING parent = right
84 node_selection_mode = tree_right->node_sel_mode_multiple.
85 CREATE OBJECT tree_left
86 EXPORTING parent = left
87 node_selection_mode = tree_left->node_sel_mode_multiple.
88
89 * Definition of drag drop behaviour
90 CREATE OBJECT behaviour_left.
91 CALL METHOD behaviour_left->add
92 EXPORTING
93 flavor = 'Tree_move'
94 dragsrc = 'X'
95 droptarget = ' '
96 effect = cl_dragdrop=>copy.
97 CALL METHOD behaviour_left->add
98 EXPORTING
99 flavor = 'Tree_copy'
100 dragsrc = 'X'
101 droptarget = ' '
102 effect = cl_dragdrop=>copy.
103
104 CALL METHOD behaviour_left->get_handle
105 IMPORTING handle = handle_tree_left.
106
107 * Drag Drop behaviour of tree control nodes are defined in the node
108 * structure
109 PERFORM fill_tree CHANGING handle_tree_left node_itab_left.
110 CALL METHOD tree_left->add_nodes
111 EXPORTING node_table = node_itab_left
112 table_structure_name = 'NODE_STR'.
113
114 CREATE OBJECT behaviour_right.
115
116 CALL METHOD behaviour_right->add
117 EXPORTING
118 flavor = 'Tree_copy'
119 dragsrc = ' '
120 droptarget = 'X'
121 effect = cl_dragdrop=>copy.
122 CALL METHOD behaviour_right->add
123 EXPORTING
124 flavor = 'Tree_move'
125 dragsrc = ' '
126 droptarget = 'X'
127 effect = cl_dragdrop=>copy.
128 CALL METHOD behaviour_right->get_handle
129 IMPORTING handle = handle_tree_right.
130
131 PERFORM fill_tree CHANGING handle_tree_right node_itab_right.
132 CALL METHOD tree_right->add_nodes
133 EXPORTING node_table = node_itab_right
134 table_structure_name = 'NODE_STR'.
135
136 * registration of drag and drop events
137 DATA dragdrop TYPE REF TO lcl_dragdrop_receiver.
138 CREATE OBJECT dragdrop.
139 SET HANDLER dragdrop->flavor_select FOR tree_right.
140 SET HANDLER dragdrop->left_drag FOR tree_left.
141 SET HANDLER dragdrop->right_drop FOR tree_right.
142 SET HANDLER dragdrop->drop_complete FOR tree_left.
143
144
145 CALL METHOD tree_left->expand_node
146 EXPORTING node_key = 'Root'.
147 CALL METHOD tree_right->expand_node
148 EXPORTING node_key = 'Root'.
149
150 ENDIF.
151 ENDMODULE. " START OUTPUT
152 *&---------------------------------------------------------------------*
153 *& Module EXIT INPUT
154 *&---------------------------------------------------------------------*
155 * text
156 *----------------------------------------------------------------------*
157 MODULE exit INPUT.
158 LEAVE PROGRAM.
159 ENDMODULE. " EXIT INPUT
160 *&---------------------------------------------------------------------*
161 *& Form fill_tree
162 *&---------------------------------------------------------------------*
163 * text
164 *----------------------------------------------------------------------*
165 * --> p1 text
166 * <-- p2 text
167 *----------------------------------------------------------------------*
168 FORM fill_tree CHANGING handle_tree TYPE i
169 node_itab LIKE node_itab_left.
170 DATA: node LIKE mtreesnode.
171
172 * node table of the left tree
173 CLEAR node.
174 node-node_key = 'Root'.
175 node-isfolder = 'X'.
176 node-text = 'Texte'.
177 node-dragdropid = ' '.
178 APPEND node TO node_itab.
179
180 CLEAR node.
181 node-node_key = 'Child1'.
182 node-relatkey = 'Root'.
183 node-isfolder = 'X'.
184 node-relatship = cl_gui_simple_tree=>relat_last_child.
185 node-text = 'DragDrop Text 1'.
186 node-dragdropid = handle_tree. " handle of behaviour
187 APPEND node TO node_itab.
188
189 CLEAR node.
190 node-node_key = 'Child2'.
191 node-relatkey = 'Root'.
192 node-isfolder = 'X'.
193 node-relatship = cl_gui_simple_tree=>relat_last_child.
194 node-text = 'DragDrop Text 2'.
195 node-dragdropid = handle_tree. " handle of behaviour
196 APPEND node TO node_itab.
197
198
199 ENDFORM. " fill_tree
200 *&---------------------------------------------------------------------*
201 *& Module USER_COMMAND_0100 INPUT
202 *&---------------------------------------------------------------------*
203 * text
204 *----------------------------------------------------------------------*
205 MODULE user_command_0100 INPUT.
206 CALL METHOD cl_gui_cfw=>dispatch.
207 ENDMODULE. " USER_COMMAND_0100 INPUT
208
209
210 *---------------------------------------------------------------------*
211 * CLASS DRAGDROP_RECEIVER IMPLEMENTATION
212 *---------------------------------------------------------------------*
213 * ........ *
214 *---------------------------------------------------------------------*
215 CLASS lcl_dragdrop_receiver IMPLEMENTATION.
216 METHOD flavor_select.
217 IF node_key <> 'Root'.
218 SEARCH flavors FOR 'Tree_move'.
219 IF sy-subrc = 0.
220 CALL METHOD drag_drop_object->set_flavor
221 EXPORTING newflavor = 'Tree_move'.
222 ELSE.
223 CALL METHOD drag_drop_object->abort.
224 ENDIF.
225 ELSE.
226 SEARCH flavors FOR 'Tree_copy'.
227 IF sy-subrc = 0.
228 CALL METHOD drag_drop_object->set_flavor
229 EXPORTING newflavor = 'Tree_copy'.
230 ELSE.
231 CALL METHOD drag_drop_object->abort.
232 ENDIF.
233 ENDIF.
234
235 ENDMETHOD.
236 METHOD left_drag.
237 DATA drag_object TYPE REF TO lcl_drag_object.
238 DATA node_key TYPE node_str-node_key.
239 CREATE OBJECT drag_object.
240 LOOP AT node_key_table INTO node_key.
241 READ TABLE node_itab_left WITH KEY node_key = node_key
242 INTO node.
243
244 APPEND node-text TO drag_object->text.
245 ENDLOOP.
246 drag_drop_object->object = drag_object.
247 ENDMETHOD.
248
249 METHOD right_drop.
250 DATA drag_object TYPE REF TO lcl_drag_object.
251 data new_nodes like node_itab_right.
252 data new_node type node_str.
253 CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
254 drag_object ?= drag_drop_object->object.
255 ENDCATCH.
256 IF sy-subrc = 1.
257 " data object has unexpected class
258 " => cancel Drag & Drop operation
259 CALL METHOD drag_drop_object->abort.
260 EXIT.
261 ENDIF.
262 loop at drag_object->text into new_node-text.
263 perform add_node changing node_key new_node new_nodes
264 node_itab_left.
265 endloop.
266 call method tree_right->add_nodes
267 exporting node_table = new_nodes
268 table_structure_name = 'NODE_STR'.
269 ENDMETHOD.
270 METHOD drop_complete.
271 DATA node_key TYPE node_str-node_key.
272 IF drag_drop_object->flavor = 'Tree_move_to_Edit'.
273 LOOP AT node_key_table INTO node_key.
274 CALL METHOD tree_left->delete_node
275 EXPORTING node_key = node_key.
276 DELETE node_itab_left WHERE node_key = node_key.
277 ENDLOOP.
278 ENDIF.
279
280 ENDMETHOD.
281 ENDCLASS.
282
283 *&---------------------------------------------------------------------*
284 *& Form ADD_NODE
285 *&---------------------------------------------------------------------*
286 * text
287 *----------------------------------------------------------------------*
288 * <--P_NEW_NODE text
289 * <--P_NEW_NODES text
290 * <--P_NODE_ITAB_LEFT text
291 *----------------------------------------------------------------------*
292 FORM ADD_NODE CHANGING node_key
293 NEW_NODE type node_str
294 NEW_NODES like node_itab_left
295 NODE_ITAB_LEFT like node_itab_left.
296 data lines type i.
297 describe table node_itab_left lines lines.
298 new_node-node_key = lines.
299 new_node-isfolder = 'X'.
300 new_node-dragdropid = handle_tree_right.
301 new_node-relatkey = node_key.
302
303 APPEND new_node TO new_nodes.
304 append new_node to node_itab_left.
305
306 ENDFORM. " ADD_NODE
SAP Drag or drop tree的更多相关文章
- 20 Best Drag and Drop jQuery Plugins--reference
		
reference from:http://dizyne.net/20-best-drag-drop-jquery-plugins/ jQuery has done a great job repla ...
 - delphi Drag and Drop sample 鼠标拖放操作实例
		
Drag and Drop is a common operation that makes the interface user friendly: a user can drag/drop inf ...
 - HTML5 之拖放(drag与drop)
		
拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...
 - 通过HTML5的Drag and Drop生成拓扑图片Base64信息
		
HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...
 - 基于HTML5的Drag and Drop生成图片Base64信息
		
HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag ...
 - Android 用户界面---拖放(Drag and Drop)(三)
		
设计拖放操作 本节主要内容如下: 1. 如何开始拖拽: 2. 在拖拽期间如何响应事件: 3. 如何响应落下事件: 4. 如何结束拖放操作. 开始拖拽 用户使用一个拖拽手势开始拖拽,通常是在 ...
 - Android 用户界面---拖放(Drag and Drop)(二)
		
拖拽事件监听器和回调方法 View对象既可以用实现View.OnDragListener接口的拖放事件监听器,也可以用View对象的onDragEvent(DragEvent)回调方法来接收拖拽事 ...
 - Android 用户界面---拖放(Drag and Drop)(一)
		
用Android的拖放框架,能够允许用户使用图形化的拖放手势,把数据从当前布局中的一个View对象中移到另一个View对象中.这个框架包括:拖拽事件类.拖拽监听器.以及辅助的方法和类. 尽管这个框架主 ...
 - [Javascript + rxjs] Simple drag and drop with Observables
		
Armed with the map and concatAll functions, we can create fairly complex interactions in a simple wa ...
 
随机推荐
- Model, HttpServletRequest, ModelMap区别
			
看了spring mvc的底层会发现,model数据最终还是写到HttpServletRequest属性中,只是model的写法更体现了MVC思想减少各层间耦合 写法: 1.request.setAt ...
 - Linux根目录下各文件目录的作用
			
bin 用户二进制可执行文件 boot 系统启动引导文件 dev[device] 系统中使用的外部设备,但不是放的外部设备的驱动.一个访问这些外部 ...
 - go学习第一课--语法基础
			
一.hello world 新建文件helloworld.go package main import "fmt" func main() { fmt.Println( ...
 - 【kubernetes 问题排查】使用 kubeadm 部署时遇到的问题
			
引言 再使用kubeadm部署集群时会多少遇到一些问题,这里做下记录,方便后面查找问题时有方向,同时也为刚要入坑的你指明下方向,让你少走点弯路 问题汇总 The connection to the s ...
 - Bugku练习题---Web---计算器
			
Bugku练习题---Web---计算器 flag:flag{8b4b2f83db2992d17d770be1db965147} 解题步骤: 1.观察题目,打开场景 2.场景打开后发现是一个验证码界面 ...
 - matplotlib画图工具/绘制散点图
			
绘制散点图 import matplotlib.pyplot as plt fig=plt.figure() ax = fig.add_subplot(111) ax.scatter(x,y, s,c ...
 - react实战系列 —— 我的仪表盘(bizcharts、antd、moment)
			
其他章节请看: react实战 系列 My Dashboard 上一篇我们在 spug 项目中模仿"任务计划"模块实现一个类似的一级导航页面("My任务计划") ...
 - junethack使用指南
			
本文面向有志于参加Nethack六月衍生大赛,且具有一定英文水平的玩家. 首先,在Junethack服务器页面挑一个在线服务器的网站,个人推荐 hardfought.org,因为访问速度较快. 然后, ...
 - CSS预编译器
			
零.CSS预编译器 CSS预处理器是指对生成CSS前的某一语法的处理.CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,供项目使用 CSS预处理器为CSS增加一 ...
 - Windows Terminal无法加载WSL  [process exited with code 4294967295 (0xffffffff)]
			
在Windows Terminal中WSL无法打开错误代码是 process exited with code 4294967295 (0xffffffff),但在命令行中 通过 "C:\W ...