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