Code: Alles auswählen.
* maschinell
LOOP AT t_alv_outtab ASSIGNING <alv_outtab>
WHERE ( bom_stufe EQ is_select-stufe
OR bom_stufe < is_select-stufe )
AND lang EQ is_select-lang
AND bomnr IS NOT INITIAL.
lv_node_key = sy-tabix.
handle_checkbox_change(
EXPORTING
node_key = lv_node_key ).
ENDLOOP.
Code: Alles auswählen.
METHOD handle_checkbox_change.
* BREAK-POINT.
DATA: lt_item_layout TYPE lvc_t_layi.
FIELD-SYMBOLS: <alv_output> TYPE ts_outtab.
DATA ls_outtab_line TYPE ts_outtab.
*---------------------------------------------------------------------*
refresh = ' '.
*---------------------------------------------------------------------*
READ TABLE t_alv_outtab ASSIGNING <alv_output> INDEX node_key.
IF sy-subrc EQ 0.
CASE <alv_output>-checkbox.
WHEN abap_true.
<alv_output>-checkbox = abap_false.
WHEN abap_false.
<alv_output>-checkbox = abap_true.
ENDCASE.
ELSE.
EXIT.
ENDIF.
*---------------------------------------------------------------------*
o_alv_tree->get_outtab_line(
EXPORTING
i_node_key = node_key " node key
IMPORTING
e_outtab_line = ls_outtab_line " line of outtab
* e_node_text = " node-text
et_item_layout = lt_item_layout " Layoutstruktur für Items des ALV-Tree Controls
* es_node_layout = " Knotenlayout ALV-Tree Control
EXCEPTIONS
node_not_found = 1
OTHERS = 2
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ls_outtab_line-checkbox = <alv_output>-checkbox.
*---------------------------------------------------------------------*
o_alv_tree->change_node(
EXPORTING
i_node_key = node_key " key of the changed line
i_outtab_line = ls_outtab_line " outtab line to be changed
* is_node_layout = " node layout
* it_item_layout = " item layout
* i_node_text = " Knotentext
* i_u_node_text = " 'X': Knotentext ändern
EXCEPTIONS
node_not_found = 1
OTHERS = 2
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
o_alv_tree->frontend_update( ).
CALL METHOD cl_gui_cfw=>flush.
ENDMETHOD.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801
Code: Alles auswählen.
CASE <fcat>-fieldname.
WHEN 'CHECKBOX'.
<fcat>-outputlen = 4.
<fcat>-fix_column = 'X'.
<fcat>-checkbox = 'X'.
<fcat>-edit = 'X'.
s_item_layout-class = cl_gui_column_tree=>item_class_checkbox.
s_item_layout-editable = abap_true.
ENDCASE.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801
Code: Alles auswählen.
METHOD register_events.
DATA: lt_events TYPE cntl_simple_events,
ls_event TYPE cntl_simple_event.
o_alv_tree->get_registered_events(
IMPORTING
events = lt_events " simple_events
EXCEPTIONS
cntl_error = 1
OTHERS = 2 ).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ls_event-eventid = cl_gui_column_tree=>eventid_checkbox_change.
ls_event-appl_event = 'X'.
APPEND ls_event TO lt_events.
CALL METHOD o_alv_tree->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT
ENDIF.
ENDMETHOD.
Code: Alles auswählen.
READ TABLE t_alv_outtab ASSIGNING <alv_output> INDEX node_key.
IF sy-subrc EQ 0.
CASE <alv_output>-checkbox.
WHEN abap_true.
<alv_output>-checkbox = abap_false.
WHEN abap_false.
<alv_output>-checkbox = abap_true.
ENDCASE.
ELSE.
EXIT.
ENDIF.
...
ls_outtab_line-checkbox = <alv_output>-checkbox.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801
Doch - der Transport sollte eigentlich stattfinden. Aber nur in Richtung "Vom TreeGrid in Richtung Tabelle". D.h., dass du normalerweise nach dem Update der ALV-Zeile über die Tree-Methoden auch in der Originaltabelle die Daten angepasst haben solltest.Icke0801 hat geschrieben:Nachfrage: Wenn ich herausfinden möchte, welche Knoten nun mit ausgewählter Checkbox versehen sind, muss ich etwa über alle Knoten lesen und das Layout prüfen? Ein Transport in die ALV_TAB findet ja anscheinend nicht statt. Ist das wirklich so umständlich, oder gibt es da einen einfacheren Weg?
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Icke0801
black_adept hat geschrieben: Doch - der Transport sollte eigentlich stattfinden. Aber nur in Richtung "Vom TreeGrid in Richtung Tabelle". D.h., dass du normalerweise nach dem Update der ALV-Zeile über die Tree-Methoden auch in der Originaltabelle die Daten angepasst haben solltest.
Code: Alles auswählen.
o_alv_tree->column_optimize( ).
o_alv_tree->update_calculations( ).
o_alv_tree->frontend_update( ).
CALL METHOD cl_gui_cfw=>flush.