Felder mit der Anwendung synchronisieren
Manche Anwendungen halten in ihren eigenen Datenbanktabellen identische Kopien einiger Adressfelder. Dafür gibt es eine Reihe von Gründen. Ein Beispiel ist der SAP Business Partner, der eine Kopie der Namensfelder in den Business Partner-Tabellen hält, da ein Geschäftspartner einen Namen haben muss, selbst wenn er keine Adresse hat.
In so einem Szenario müssen die Anwendungsfelder während des Dialogs mit den Adressfeldern synchronisiert werden. Dazu muss die Anwendung die Methoden GET_SYNCHRONIZED_FIELDS und SET_SYNCHRONIZED_FIELDS der Klasse CL_BSP_MODEL_ACCESS_ADDRESS implementieren.
Während der MODIFY-Methode folgt die Klasse CL_BSP_MODEL_ACCESS_ADDRESS dieser Vorgehensweise:
Sie beschafft die aktuellen Werte der synchronisierten Felder mit der Methode GET_SYNCHRONIZED_FIELDS.
Sie vergleicht diese Werte mit dem alten und dem neuen Wert in den entsprechenden Adressfeldern und bestimmt die neuen Werte der Anwendungsfelder.
Sie übergibt diese neuen Werte durch Aufrufen der Methode SET_SYNCHRONIZED_FIELDS an den Anwendung.
Der neue Wert des Felds in der Anwendungstabelle wird wie folgt bestimmt:
Wenn der Wert im Address Controller nicht geändert wurde, dann wurden mögliche Änderungen in den Anwendungsfeldern durchgeführt. Daher werden die aus den Anwendungsfeldern erhaltenen Werte auch in die Adressfelder gestellt und unverändert an die Anwendung zurückgegeben.
Wenn der von der Anwendung erhaltene Wert dem alten Wert im Address Controller entspricht, wurde der Wert in den Anwendungsfeldern nicht geändert. Daher wird der neue Wert im Address Controller behalten und an die Anwendung weitergegeben.
Wenn der von der Anwendung erhaltene Wert dem neuen Wert in Address Controller entspricht, dann wurden mögliche Änderungen simultan gemacht. In diesem Fall ist keine Aktion erforderlich, daher wird der von der Anwendung erhaltene Wert unverändert zurückgegeben.
Wenn weder der von der Anwendung erhaltene Wert, noch der alte oder der neue Wert in den Adressfeldern gleich sind, dann wurde das Feld im Address Controller und in den Anwendungsfeldern geändert, mit unterschiedlichen Ergebnissen. In diesem Fall kann nicht festgestellt werden, welche Änderung die letzte war; daher wird der Wert im Address Controller behalten und an die Anwendung übergeben.