Gelöst Infofelder in der neuen Buchungserfassung anzeigen

esc_hein

Mitglied
Teammitglied
Hallo,

ich habe die Anforderung, einige Felder in der neuen Buchungserfassung anzuzeigen. Die Felder sind in einer eigenen Feldgruppe und werden beim Laden einer Buchung gefüllt, ggf. auch beim Ändern des Buchungstextes.
Gespeichert werden soll nichts, die Felder sind nicht editierbar.

Die Umsetzung habe ich analog zu http://sage-forum.de/threads/felder-anhängen.757/ probiert.

Datenstruktur strBuchung um die Felder erweitert und an Sage.Rewe angehängt, dazu dann ediBuchungserfassung/Buchung um eine neue Feldgruppe erweitert, das wird dann auch wie erwartet in der Buchungserfassung angezeigt.

In der DCM BuchungProxyAfterLoad schreibe ich die Werte in Buchungssatz.DcmProperties, das funktioniert soweit auch inkl. Anzeige in der Buchungserfassung.

Leider führen Änderungen in vielen Feldern der Erfassung dazu, das die neuen Felder geleert werden (Belegnummer erhöhen / Belegdatum, Betrag oder Buchungstext ändern z.B.).

Ich habe probiert in den DCMs BuchungProxyBuchungToContainer und BuchungProxyContainerToBuchung
die Werte in BuchungProxy.Container zu schreiben bzw. zu lesen, das klappt aber nicht bzw. scheinen die DCMs nicht zu triggern (z.B. beim Klicken auf das Plus zum Erhöhen der Belegnummer).

Auch im Makro per FestlegenFeldWert (mit Parameter 3 = false) gesetzte Werte "überleben" eine Belegnummernerhöhung nicht.

Wie ist die korrekte Vorgehensweise, damit die Werte in den Feldern erhalten bleiben?

(Getestet in der Sage100 2017 mit LU vom 27.08.)
 
Ich habe mir mal den Code angeschaut (auch weil ich mich nicht wirklich in der Rewe auskenne). Das Erhöhen der Belegnummer ist einer normaler Daten-Service. Und ein Daten-Service läuft immer gleich ab. Der Client schickt den DataContainer zum Server, der Server macht was damit und schickt den DataContainer zurück. Und hier ist einzig die Frage: handelt es sich um das gleiche Objekt? In der Belegerfassung und in der Buchungserfassung wäre es schlicht und ergreifend zu aufwendig, das Objekt vom Client zu verwenden. Es wird auf Serverseite eine neue Instanz des DataContainer erzeugt. Daher reicht es nicht, die Daten in den DataContainer zu schreiben. Der Ablauf wäre
DCM ContainerToObjekt -> sichern der Daten von eigenen Feldern in dem Parameterbag des Objektes (DCMProperties, falls vorhanden)
DCM ObjektToContainer -> Schreiben der gesicherten Werte aus dem Parameterobjekt in den DataContainer

Sie schreiben "Ich habe probiert...". Dann müssen Sie schauen, was Sie in den DCMs falsch gemacht haben. Diese beiden DCMs sind die einzige Möglichkeit eigene Daten zwischen Client und Server zu transportieren. Ansonsten müssten Sie sich mal an die Isolationsprozesse des Applicationservers attachen und prüfen, warum die Daten in den DCMs verloren gehen.
 
Hallo Herr Langmaack,

vielen Dank für die detaillierten Infos zum Ablauf des Datentransfers.
Wie Sie richtig vermutet haben habe ich bei der Umsetzung einige Fehler gemacht (z.B. für ein Feld die Daten in dem Bag in StringValues geschrieben und probiert aus IntegerValues zu lesen etc), aber nun funktioniert das Anzeigen der Daten.
 
Zurück
Oben