Gelöst Clientseitige Validierung vor dem Speichern

Mr. SMISS

Neues Mitglied
Hallo zusammen,

ich stehe vor der kniffligen Herausforderung in der ReWe Buchungserfassung vor dem Speichern clientseitig eine Validierung durchführen zu müssen.

Im Dokument "AppDesigner im Detail", Kapitel 16.1.6. ist ein ähnlicher Fall beschrieben, jedoch geschieht dort die Validierung serverseitig, wenn ich das richtig verstehe.

Mein bisheriger Ansatz wäre der Folgende:
- Speichern Button würde ich mit einem eigenen Speichern-Button
- Dieser Speicherbutton enthält ein Makro, welches ein verstecktes Kontextmenü aufruft, welches wiederum einen AppLibraryCall (clientseitiger Aufruf) enthält, welcher die notwendigen clientseitigen Validierungen übernimmt. Schlägt diese Validierung fehl, wird eine Exception ausgelöst und die Ausführung des Makros damit unterbrochen. Wenn nicht, wird im Makro das System-Makro "DatenSatz speichern" aufruft.

Dieser Ansatz funktioniert soweit auch, bis auf das Ersetzen des Speichern-Buttons.
Wenn ich im AppDesigner das Kontextmenü "Speichern" aus der Lösung Sage->Rewe->Oberflächen->Kontextmenüs->Buchungserfassung in meine eigene kopiere, wird der Speichern Button nicht ersetzt, sondern erscheint doppelt.

Hat mir jemand einen Tipp warum dieser doppelt erscheint und nicht ersetzt wird, oder hat jemand vielleicht einen besseren Ansatz clientseitige Validierungen durchzuführen?
 
Das Beispiel in 16.1.6 ist prinzipiell geeignet für Ihr Vorhaben. Leider aber nicht Ihr Vorgehen, denn Kontextmenüeinträge können nicht ersetzt bzw. erweitert werden. Das ist aber auch nicht nötig. Will man vor dem Speichern (und nach dem Klick auf dem Speichern-Button) eines Data-Edit-Elementes die Aktion abbrechen, dann verwendet man das Ereignis "Vor Änderung" der Datenstruktur. So ist es in 16.1.6 beschrieben (oder auch im Thread "Belegerfassung/Meldung"). Dabei ist es unerheblich, ob es ein serverseitiger oder clientseitiger Aufruf ist.

Zu Ihrer Execption: Sie sollten vor dem Aufruf Ihrer Dll eine lokale Variable definieren, die Sie in der Dll entsprechend setzen und dann im Makro auswerten. Das arbeiten mit AppLibraryCall und lokalen Variablen ist in 16.1.9 beschrieben.

Edit: Name des Ereignisses war falsch
 
Zuletzt bearbeitet:
Vielen Dank, das hat funktioniert!

Ich musste im Makro noch prüfen ob das Makro auch clientseitig ausgeführt wird, aber dazu gibt es ja die Funktion ISRUNNINGONSERVER().

Für die Anderen mit ähnlicher Problemstellung, habe ich einen Screenshot des Makros an diesen Beitrag gehängt. Das KontextMenu darin führt den AppLibraryCall aus, welcher die clientseitige Validierung durchführt.

Vielen Dank nochmals!
 

Anhänge

  • 25-04-_2018_13-47-25.png
    25-04-_2018_13-47-25.png
    32,1 KB · Aufrufe: 43
Zurück
Oben