Definicja Hook Contract: Transakcje magazynowe

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.

Uwaga
Nie wolno używać ostrzeżeń w ramach tych dodatkowych walidacji, ponieważ w przypadku transakcji wynikających z procesów biznesowych nie ma możliwości ich potwierdzenia. Może to prowadzić do zachowania identycznego jak w przypadku błędu.
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.

Uwaga
Po tym kroku nie są wykonywane już żadne dodatkowe walidacje transakcji, więc potencjalne błędy nie zostaną wykryte.

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, InventoryTransactionPrepareHookInventoryTransactionValidateHook 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.

Przykład
W przypadku końcowego księgowania zlecenia dostawy, sam zlecenie dostawy służy jako zlecenie księgowania. W takim przypadku jako klasa nagłówka używana jest:
com.cisag.app.sales.obj.ShippingOrder.class

Uwaga
Transakcje magazynowe z procesów biznesowych, dla których nie można jednoznacznie ustalić zlecenia księgowania (np. z powodu błędnych danych), są traktowane tak samo jak transakcje ręczne.

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

Czy ten artykuł był pomocny?