Podczas konfigurowania elementów systemu bs4 core często zachodzi potrzeba odwołania się do pól znajdujących się w innej klasie niż klasa związana z konfigurowanym elementem.
Dotyczy to między innymi:
- kolumn w zestawieniach,
- filtrów,
- znaczników stosowanych w szablonach pism,
- komend triggerów,
W zależności od kierunku powiązania między klasami można skorzystać z:
- pola typu Powiązanie,
- podzapytania.
1. Przechodzenie do pól z innej klasy za pomocą powiązania #
Najprostszym przypadkiem jest sytuacja, w której w klasie źródłowej znajduje się pole typu Powiązanie prowadzące do innej klasy.
Przykład: transakcja i kontrahent #
Załóżmy, że w systemie istnieją dwie klasy:
- Transakcja – zawierająca informacje o tematach handlowych lub ofertach,
- Kontrahent – zawierająca dane klientów.
W klasie Transakcja znajduje się pole typu powiązanie wskazujące na obiekt z klasy Kontrahent.
Pola takie jak data utworzenia lub kwota transakcji znajdują się bezpośrednio w klasie Transakcja. Nazwa klienta znajduje się natomiast w klasie Kontrahent.
Aby podczas konfigurowania elementu dotyczącego transakcji odwołać się do nazwy kontrahenta, należy:
- W sekcji Przejdź do pól z innej klasy wskazać pole typu powiązanie prowadzące z klasy Transakcja do klasy Kontrahent.
- Po przejściu do klasy Kontrahent wskazać właściwe pole, na przykład Nazwa kontrahenta.
2. Zastosowanie przejść między klasami #
Mechanizm przechodzenia do pól z innej klasy może być wykorzystywany w różnych elementach konfiguracji.
2.1. Wyświetlanie danych w kolumnie zestawienia #
Załóżmy, że konfigurujemy zestawienie transakcji i chcemy wyświetlić w jednej z kolumn nazwę kontrahenta.
Zestawienie zawiera obiekty klasy Transakcja, dlatego program domyślnie pozwala wskazywać pola należące do tej klasy.
Aby wyświetlić nazwę kontrahenta:
- Otwórz konfigurację kolumny.
- W sekcji Przejdź do pól z innej klasy wybierz pole powiązania z kontrahentem.
- W klasie Kontrahent wybierz pole zawierające nazwę kontrahenta.
2.2. Filtrowanie po polach z innej klasy #
Analogicznie można zdefiniować filtr dla zestawienia transakcji, który będzie wyszukiwał rekordy według nazwy kontrahenta lub jej fragmentu.
Podczas definiowania filtra program początkowo udostępnia pola klasy Transakcja, ponieważ filtr jest tworzony dla strony zawierającej transakcje.
Aby filtrować transakcje po nazwie kontrahenta:
- W konfiguracji filtra przejdź do sekcji Przejdź do pól z innej klasy.
- Wskaż pole typu powiązanie prowadzące do klasy Kontrahent.
- Wybierz pole zawierające nazwę kontrahenta.
- Skonfiguruj odpowiedni operator filtrowania, na przykład wyszukiwanie po fragmencie tekstu.
2.3. Znaczniki w szablonach pism #
Przechodzenie między klasami można również wykorzystywać podczas definiowania znaczników w szablonach dokumentów.
Przykładowo szablon oferty jest powiązany z klasą Transakcja. Program zakłada więc, że znaczniki będą odnosiły się do pól opisujących transakcję.
Jeżeli w treści oferty ma zostać wyświetlona nazwa klienta:
- Podczas definiowania znacznika przejdź do sekcji Przejdź do pól z innej klasy.
- Wskaż pole powiązania prowadzące z transakcji do kontrahenta.
- Wybierz pole zawierające nazwę kontrahenta.
Wartość tego pola będzie mogła zostać umieszczona w wygenerowanym dokumencie.
3. Ścieżki obejmujące przejścia przez kilka klas #
Przejście nie musi kończyć się już na drugiej klasie. W ramach konfiguracji jednego elementu (kolumny, filtra, itp.) można wykonać kilka kolejnych przejść i w ten sposób utworzyć ścieżkę powiązań.
Przykładowa ścieżka może wyglądać następująco:
Transakcja → Kontrahent → Użytkownik
Przykład: nazwisko opiekuna kontrahenta #
Załóżmy, że:
- transakcja jest powiązana z kontrahentem,
- kontrahent ma przypisanego opiekuna,
- opiekun jest obiektem klasy Użytkownik,
- nazwisko opiekuna znajduje się w klasie Użytkownik.
Aby wyświetlić nazwisko opiekuna klienta w kolumnie w zestawieniu transakcji:
- Przejdź z klasy Transakcja do klasy Kontrahent za pomocą pola powiązania.
- W klasie Kontrahent wskaż pole powiązania zawierające opiekuna klienta.
- Przejdź do klasy Użytkownik.
- Wybierz pole Nazwisko.
Taką samą ścieżkę można zastosować podczas definiowania kolumny, filtra, znacznika lub innego elementu konfiguracji.
4. Kierunek powiązania między klasami #
Przechodzenie za pomocą pól typu powiązanie jest możliwe wtedy, gdy pole powiązania znajduje się w klasie, od której rozpoczynamy przejście.
Przykładowo:
- w klasie A znajduje się pole prowadzące do klasy B,
- w klasie B znajduje się pole prowadzące do klasy C.
Można wtedy utworzyć ścieżkę:
Klasa A → Klasa B → Klasa C
Zdarzają się jednak sytuacje, w których powiązanie zostało zdefiniowane w przeciwnym kierunku.
W klasie A nie ma pola prowadzącego do klasy B. Zamiast tego w klasie B znajduje się pole wskazujące na klasę A.
W takim przypadku należy skorzystać z podzapytania.
Podzapytania #
5. Czym jest podzapytanie #
Podzapytania w programie bs4 core są mniej więcej odpowiednikiem subselectów stosowanych w SQL.
Podzapytanie umożliwia przejście między klasami w kierunku przeciwnym do kierunku, w którym konfigurujemy.
Mechanizm ten stosuje się, gdy:
- konfiguracja rozpoczyna się od klasy A,
- w klasie A nie ma pola prowadzącego do klasy B,
- w klasie B znajduje się pole typu powiązanie prowadzące do klasy A.
Podzapytanie pozwala wówczas przejść:
Klasa A → Klasa B
mimo że techniczne pole powiązania zostało zdefiniowane jako:
Klasa B → Klasa A
6. Przykład zastosowania podzapytania #
Załóżmy, że w systemie znajdują się klasy:
- Transakcja – opisująca temat handlowy lub ofertę,
- Pozycja transakcji – zawierająca produkty lub usługi wchodzące w skład transakcji.
Jedna transakcja może mieć wiele pozycji. Każda pozycja transakcji może zawierać między innymi:
- produkt lub usługę,
- ilość,
- cenę jednostkową,
- inne informacje dotyczące pozycji.
Jest to relacja jeden do wielu:
jedna transakcja → wiele pozycji transakcji
Pole typu powiązanie znajduje się w klasie Pozycja transakcji i prowadzi do klasy Transakcja.
W klasie Transakcja nie ma natomiast pola typu powiązanie prowadzącego bezpośrednio do konkretnej pozycji transakcji.
Przykładowe zadanie #
Chcemy przygotować filtr zestawienia transakcji, który znajdzie transakcje zawierające pozycje z ceną jednostkową niższą niż 10 zł.
Filtrowanie rozpoczyna się od klasy Transakcja, ale pole Cena jednostkowa znajduje się w klasie Pozycja transakcji.
Nie można wykonać zwykłego przejścia za pomocą pola typu powiązanie, ponieważ pole prowadzące między tymi klasami znajduje się po stronie pozycji transakcji.
W takiej sytuacji należy utworzyć podzapytanie.
7. Tworzenie nowego podzapytania #
Aby dodać podzapytanie:
- Otwórz kartotekę administratora.
- Przejdź do zestawienia Podzapytania.
- Kliknij przycisk Dodaj nowe.
7.1. Wybór klasy docelowej #
W pierwszej kolejności należy wskazać klasę docelową.
W opisywanym przykładzie chcemy przechodzić z transakcji do jej pozycji, dlatego klasą docelową jest:
Pozycja transakcji
7.2. Nadanie nazwy #
Podzapytaniu należy nadać czytelną nazwę, która pozwoli później łatwo odnaleźć je na liście.
Przykładowa nazwa:
Pozycje transakcji dla transakcji
Po wprowadzeniu nazwy kliknij Dodaj i edytuj.
7.3. Wskazanie pola łączącego #
Po utworzeniu podzapytania program zna już klasę docelową. Następnie należy wskazać z rozwijanej listy pole łączące.
Pole łączące musi być polem typu powiązanie znajdującym się w klasie docelowej.
W tym przykładzie:
- klasą docelową jest Pozycja transakcji,
- w klasie Pozycja transakcji znajduje się między innymi pole typu powiązanie o nazwie Transakcja,
- pole to prowadzi do klasy Transakcja.
W polu Pole łączące należy więc wskazać pole Transakcja.
Po zapisaniu zmian program będzie wiedział, że podzapytanie służy do przechodzenia:
z klasy Transakcja do klasy Pozycja transakcji
8. Dodatkowe warunki podzapytania #
W konfiguracji podzapytania można wskazać dodatkowe warunki, które muszą spełniać obiekty klasy docelowej.
Warunki mogą dotyczyć między innymi:
- cech obiektów,
- pól wyboru,
- innych pól należących do klasy docelowej.
Dzięki temu podzapytanie może zwracać nie wszystkie obiekty powiązane z obiektem źródłowym, lecz wyłącznie te, które spełniają określone kryteria.
9. Wykorzystanie podzapytania #
Po zapisaniu podzapytanie może być wykorzystywane podczas konfigurowania:
- kolumn,
- filtrów,
- znaczników,
- komend triggerów,
- innych elementów wymagających przechodzenia między klasami.
Podzapytanie wskazuje się w konfiguracji przejścia do pól z innej klasy.
Po przejściu z klasy Transakcja do klasy Pozycja transakcji można wybrać pole należące do pozycji, na przykład Cena jednostkowa, a następnie użyć go w filtrze.
W ten sposób można utworzyć filtr wyszukujący transakcje, które zawierają pozycje z ceną jednostkową niższą niż 10 zł.
10. Łączenie podzapytań i pól typu powiązanie #
Pola typu powiązanie i podzapytania można stosować naprzemiennie w ramach jednej ścieżki.
W zależności od struktury klas możliwe jest na przykład:
- przejście do innej klasy za pomocą pola typu powiązanie,
- wykonanie przejścia odwrotnego za pomocą podzapytania,
- ponowne przejście do kolejnej klasy za pomocą pola typu powiązanie.
Pozwala to budować rozbudowane ścieżki prowadzące przez wiele powiązanych klas.
11. Podsumowanie #
Podczas przechodzenia między klasami należy przede wszystkim sprawdzić kierunek istniejącego powiązania.
Jeżeli w klasie źródłowej znajduje się pole prowadzące do klasy docelowej, należy skorzystać z pola typu Powiązanie w sekcji Przejdź do pól z innej klasy.
Jeżeli pole powiązania znajduje się w klasie docelowej i prowadzi w stronę klasy źródłowej, należy zdefiniować podzapytanie.
Najważniejsza różnica wygląda następująco:
- pole typu Powiązanie – przejście zgodnie z kierunkiem powiązania,
- podzapytanie – przejście w kierunku przeciwnym do powiązania.
Oba mechanizmy mogą być stosowane wspólnie i pozwalają odwoływać się do danych znajdujących się w różnych, powiązanych ze sobą klasach.