Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Include ZTMP_KUNDEN_BESTELLLCL
*&---------------------------------------------------------------------*
class lcl_eventhandler definition.
public section.
methods:
handle_tree_drag
for event on_drag
of cl_gui_simple_tree
importing node_key drag_drop_object,
handle_alv_drop
for event ondrop
of cl_gui_alv_grid
importing e_row e_column e_dragdropobj.
private section.
data: gf_matnr type matnr.
endclass. "lcl_eventhandler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_eventhandler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_eventhandler implementation.
method handle_tree_drag.
data: lf_node_key type tv_nodekey,
lf_node_text type text.
data: ls_treenode type mtreesnode.
move node_key to lf_node_key.
read table gt_treenode into ls_treenode with key node_key = lf_node_key.
move ls_treenode-text to lf_node_text.
move lf_node_text to gf_matnr.
endmethod. "handle_tree_drag
method handle_alv_drop.
data: ls_vbap type zbma_vbap.
data: lc_gui_alv type ref to cl_gui_alv_grid.
catch system-exceptions move_cast_error = 1.
gf_vbeln_count = gf_vbeln_count + 1.
gf_posnr = gf_posnr + 10.
write gf_vbeln_count to gf_vbeln.
select single brgew ntgew ean11
from mara into corresponding fields of ls_vbap
where matnr eq gf_matnr.
move gf_vbeln to ls_vbap-vbeln.
move gf_posnr to ls_vbap-posnr.
append ls_vbap to gt_vbap.
call method lc_gui_alv->refresh_table_display.
endcatch.
if sy-subrc <> 0.
call method e_dragdropobj->abort.
endif.
endmethod. "handle_alv_drop
endclass. "lcl_eventhandler IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_buy DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_buy definition.
public section.
methods: create_alv.
private section.
endclass. "lcl_buy DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_buy IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_buy implementation.
method create_alv.
data: lc_container type ref to cl_gui_custom_container,
lc_gui_alv type ref to cl_gui_alv_grid,
lc_eventhandler type ref to lcl_eventhandler.
if lc_gui_alv is initial.
create object lc_container
exporting
container_name = 'C_CONTAINER_ALV'
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
create object lc_gui_alv
exporting
i_parent = lc_container
exceptions
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3.
gc_layout-cwidth_opt = 'X'.
call method lc_gui_alv->set_table_for_first_display
exporting
i_structure_name = 'ZMM_ART_MEINH'
is_layout = gc_layout
changing
it_outtab = gt_vbap.
create object lc_eventhandler.
set handler: lc_eventhandler->handle_alv_drop for lc_gui_alv.
else.
call method lc_gui_alv->refresh_table_display.
endif.
endmethod. "create_alv
endclass. "lcl_buy IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_make_tree DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_make_tree definition.
public section.
methods: create,
fill.
private section.
"Typesdefinition für Nodetree
types: begin of lty_tree,
mtart type mtart,
matnr type matnr,
end of lty_tree.
"Datendefinition
data: lct_tree type table of lty_tree.
"Containerdefinition
data: lcc_guitree type ref to cl_gui_simple_tree.
methods: selectdb.
endclass. "make_tree DEFINITION
*----------------------------------------------------------------------*
* CLASS make_tree IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_make_tree implementation.
method selectdb.
constants: lf_roh(3) type c value 'ROH',
lf_halb(4) type c value 'HALB',
lf_zfe2(4) type c value 'ZFE2'.
select matnr mtart from mara into corresponding fields of table lct_tree
where mtart in (lf_roh, lf_halb, lf_zfe2).
endmethod. "selectdb
method create.
data: lc_container type ref to cl_gui_custom_container,
lc_eventhandler type ref to lcl_eventhandler,
lc_buy type ref to lcl_buy.
data: lt_regi_event type cntl_simple_events.
me->selectdb( ).
"Container erzeugen
create object lc_container
exporting
container_name = 'C_CONTAINER_TREE'
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
"Anwendungscontainer
create object lcc_guitree
exporting
parent = lc_container
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
me->fill( ).
create object lc_eventhandler.
set handler: lc_eventhandler->handle_tree_drag for lcc_guitree.
"Aufrufen der ALV Grid
create object lc_buy.
call method lc_buy->create_alv.
endmethod. "create_doking
method fill.
field-symbols: <ls_tree> type lty_tree.
data: ls_treenode type mtreesnode,
lf_counter(6) type n,
lf_treehandler type i,
lf_alvhandler type i,
lf_effect type i.
"Kommunikation herstellen zwischen zwei Drag&Drop Objekte
create object: gc_alv,
gc_tree.
call method gc_tree->add
exporting
flavor = 'matsh'
dragsrc = 'X'
droptarget = ' '
effect = lf_effect.
call method gc_tree->get_handle
importing
handle = lf_treehandler.
call method gc_alv->add
exporting
flavor = 'matsh'
dragsrc = ' '
droptarget = 'X'
effect = lf_effect.
call method gc_alv->get_handle
importing
handle = lf_alvhandler.
gc_layout-s_dragdrop-grid_ddid = lf_alvhandler.
loop at lct_tree assigning <ls_tree>.
at new mtart.
ls_treenode-node_key = <ls_tree>-mtart.
"Löschen, damit Werte von Unterknote nicht übernimmt.
clear: ls_treenode-relatkey,
ls_treenode-relatship,
ls_treenode-n_image,
ls_treenode-exp_image,
lf_counter,
ls_treenode-dragdropid.
ls_treenode-isfolder = 'X'.
ls_treenode-text = <ls_tree>-mtart.
append ls_treenode to gt_treenode.
endat.
at new matnr.
clear: ls_treenode-isfolder.
lf_counter = lf_counter + 1.
concatenate <ls_tree>-mtart lf_counter into ls_treenode-node_key.
ls_treenode-relatship = cl_gui_simple_tree=>relat_last_child.
ls_treenode-relatkey = <ls_tree>-mtart.
ls_treenode-text = <ls_tree>-matnr.
ls_treenode-dragdropid = lf_treehandler.
call function 'ICON_CREATE'
exporting
name = 'ICON_SET_B'
info = text-mat
importing
result = ls_treenode-n_image
exceptions
others = 4.
ls_treenode-exp_image = ls_treenode-n_image.
endat.
append ls_treenode to gt_treenode.
endloop.
call method lcc_guitree->add_nodes
exporting
table_structure_name = 'MTREESNODE'
node_table = gt_treenode.
endmethod. "fill
endclass. "make_tree IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcl_kunden DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_kunden definition.
public section.
methods: selectdb importing pf_kunnr type kunnr
exporting pf_name1 type name1_gp
pf_name2 type name2_gp.
private section.
types: begin of lty_kun,
kunnr type kunnr,
name1 type name1_gp,
name2 type name2_gp,
end of lty_kun.
data: lct_kunnumber type lty_kun.
endclass. "lcl_kunden DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_kunden IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_kunden implementation.
method selectdb.
select single kunnr name1 name2 from kna1 into corresponding fields of lct_kunnumber
where kunnr eq pf_kunnr.
pf_name1 = lct_kunnumber-name1.
pf_name2 = lct_kunnumber-name2.
endmethod. "selectdb
endclass. "lcl_kunden IMPLEMENTATION
Code: Alles auswählen.
set handler: lc_eventhandler->handle_tree_drag for lcc_guitree.
Code: Alles auswählen.
create object: gc_alv,
gc_tree.
call method gc_tree->add
exporting
flavor = 'matsh'
dragsrc = 'X'
droptarget = ' '
effect = lf_effect.
call method gc_tree->get_handle
importing
handle = lf_treehandler.
call method gc_alv->add
exporting
flavor = 'matsh'
dragsrc = ' '
droptarget = 'X'
effect = lf_effect.
call method gc_alv->get_handle
importing
handle = lf_alvhandler.
gc_layout-s_dragdrop-grid_ddid = lf_alvhandler.