Gelöst Belegerfassung/ Meldung

Hallo zusammen,

ich habe die Anforderung, eine Prüfung vor dem Speichern des Beleges einzufügen.

Es sollen diverse Sachen geprüft und eine entsprechende Meldung in Form von einer Messagebox mit OK Button angezeigt werden.

Zur Verdeutlichung:
Wie ich ein Hinweis über die Errorcollection ausgebe, das weiß ich. Hier geht es um eine Messagebox.

Für die Hilfe im Voraus besten Dank!

Gruß Vitalij
 
Ein Beispiel dafür finden Sie in der Dokumentation "AppDesigner im Detail", Kapitel 16.1.6. Die Schritte 5+6 wären hier relevant. Falls ein Abbruch des Speicherns erwünscht ist, verwenden Sie das Makro "Abbruch".
 
Guten Tag,

im oben genannten Beispiel wird der Fall mit einem Kontextmenü erklärt.
In meinem Fall soll die Prüfung erfolgen sobald der Benutzer in der Belegerfassung auf Speichern klickt.
 
Guten Tag Herr Semenov,
kurz zu Ihrem Post: der Funktionsaufruf DataServiceExecute erfolgt aus einem Kontextmenüeintrag (Position=0, also versteckt). Aufgerufen wird dieses Kontextmenü im Ereignis "Vor Änderung" der Datenstruktur "strVKBeleg". Und dieses Ereignis wird ausgeführt, nachdem man auf dem Speichern-Button klickt. Allerdings ist die Reihenfolge der Makrobefehle etwas anders, als im Beispiel beschrieben.

Nehmen wir folgendes Beispiel: vor dem Speichern soll die Gesamtsumme geprüft werden. Ab einer bestimmten Höhe, soll eine Messagebox (Soll gespeichert werden?) mit Ja/Nein-Entscheidung erscheinen. Bei Nein, soll das Speichern abgebrochen werden.

Ferne nehme ich an, Sie haben das Dokument "AppDesigner im Detail" offen haben und direkt das Kapitel 16.1.6 mit Schritt 5+6 verfolgen können.

Zuerst etwas Allgemeines: wenn man Geschäftslogik aus der alten Erfassung in der neuen Erfassung (gilt natürlich generell für alle Bereiche, die mit Metadaten definiert werden) implementieren will, dann sollte man den "alten" Code nach clientseitige Aktionen (Anwendereingaben) und serverseitige Aktionen (Geschäftsvorfall) unterteilen. Clientseitig kann über Metadaten noch nicht alles abgebildet werden. Wenn dies der Fall ist, dann verwendet man den Funktionsaufruf "AppLibraryCall.Sage.System" (clientseitige Dll). Lässt sich der Fall mit Metadaten abbilden, dann implementiert man Makros (clientseitige Ausführung) und serverseitige Geschäftslogik.

Zurück zum Beispiel: Eine Dialoganzeige mit Reaktion auf die Eingabe im Dialog ist durch Metadaten möglich. Es gilt also hier: wir hinterlegen Makros und programmieren serverseitig den Geschäftsvorfall.

Ein Geschäftsvorfall in einem Data-Edit-Element mit Geschäfstprozess (also Datenstruktur) ist in der Regel ein Serviceaufruf. Für die Prüfung der Gesamtsumme erstellen Sie also ein DataServiceExecute entsprechend dem Schritt 5 (ob Sie die DCM-Registrierung nun über Metadaten oder OL.dcm machen ist egal).
Was Sie jetzt noch machen müssen, ist sich zu "merken", ob eine Abfrage kommen soll oder eben nicht. Dazu benötigen Sie ein Flag analog "AbfrageStandardLager" (z.B. "AbfrageGesamtbetrag") aus dem Beispiel 16.1.6 (Schritt 2).
Im Serviceaufruf merken Sie sich in der DCMProperty-Collection des Beleges (z.B. mit dem Eintrag "AbfrageAnzeige" = 1) wenn eine Abfrage kommen soll. In der DCM VKBelegProxyBelegToContainer werten Sie den Eintrag "AbfrageAnzeige" aus. Wenn der Eintrag den Wert "1" hat, dann übertragen Sie diesen Wert in das Feld "AbfrageGesamtbetrag" des DataContainer.

Damit haben Sie einen Geschäftsprozess für die Berechnung und das Flag, welches abgefragt werden kann, um eine Aktion auf dem Client auszuführen.

Damit haben Sie alles, um im Ereignis "Vor Änderung" Ihre Anforderung abzubilden. Wie in Schritt 6 hängen Sie sich also an das Ereignis der Datenstruktur. Ihre Makroreihenfolge müssten dann so aussehen:
Wenn IsRunningOnServer() = False
AufrufenKontextMenu -> Kontextmenüeintrag mit Funktionsaufruf DataServiceExecute
Wenn [AbfrageGesamtbetrag] = 1
Meldungsfeld -> Ihre Meldung aus den Metadaten
Wenn [_DialogResult] = 2 (wenn "Nein" als Schaltfläche 2 definiert wurde)
Abbruch
EndeWenn
EndeWenn
EndeWenn
 
Hallo Herr Langmaack,

es hat funktioniert, dafür herzlichen Dank!

Die DCM's zu dem oberen Beispiel sehen so aus:
upload_2018-4-20_13-41-16.png

Makro:
upload_2018-4-20_13-34-25.png

Obere Zeile ist im Screenshot abgeschnitten:
IsRunningOnServer() = False AND [Kennzeichen] = "VLL"

Ergebnis:
upload_2018-4-20_13-40-1.png
 
Hallo,
gibt es auch die Möglichkeit der dargestellten Dialoge, wenn ich in einer Struktur bei einem Feld mich an das Ereignis "nach Aktualisierung" hänge.

Vielen Dank für ein Feedback.
Grüße
Frank
 
Zurück
Oben