Hallo.
Wenn ich dich recht verstehe, willst du eine Eingabeprüfung für einen editierbares ALV-Grid realisieren.
Dazu musst du deinem Grid mitteilen, dass es auf Eingabe-Events reagieren soll:
Code: Alles auswählen.
CALL METHOD gx_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
OTHERS = 0.
Bei Enter im Grid wird also ein Event ausgelöst, dass du aber noch mit einer eigenen Klasse abfangen musst:
Deine Handler-Methode bekommt mehrere Parameter geliefert. Einer davon ist ein Objekt der Klasse CL_ALV_CHANGED_DATA_PROTOCOL. In dieser sind alle Änderungen aufgeführt, die seit dem letzten ENTER gemacht wurden.
In der Tabelle mt_good_cells sind alle Änderungen, die eine Prüfung gegen das DD bestanden haben (sofern im Grid für die Spalte eine Prüftabelle angegeben ist oder eine Prüftabelle für die zu Grunde liegende Domäne definiert ist).
Wichtig ist, dass die Änderungen beim Aufruf der Handler-Methode noch nicht in deiner internen Tabelle gelandet sind. Daher kannst du dir die Werte, die aktuell im Grid stehen entweder aus mt_mod_cells oder mt_good_cells holen oder mit der Methode get_cell_value direkt einzelne Zellen des Grids auslesen.
Wenn du nun feststellst, das in Zelle 1,1 ein X steht und in Zelle 1,2 auch (obwohl das nicht erlaubt ist) kannst du per add_protocol_entry eine Fehlernachricht für die fehlerhafte Zelle eintragen. Dann würde ein Protokollfenster mit genau dieser Nachricht hochpoppen und die fehlerhafte Zelle rot markiert.
Guck dir die Klasse mal an, denn alles zu beschreiben wäre langwierig.
Wenn du noch Fragen hast, gerne.
Gruß Heiko.