Wprowadzenie
Definicja hook contract transakcje magazynowe służy do rozszerzenia procesu zapisu transakcji magazynowych. Umożliwia to na przykład dodanie dodatkowych walidacji danych transakcji, jeśli dane te zostały rozszerzone o nowe atrybuty.
W artykule opisano, jakie rozszerzenia można wdrożyć za pomocą definicji hook contract oraz jakie ograniczenia i szczególne przypadki należy wziąć pod uwagę.
Opis interfejsu znajduje się w odpowiadającym mu obiekcie deweloperskim typu Hook contract:
com.cisag.app.inventory.hook.log.InventoryTransaction
Szczegółowe informacje na temat metod zadeklarowanych w interfejsie znajdują się w odpowiednich klasach Java.
Informacje dotyczące infrastruktury hooków można znaleźć w artykule Hook Contracts.
Grupa docelowa
- Programiści
Opis
Rozszerzenia
Za pomocą definicji hook contract do zapisu transakcji magazynowych możliwe są następujące rozszerzenia
Przygotowanie transakcji magazynowej
Transakcja magazynowa przeznaczona do zapisania może zostać rozszerzona o dodatkowe dane przy użyciu implementacji hooka, np. z kontenera PostTransactionData. W szczególności można przetwarzać nowo dodane atrybuty transakcji magazynowej — m.in. w celu ich późniejszej walidacji.
Przygotowanie odbywa się jeszcze przed właściwą walidacją transakcji. Oznacza to, że w przypadku przeksięgowań i przeszacowań, transakcja magazynowa nie została jeszcze podzielona na dwa osobne wpisy (atrybuty źródłowe i docelowe nadal znajdują się w jednej transakcji).
Dodatkowe walidacje
Dla transakcji magazynowej, która ma zostać zapisana, można przeprowadzić dodatkowe walidacje za pomocą implementacji hooka. W szczególności należy sprawdzić dane przygotowane wcześniej — zwłaszcza te wynikające z dodanych atrybutów.
Podobnie jak w poprzednim kroku, te walidacje mają miejsce przed właściwą kontrolą transakcji magazynowej, a więc nadal nie występuje podział na wpis źródłowy i docelowy.
Aktualizacja transakcji magazynowej
Atrybuty ustawione podczas przygotowania transakcji magazynowej mogą zostać zaktualizowane w momencie zapisu — jeszcze przed zapisaniem do bazy danych. Jest to szczególnie przydatne przy przeksięgowaniach i przeszacowaniach, gdy nowe atrybuty muszą mieć różne wartości w księgowaniu głównym i przeciwstawnym, a rozdzielenie ich podczas przygotowania nie było możliwe.
W momencie wywołania hooka znaki ilości, cen i wartości mogą być odwrócone, zgodnie z logiką procesu. Należy to wziąć pod uwagę przy dalszych obliczeniach.
Ograniczenia
Wszystkie wywołania hooków w ramach definicji hook contract transakcje magazynowe ograniczają się wyłącznie do momentu zapisu transakcji magazynowej.
Podczas dalszego przetwarzania transakcji magazynowej (np. w toku procesu biznesowego) hooki nie są wywoływane.
Szczególne przypadki
Podczas księgowania jednostek ładunkowych, InventoryTransactionPrepareHook
i InventoryTransactionValidateHook
są wywoływane zarówno dla księgowania materiału dla samej jednostki ładunkowej, jak i dla księgowania materiału dla zawartości jednostki ładunkowej. InventoryTransactionUpdateHook
jest wywoływany tylko dla zawartości jednostki ładunkowej.
W przypadku księgowania w aplikacji Transakcje magazynowe lub poprzez import, hooki InventoryTransactionPrepareHook
i InventoryTransactionValidateHook
są wywoływane już w samej aplikacji lub logice importu, ponieważ w obu przypadkach walidacja transakcji odbywa się przed przekazaniem danych do właściwej logiki księgowania (InventoryOnhandLogic). Może to prowadzić do sytuacji, w której te hooki są wywoływane dwukrotnie.
Definicja hook contract dla zapisu transakcji magazynowych pracuje z opcjonalnymi ograniczeniami (restrykcjami), których struktura jak niżej
Transakcje magazynowe z procesów biznesowych
Transakcje magazynowe pochodzące z procesów biznesowych używają typu restrykcji businessObject z identyfikatorem source, gdzie jako Business Object wykorzystywana jest klasa nagłówka zlecenia księgowania.
com.cisag.app.sales.obj.ShippingOrder.class
Transakcje magazynowe z inwentaryzacji i wyceny inwentaryzacji
Inwentaryzacja oraz jej wycena nie są formalnie zleceniami, również w ich przypadku stosuje się typ restrykcji businessObject z identyfikatorem source.
-
Dla inwentaryzacji:
com.cisag.app.inventory.physical.obj.PhysicalInventory.class
-
Dla wyceny inwentaryzacji:
com.cisag.app.inventory.obj.PhysicalInventoryValuationParameters.class
Ręczne i importowane transakcje magazynowe oraz transakcje z aplikacji Nałóż/Podziel specyfikacje
Wszystkie transakcje magazynowe:
-
ręczne
-
importowane
-
utworzone w aplikacji Nałóż/Podziel specyfikacje
stosują typ restrykcji businessObject z identyfikatorem source, a jako klasę Business Object przyjmują:com.cisag.app.inventory.obj.InventoryTransaction.class