Code: Alles auswählen.
FORM call_alv.
v_rep_id = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_GRID_TITLE = 'JUHU'
IT_FIELDCAT = gt_feldkatalog
i_callback_program = v_rep_id
i_callback_pf_status_set = 'PF'
i_callback_user_command = 'USER_COMMAND'
* is_layout = gs_layout
TABLES
T_OUTTAB = lt_test
.
ENDFORM.
Code: Alles auswählen.
FORM USER_COMMAND USING lv_okcode LIKE sy-ucomm l_selfield
TYPE slis_selfield.
lv_okcode = sy-ucomm.
case lv_okcode.
WHEN 'SAVE'.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data.
ENDIF.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Niels
Alles richtig, der ALV ruft die FORM Routine selbst auf, die du beim ALV-Aufruf angegeben hast.Niels hat geschrieben:Ich verstehe jetzt nicht wie ich in den Form rein komme oder ist das ein komplett falscher Ansatz mit das in eine Form Routine zu schreiben??
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Niels
Code: Alles auswählen.
FORM PF USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZTG_STAT'.
ENDFORM.
du solltest aber trotzdem die vom ALV ausgeblendeten Funktionen beim setzten des Status berücksichtigen:Niels hat geschrieben:und es Funktioniert.
Code: Alles auswählen.
FORM PF USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZTG_STAT' EXCLUDING rt_extab.
ENDFORM.
Da hast du das Wichtigste bereits in der FORM UsER_COMMAND enthalten:Niels hat geschrieben:Wie kann ich auf die geänderten Werte zugreifen.
Code: Alles auswählen.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data
importing e_valid = l_valid.
ENDIF.
IF l_valid IS INITIAL.
EXIT.
ENDIF.
Code: Alles auswählen.
LOOP AT er_data_changed->mt_mod_cells INTO ls_good WHERE fieldname =
'BISMT'.
...
ENDLOOP.
Nein, in der lt_test stehen die Daten dann so drin wie am FrontEnd angezeigt.Niels hat geschrieben:Gibt es nicht eine Tabelle wo die Änderungen drin stehen?
Jein, es gibt das Ereignis on_data_change des ALVs. Dort soll aber eigentlich verprobt werden ob die Eingaben korrekt sind. Man kann das Event verwenden, um sich einen Änderungslog aufzubauen. Ob es sinnvoll ist muss man selber entscheiden. Kommt auf die Änderungen an (nur Werte bestehender Sätze ändern, Sätze erfassen oder löschen etc.).Niels hat geschrieben: Wenn ich eine Routine schreibe wo ich schaue ob der Wert geändert wurde in der lt_test, erfinde ich das Rad ja neu. Oder verstehe ich da etwas falsch?
Code: Alles auswählen.
gs_events-name = 'DATA_CHANGED'.
gs_events-form = 'CALLER_EXIT'.
APPEND gs_events TO gt_events.
FORM caller_exit USING rr_data_changed TYPE REF TO
cl_alv_changed_data_protocol.
ENDFORM.
Da ich den REUSE-Baustein ewig nicht mehr verwendet habe, mir aber diese Frage gestellt wurde, reiche ich die mal weiter: Gibt es eine abschließende Liste aller Events, die man so aufrufen kann?JHM hat geschrieben:Der REUSE_ALV_GRID_LVC bietet die Möglichkeit eine CALLBACK-Form für ON_DATA_CHANGE zu verarbeiten (Tabelle gt_events).
Dann brauch man sich keine eigen Klasse schreiben.
Code: Alles auswählen.
gs_events-name = 'DATA_CHANGED'. gs_events-form = 'CALLER_EXIT'. APPEND gs_events TO gt_events. FORM caller_exit USING rr_data_changed TYPE REF TO cl_alv_changed_data_protocol. ENDFORM.
Klar -> Include LSLVC_FULLSCREENF01 -> FORM events_getralf.wenzel hat geschrieben:Gibt es eine abschließende Liste aller Events, die man so aufrufen kann?
Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
ralf.wenzel