Definicja Hook Contract: Łańcuch dokumentów powiązanych

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.

Łańcuchy dokumentów powiązanych standardowych typów dokumentów korzystają z tej definicji Hook Contract. Dzięki temu można wykorzystać standardowe implementacje jako przykłady wdrożeń.

W niniejszym artykule opisano, jakie rozszerzenia można wprowadzić przy użyciu definicji Hook Contract oraz jakie ograniczenia i szczególne aspekty należy wziąć pod uwagę.

Opis interfejsu można znaleźć w odpowiednim obiekcie deweloperskim typu Hook Contract. Szczegółowe informacje dotyczące metod zadeklarowanych w interfejsach znajdują się w odpowiednich klasach języka Java.

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

Jako przykład implementacji rejestracji kombinacji typów dokumentów źródłowych/docelowych dla łańcucha dokumentów powiązanych w standardzie służy następująca implementacja Hook Contract, która zawiera wszystkie rejestracje dla obszaru Sprzedaż:

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

Jako przykład implementacji prezentacji łańcucha dokumentów powiązanych w standardzie może posłużyć następująca implementacja Hook Contract dla typu dokumentu Zamówienie sprzedaży:

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

Wskazówka
Aby wprowadzić do aplikacji (APP) nowy typ dokumentu należy zapoznać się z artykułem Definicja Hook Contract: Typ dokumentu.[\indicator]

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

Wskazówka
Za pomocą interfejsu Hook ReorganisationValidateHook można np. usunąć kontrole reorganizacji za pomocą ReorganizationRule i dodać własne.
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.

Uwaga
Grafiki służą jedynie do zilustrowania zasady i nie odpowiadają rzeczywistym rejestracjom.

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

Wskazówka
Aplikacje (APP) mogą w przyszłości wymagać innych aplikacji. W takim przypadku logika sortowania jest po prostu rozszerzana o dodatkową cyfrę (tj. tworzone są wartości sortowania, takie jak 1.2.1).
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

Czy ten artykuł był pomocny?