Code: Alles auswählen.
l_cells = er_data_changed->mt_mod_cells.
Code: Alles auswählen.
DATA: er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
Code: Alles auswählen.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'y_tr_table_tool'
i_msgty = 'E'
i_msgno = '123'
* i_msgv1 = '010'
* i_msgv2 =
* i_msgv3 =
* i_msgv4 =
i_fieldname = <fs1>
i_row_id = '1'.
Code: Alles auswählen.
METHODS mgmt_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING
er_data_changed
e_onf4
e_onf4_before
e_onf4_after.
Code: Alles auswählen.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
z_handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
METHODS:
mgmt_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING
er_data_changed
e_onf4
e_onf4_before
e_onf4_after.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD z_handle_data_changed.
l_cells = er_data_changed->mt_mod_cells .
LOOP AT l_cells INTO wa_cells.
PERFORM pruefe.
ENDLOOP.
ENDMETHOD.
METHOD mgmt_data_changed.
PERFORM vergleich.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '(y_tr_table_tool)'
i_msgty = 'E'
i_msgno = '123'
i_fieldname = <fs1>
i_row_id = <fs2>.
ENDMETHOD.
ENDCLASS.
FORM pruefe.
ASSIGN COMPONENT 'FIELDNAME' OF STRUCTURE wa_cells TO <fs1>.
ASSIGN COMPONENT 'ROW_ID' OF STRUCTURE wa_cells TO <fs2>.
ASSIGN COMPONENT 'VALUE' OF STRUCTURE wa_cells TO <fs3>.
READ TABLE t_1 INDEX <fs2> INTO wa_pr1.
auf_1 = wa_pr1.
ASSIGN COMPONENT <fs1> OF STRUCTURE auf_1 TO <fs4>.
<fs4> = <fs3>.
ENDFORM.
FORM vergleich.
IF auf_1-py_abn = 'X' AND auf_1-py_citi = 'X'.
ELSEIF auf_1-py_abn = 'X' AND auf_1-py_nord = 'X'.
ELSEIF auf_1-py_abn = 'X' AND auf_1-py_not = 'X'.
ELSEIF auf_1-py_citi = 'X' AND auf_1-py_nord = 'X'.
ELSEIF auf_1-py_citi = 'X' AND auf_1-py_not = 'X'.
ELSEIF auf_1-py_nord = 'X' AND auf_1-py_not = 'X'.
ENDIF.
ENDFORM.
Code: Alles auswählen.
ER_DATA_CHANGED Type REF TO CL_ALV_CHANGED_DATA_PROTOCOL Datenänderungsobjekt
E_ONF4 Type CHAR01 Im F4 Ereignis gerufen
E_ONF4_BEFORE Type CHAR01 Im F4 Ereignis vor der F4 Verarbeitung gerufen
E_ONF4_AFTER Type CHAR01 Im F4 Ereignis nach der F4 Verarbeitung gerufen
Anonymous hat geschrieben:Du brauchst nur eine Handlermethode, nicht zwei! Bei einer Handlermethode musst du dir angucken, welche Parameter von der Ereignis auslösenden Klasse exportiert werden: (SE24->"cl_gui_alv_grid"->ereignisse->"data_changed"->Parameter).
Ergebnis:Bei der Definition deiner Handlermethode musst du genau diese Parameter als Import-Parameter definieren (also bei z_handle_data_changed). mgmt_data_changed brauchst du dann nicht!Code: Alles auswählen.
ER_DATA_CHANGED Type REF TO CL_ALV_CHANGED_DATA_PROTOCOL Datenänderungsobjekt E_ONF4 Type CHAR01 Im F4 Ereignis gerufen E_ONF4_BEFORE Type CHAR01 Im F4 Ereignis vor der F4 Verarbeitung gerufen E_ONF4_AFTER Type CHAR01 Im F4 Ereignis nach der F4 Verarbeitung gerufen
Dann definierst du eine Nachrichtenklasse (SE91, entspricht i_msgid). In dieser Nachrichtenklasse kannst du Meldungen (mit einer eindeutigen Meldungsnummer innerhalb der Nachrichtenklasse, entspricht i_msgno) definieren. In jede Meldung kannst du maximal 4 Variablen einbauen (mit &-Zeichen, z. B. "Es ist der Fehler & aufgetreten", entspricht i_msgv1 - i_msgv4). Schließlich besagt i_msgty, wie schwer der Fehler ist.
Guck mal unter der F1-Hilfe für die ABAP-MESSAGE-Anweisung.
Innerhalb von PRÜFE würdest du dann in den If-Anweisungen jedes Mal ein entsprechendes ADD_PROTOCOL_ENTRY aufrufen. Fertig.
Dabei kannst du aber nicht einfach irgendeine Nachrichtenklasse definieren. Sie muss auch in der SE91 definiert sein.
Gruß Heiko.
Code: Alles auswählen.
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
z_handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING
er_data_changed.
PRIVATE SECTION.
METHODS:
perform_semantic_checks
IMPORTING
pr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD z_handle_data_changed.
l_cells = er_data_changed->mt_mod_cells .
LOOP AT l_cells INTO wa_cells.
PERFORM pruefe.
ENDLOOP.
CALL METHOD perform_semantic_checks( er_data_changed ).
ENDMETHOD.
METHOD perform_semantic_checks.
PERFORM vergleich.
ENDMETHOD.
ENDCLASS.
FORM vergleich.
IF auf_1-py_abn = 'X' AND auf_1-py_citi = 'X'.
perform screen1.
ELSEIF auf_1-py_abn = 'X' AND auf_1-py_nord = 'X'.
perform screen1.
ELSEIF auf_1-py_abn = 'X' AND auf_1-py_not = 'X'.
perform screen1.
ELSEIF auf_1-py_citi = 'X' AND auf_1-py_nord = 'X'.
perform screen1.
ELSEIF auf_1-py_citi = 'X' AND auf_1-py_not = 'X'.
perform screen1.
ELSEIF auf_1-py_nord = 'X' AND auf_1-py_not = 'X'.
perform screen1.
ENDIF.
ENDFORM.
FORM screen1.
call method pr_data_changed->add_protocol_entry
exporting
i_msgid = 'y_tr_tabletool'
i_msgno = '111'
i_msgty = 'E'
i_fieldname = <fs1>
i_row_id = <fs2>.
error_in_data = 'X'.
ENDFORM.
Code: Alles auswählen.
CREATE OBJECT pr_data_changed.
CALL METHOD pr_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'y_tr_tabletool1'
i_msgty = 'E'
i_msgno = '000'
I_MSGV1 = text-111
i_fieldname = wa_cells-fieldname
I_ROW_ID = wa_cells-row_id.
CALL METHOD pr_data_changed->display_protocol.
Code: Alles auswählen.
CALL METHOD pr_data_changed->add_protocol_entry
EXPORTING
i_msgid = 'Y_TR_TABLETOOL1'
i_msgty = 'E'
i_msgno = '000'
I_MSGV1 = text-111
i_fieldname = wa_cells-fieldname
I_ROW_ID = wa_cells-row_id.