Definicja Hook Contract Łańcuch dokumentów powiązanych udostępnia interfejsy, za pomocą których aplikacji (APP) mogą rozszerzać funkcjonalność łańcucha dokumentów.
Informacje na temat infrastruktury Hook można znaleźć w artykule Hook Contracts.
Grupa docelowa
- Deweloperzy
Opis
Następujące rozszerzenia są możliwe z definicją Hook Contract Łańcuch dokumentów powiązanych:
- Rejestrowanie typów dokumentów jako kombinacji źródła/celu wpisu łańcucha dokumentów powiązanych
- Uwzględnianie dokumentów źródłowych i docelowych podczas reorganizacji instancji dokumentów
- Oznaczanie wpisu łańcucha dokumentów powiązanych jako wewnętrznego (w zależności od danej bazy dokumentów lub pozycji bieżącej aplikacji)
- Dostarczanie informacji wymaganych do wyświetlenia wpisów łańcucha dokumentów powiązanych danego typu dokumentu
- Wpływanie na sortowanie w łańcuchu dokumentów powiązanych
- Definicja elementu GUI dla typu dokumentu
Definicja Hook Contract:
com.cisag.app.general.order.hook.OrderReference
com.cisag.app.sales.order.OrderReferenceSalesImpl
Jako przykład implementacji oznaczania wpisów łańcucha dokumentów powiązanych jako wewnętrznych może posłużyć następująca standardowa implementacja Hook Contract:
com.cisag.app.general.order.InternalOrderReference
com.cisag.app.sales.order.OrderReferenceSalesOrderImpl
Uprawnienia specjalne
Rejestracja
Implementując poniższy interfejs Hook, można zarejestrować nowe kombinacje typów dokumentów do obsługi w łańcuchu dokumentów powiązanych. W tym celu należy określić źródłowy i docelowy typ dokumentu.
com.cisag.app.general.order.hook.log.OrderReferenceRegistrationHook
W przypadku implementacji w standardzie, tj. z prefiksem programistycznym cisag, zarówno dokument źródłowy, jak i docelowy muszą pochodzić ze standardu.
W przypadku implementacji w aplikacji musi być spełniony jeden z poniższych wymogów:
- Źródłowy i docelowy typ dokumentu należą do tej samej aplikacji
- Jeden z dwóch typów dokumentów należy do aplikacji zgodnie z prefiksem programistycznym, a drugi jest standardowym typem dokumentu.
Nie są zatem dozwolone np. kombinacje różnych aplikacji. Dotyczy to również sytuacji, gdy mają one ten sam prefiks programistyczny. Nie jest również możliwe zarejestrowanie w aplikacji kombinacji, w których zarówno dokument źródłowy, jak i docelowy pochodzą ze standardu.
Reorganizacja
Za pomocą następującej metody można określić, czy dokument należący do kombinacji typu dokumentu źródłowego lub docelowego zarejestrowanego dla łańcucha dokumentów powiązanych może zostać zreorganizowany:
OrderReferenceRegistry.registerOrderReference(short, short, ReorganisationRule)
Jeśli zostanie podana wartość dla tej metody, do dokumentów zarejestrowanej kombinacji zastosowana zostanie następująca reguła:
- Dokument typu źródłowego nie może zostać zreorganizowany, jeśli istnieje dokument typu docelowego
- Dokument typu docelowego nie może zostać zreorganizowany, jeśli istnieje dokument typu źródłowego
Objaśnienia innych możliwych wartości dla metody można znaleźć w klasie Java interfejsu Hook OrderReferenceRegistrationHook.
Można również użyć następującego interfejsu Hook, aby dodać kontrole reorganizacji dokumentu:
com.cisag.app.general.order.hook.log.ReorganisationValidateHook
Ukrywanie wpisów wewnętrznych
Zazwyczaj dla danej podstawy dokumentu lub pozycji dokumentu wyświetlane są wszystkie powiązane wpisy łańcucha dokumentów powiązanych. Dzięki implementacji poniższego interfejsu Hook istniejący wpis łańcucha dokumentów może jednak, z uwzględnieniem danej podstawy dokumentu lub pozycji dokumentu, zostać oznaczony jako wewnętrzny, tak aby nie był już wyświetlany.
com.cisag.app.general.order.hook.log.InternalOrderReferenceHook
Sortowanie
Sortowanie łańcucha dokumentów powiązanych można określić poprzez implementację następującego interfejsu Hook: com.cisag.app.general.order.hook.log.OrderReferenceComparatorHook
Metoda getOrderType służy do określenia typu dokumentu, a metoda getPreviousOrderType służy do określenia poprzedniego typu dokumentu. Na poniższej grafice strzałki wskazują wartość ustawioną dla previous. Jest to tylko kolejność w sortowaniu i teoretycznie może być zdefiniowana całkowicie niezależnie od przepływu procesu.
Oferta nie ma poprzednika, zlecenie ma ofertę jako poprzednika. Obliczona wartość sortowania wynosi zatem 1 dla oferty i 2 dla zlecenia.
W tym przypadku zarówno oferta, jak i umowa nie mają poprzednika. Obie otrzymują wartość sortowania 1, natomiast zlecenie ponownie otrzymuje wartość sortowania 2. W tym przypadku preferowany jest dokument z mniejszą wartością dla OrderType.
Rejestracje w standardzie zawsze otrzymują wartość Level 1 w odniesieniu do sortowania. Rejestracje w aplikacji (APP) otrzymują wartość Level 2, dzięki czemu za pomocą aplikacji można dokonać sortowania między istniejącymi standardowymi typami dokumentów.
W pierwszym kroku obliczana jest odpowiednia wartość sortowania standardowych dokumentów, w tym przypadku dla oferty 1 i zlecenia 2. Dokumenty, które mają dokument typu aplikacji jako poprzednika, otrzymują zwiększoną wartość sortowania w drugiej pozycji. Dokumenty, które mają dokument standardowy jako poprzednika, otrzymują w pierwszej pozycji wartość sortowania swojego standardowego dokumentu poprzednika, a w drugiej pozycji wartość 1. Podobnie jak w standardzie, może istnieć kilka typów dokumentów aplikacji, które mają tę samą wartość sortowania.
Są one wtedy sortowane najpierw według pierwszej cyfry wartości sortowania. Jeśli jest ona taka sama, używana jest druga cyfra. Jeśli nawet wtedy nie zostanie ustalona kolejność, dokument o niższej wartości dla OrderType jest również traktowany priorytetowo.
W przedstawionym przykładzie kolejność sortowania jest następująca:
AppVoucherA, Quote, AppVoucherB, AppVoucherC, Order, AppVoucherD
Udostępnianie danych
Wpisy łańcucha dokumentów powiązanych są wyświetlane na poziomie podstawowym dokumentu lub, jeśli typ dokumentu obsługuje pozycje, na poziomie pozycji. Wyświetlanie opiera się na instancjach
com.cisag.app.general.order.hook.log.OrderReferenceData.
Dzięki wdrożeniu następujących interfejsów Hook można przekształcić dane obiektów w instancje OrderReferenceData. Zawierają one dane, które zazwyczaj posiada każdy dokument (data, partner dokumentu, artykuł itp.) lub dane specyficzne, które należą tylko do danego typu dokumentu.
com.cisag.app.general.order.hook.log.OrderReferenceHeaderDataHook
com.cisag.app.general.order.hook.log.OrderReferenceDetailDataHook
Wyświetlanie wpisu łańcucha dokumentów powiązanych przez GUI
Rzeczywiste wyświetlanie wpisu łańcucha dokumentów powiązanych odbywa się poprzez implementację interfejsu Hook:
com.cisag.app.general.order.hook.ui.OrderReferenceRendererHook
Poniższa klasa jest dostarczana w standardzie i stanowi podstawę implementacji w standardzie. Możliwa jest jednak również całkowicie niezależna implementacja.
com.cisag.app.general.order.hook.ui. DefaultOrderReferenceRenderer