1 Themenübersicht
Die Hook-Contract-Definition „Materialbuchungen“ dient der Erweiterung des Speicherns von Materialbuchungen. Sie fügen damit beispielsweise zusätzliche Prüfungen der Materialbuchungsdaten hinzu, wenn Sie diese Daten durch neue Attribute erweitert haben.
In dieser Dokumentation ist beschrieben, welche Erweiterungen Sie mit der Hook-Contract-Definition vornehmen können und welche Einschränkungen und Besonderheiten Sie beachten müssen.
Eine Schnittstellenbeschreibung finden Sie im zugehörigen Entwicklungsobjekt vom Typ „Hook Contract“:
com.cisag.app.inventory.hook.log.InventoryTransaction
Ausführliche Informationen zu den in den Schnittstellen deklarierten Methoden finden Sie in den zugehörigen Java-Klassen.
Informationen zur Hook-Infrastruktur finden Sie in der Dokumentation „Hook Contracts“.
2 Zielgruppe
Programmierer
3 Beschreibung
3.1 Erweiterungen
Mithilfe der Hook-Contract-Definition für das Speichern von Materialbuchungen sind die im Folgenden beschriebenen Erweiterungen möglich.
3.1.1 Vorbereitung einer Materialbuchung
Eine zu speichernde Materialbuchung kann mithilfe von Hook-Implementierungen mit Daten angereichert werden, z. B. aus dem PostTransactionData-Container. Insbesondere können neu hinzugefügte Attribute für die Materialbuchung aufbereitet werden, unter anderem damit sie geprüft werden können.
Diese Vorbereitung erfolgt noch vor der Prüfung der Materialbuchung, d. h. im Fall von Umbuchungen und Umwertungen ist die Materialbuchung noch nicht in zwei Einzelbuchungen aufgeteilt (die Quell- und Zielattribute stehen noch in derselben Materialbuchung).
3.1.2 Zusätzliche Prüfungen
Für eine zu speichernde Materialbuchung können mithilfe von Hook-Implementierungen zusätzliche Prüfungen durchgeführt werden. Insbesondere sollten die Daten geprüft werden, die durch das Hinzufügen neuer Attribute bei der Vorbereitung einer Materialbuchung aufbereitet wurden.
Die zusätzlichen Prüfungen erfolgen noch vor der Prüfung der Materialbuchung, d. h. im Fall von Umbuchungen und Umwertungen ist die Materialbuchung noch nicht in zwei Einzelbuchungen aufgeteilt (die Quell- und Zielattribute stehen noch in derselben Materialbuchung).
Hinweis:
Warnungen dürfen bei den zusätzlichen Prüfungen nicht verwendet werden, da diese bei Materialbuchungen aus Geschäftsprozessen nicht bestätigt werden können und somit zu einem Verhalten führen würden, das dem eines Fehlers gleicht.
3.1.3 Aktualisierung einer Materialbuchung
Die bei der Vorbereitung einer Materialbuchung neu gesetzten Attribute können während des Speicherns der Materialbuchung, noch vor dem Speichern in der Datenbank, aktualisiert werden. Dies ist vor allem bei Umbuchungen und Umwertungen sinnvoll, wenn die neuen Attribute in der Buchung und der Gegenbuchung unterschiedlich gesetzt sein müssen, und die Verteilung der Attribute bei der Vorbereitung der Materialbuchung noch nicht möglich ist.
Hinweise:
Nach diesem Schritt erfolgen keine weiteren Prüfungen der Materialbuchung, sodass fehlerhafte Daten nicht mehr erkannt werden.
Beim Aufruf des Hooks sind die Vorzeichen der Mengen, Preise und Werte der Materialbuchung dem Vorgang entsprechend ggf. umgekehrt. Beachten Sie dies, wenn Sie die aktualisierten Werte für weitere Berechnungen verwenden.
3.2 Einschränkungen
Alle Hook-Aufrufe der Hook-Contract-Definition „Materialbuchungen“ beschränken sich auf den Zeitpunkt des Speicherns einer Materialbuchung. Bei der Verarbeitung der Materialbuchung werden die Hooks nicht aufgerufen.
3.3 Besonderheiten
Beim Buchen von Ladeeinheiten werden der InventoryTransactionPrepareHook und der InventoryTransactionValidateHook sowohl für die Materialbuchung für die Ladeeinheit selbst als auch für die Materialbuchungen für den Inhalt der Ladeeinheit aufgerufen. Der InventoryTransactionUpdateHook wird nur für den Inhalt der Ladeeinheit aufgerufen.
Beim Buchen in der Anwendung „Materialbuchungen“ und durch den Import werden der InventoryTransactionPrepareHook und der InventoryTransactionValidateHook bereits in der Anwendung oder in der Importlogik aufgerufen, denn in beiden Fällen findet eine Prüfung der Materialbuchung bereits vor der Übergabe an die eigentliche Buchungslogik (InventoryOnhandLogic) statt. Dies kann dazu führen, dass diese Hooks zweimal aufgerufen werden.
Di Hook-Contract-Definition für das Speichern von Materialbuchungen arbeitet mit optionalen Einschränkungen, die wie folgt aufgebaut sind.
3.3.1 Materialbuchungen aus Geschäftsprozessen
Materialbuchungen aus Geschäftsprozessen verwenden den Restriktionstyp „businessObject” mit dem Bezeichner „source“, wobei als Business Object die Header-Klasse des Buchungsauftrags verwendet wird.
Beispiel:
Bei der Abschlussbuchung eines Lieferauftrags dient der Lieferauftrag selbst als Buchungsauftrag, so dass als Header-Klasse com.cisag.app.sales.obj.ShippingOrder.class verwendet wird.
Hinweis:
Materialbuchungen aus Geschäftsprozessen, bei denen der Buchungsauftrag nicht ermittelt werden kann (z. B. auf Grund einer fehlerhaften Angabe), werden genauso behandelt wie manuelle Materialbuchungen.
3.3.2 Materialbuchungen aus der Inventur und der Inventurbewertung
Obwohl die Inventur und die Inventurbewertung keine Aufträge sind, wird genau wie bei den Aufträgen als Restriktionstyp „businessObject“ mit dem Bezeichner „source“ verwendet. Als Business-Object-Klasse wird bei der Inventur com.cisag.app.inventory.physical.obj.PhysicalInventory.class verwendet und bei die Inventurbewertung com.cisag.app.inventory.obj.PhysicalInventoryValuationParameters.class.
3.3.3 Manuelle und importierte Materialbuchungen sowie Materialbuchungen aus der Anwendung „Ausprägungen verschneiden/splitten“
Alle manuellen und importierten Materialbuchungen sowie Materialbuchungen, die in der Anwendung „Ausprägungen verschneiden/splitten“ entstehen, verwenden den Restriktionstyp „businessObject“ mit dem Bezeichner „source“ und der Business-Object-Klasse com.cisag.app.inventory.obj.InventoryTransaction.class.