Sekcja Kalendarz
Podsumowanie:Kalendarz pozwala wyświetlać dane ze źródła danych w jednym z widoków kalendarza: miesięcznym, tygodniowym, dziennym lub osi czasu. Możliwa jest także edycja tych danych: zmiana czasu rozpoczęcia/zakończenia techniką drag and drop lub przez formularz do edycji tych danych. Wpisy w kalendarzu to zdarzenia.
W tym temacie
Aby zamieścić kalendarz na formularzu, dodaj nową sekcję i na panelu właściwości wybierz pozycję Kalendarz
z listy rozwijanej Typ sekcji
. Do poprawnego działania sekcji kalendarz potrzebna jest tabela w bazie danych, która będzie zawierać dane zdarzeń, oraz formularz edycji zdarzenia wyświetlany po kliknięciu komórki kalendarza. Ponadto, oprócz parametrów konfiguracyjnych definiowanych po kliknięciu przycisku Ustawienia
obok listy Typ sekcji
, należy zdefiniować akcję usuwania zdarzenia i akcję aktualizacji zdarzenia we właściwościach sekcji.
Ustawienia wspólne dla wszystkich rodzajów sekcji opisano w rozdziale Wspólne właściwości sekcji .
W celu konfiguracji kalendarza zaznacz sekcję kalendarza na formularzu i kliknij przycisk Ustawienia
obok listy Typ sekcji
na panelu właściwości. Zostanie wyświetlone okno dialogowe Ustawienia sekcji kalendarza
, w którym poszczególne ustawienia (okna edycji SQL) zostały dla wygody przedstawione jako nagłówki rozwijanych sekcji. Kliknij nagłówek, aby rozwinąć ustawienia.
Źródło danych dla zdarzeń
SQL dla wydarzeń
: zapytanie SQL, które musi zwrócić następujące kolumny z tabeli, w której mają być zapisywane zdarzenia:
-
id
(varchar): identyfikator zdarzenia -
start
(datetime): data i godzina rozpoczęcia zdarzenia -
end
(datetime): data i godzina zakończenia zdarzenia -
title
(varchar): tytuł zdarzenia -
isAllDay
(bit): flaga zdarzenia całodniowego -
color
(varchar): (kolumna opcjonalna) szesnastkowa wartość koloru dla komórki kalendarza w formacie #FFFFFF
Zależnie od wybranego widoku, zdarzenie jest prezentowane na kalendarzu jako prostokątny obszar o rozmiarach odpowiadających czasowi rozpoczęcia i zakończenia opisany tytułem zdarzenia. Zdarzenia oznaczone jako całodniowe zajmują całą komórkę kalendarza.
Zapytanie może także zwracać inne kolumny z tabeli źródłowej, które będą dodatkowo opisywać zdarzenie. Edycja wartości w tych kolumnach będzie odbywać się w formularzu przypisanym we właściwości Formularz zdarzenia
.
Przykład
SELECT InspectionId AS [id],
InspectionBegins AS [start],
InspectionEnds AS [end],
InspectionTitle AS [title],
InspectionGoal,
InspectorId,
FieldInspection AS [isAllDay]
FROM dbo.InspectionsSchedule
Grupowanie zdarzeń
Włącz grupowanie
: włącza/wyłącza grupowanie zdarzeń według wartości z kolumny zwróconej przez zapytanie SQL; domyślnie włączony.
Nazwa kolumny...
: nazwa kolumny zwraconej przez zapytanie źódłowe, której wartości zostaną użyte do grupowania zdarzeń.
Okno edycji SQL: wpisz zapytanie SQL, które zwróci unikatowe wartości w następujących kolumnach:
-
text
(varchar): wartość wyświetlana dla grup zdarzeń -
value
(varchar): wartość, według której zdarzenia będą grupowane -
color
(varchar): (kolumna opcjonalna) szesnastkowa wartość koloru, który będzie używany dla zdarzeń z danej grupy w formacie #FFFFFF
Przykład
SELECT CONCAT(MIN(FirstName), ' ', MIN(LastName)) AS [text],
dbo.Zamowienia.UserId as [value]
FROM core.UserProfiles
RIGHT JOIN dbo.Zamowienia
ON core.UserProfiles.Id = dbo.Zamowienia.UserId
GROUP BY dbo.Zamowienia.UserId -- wymagane użycie klauzuli GROUP BY
Pokaż od dnia
SQL dla daty dla której kalendarz będzie ustawiony
: zapytanie zwracające datę, dla której zostanie ustawiony początkowy okres, zależnie od trybu wyświetlania, np. widok miesięczny będzie się zaczynał od poniedziałku w tygodniu obejmującym początek miesiąca, w którym przypada zwrócona data.
Przykład
SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) AS OstatniPoniedzialek
Dni wolne
SQL dla dat uznanych jako dni wolne
: zapytanie zwracające listę dat i nazw dni wolnych w kolumnach:
-
value
(date): data dnia wolnego -
text
(varchar): nazwa dnia wolnego wyświetlana w komórce kalendarza
Przykład
SELECT HolidayDate as [value],
HolidayName as [text]
FROM dbo.HolidaysWorldWide
WHERE CountryAlpha2Code = 'PL'
Tryby wyświetlania
Lista wielowyboru: wybierz tryby wyświetlania kalendarza, które mają być dostępne w aplikacji FrontSPA; dostępne wartości:
-
Miesięczny
: tablica sześciu tygodni ustawionych w rzędach, jeden pod drugim (7 x 6); pierwsza komórka to poniedziałek (zawsze) tygodnia z pierwszym dniem miesiąca lub datąPokaż od dnia
-
Tygodniowy
: ustawione obok siebie kolumny poszczególnych dni tygodnia (domyślnie siedem) podzielone na interwały godzinowe; domyślnie jako pierwszy dzień tygodnia jest wyświetlany dzień bieżący lub dzieńPokaż od dnia
; aby wyświetlać widok tygodniowy od określonego dnia tygodnia, należy w opcjiPokaż od dnia
użyć zapytania SQLSELECT DATEADD(dd,-(DATEPART(WEEKDAY, GETDATE())+1),GETDATE()) -- zwraca datę ostatniego piątku
-
Dzienny
: jedna kolumna dnia o szerokości całego kalendarza podzielona na interwały godzinowe; dzień bieżący lub dzieńPokaż od dnia
-
Oś czasu
: jeden wiersz dni, podzielonych lub nie na interwały godzinowe; zawsze wyświetlany od pierwszego dnia bieżącego miesiąca lub miesiąca, w którym przypada dataPokaż od dnia
.
Tryb wybrany jako pierwszy jest ustawiany jako domyślny; kolejność trybów na liście wielowyboru nie odpowiada kolejności wyboru trybów na liście rozwijanej — jest ona taka, jak podana powyżej. Jeśli widok dzienny nie zostanie dodany do listy, nie będzie można przechodzić do widoku dziennego po kliknięciu wielokropka w widoku miesięcznym.
Interwał czasu dla widoku dziennego
Interwał (w minutach)
: wartość określająca podział dnia w widoku dziennym, tygodniowym i osi czasu na interwały godzinowe; dozwolone wartości od 15 do 720 minut.
Opcje wyświetlania
Wyświetlana liczba dni tygodnia
: liczba dni wyświetlanych w widoku tygodniowym (łącznie z dniem bieżącym); dozwolone wartości od 1 do 7.
Oś czasu — interwał całodniowy
: po włączeniu tego przełącznika dni w widoku osi czasu nie będą dzielone na interwały godzinowe.
Pozostałe ustawienia sekcji kalendarza
W ramach konfiguracji kalendarza, należy określić jeszcze następujące ustawienia dostępne na panelu właściwości:
Formularz zdarzenia
: formularz wyświetlany po kliknięciu komórki w kalendarzu; kliknij przycisk Ustaw
, aby wyświetlić okno dialogowe Wybierz akcję do wywołania
i wybierz, a następnie skonfiguruj akcję Otwórz formularz
; aby dla nowego zdarzenia automatycznie wypełniać pole rozpoczęcia i zakończenia zgodnie z wartościami dla klikniętej komórki formularza, użyj odwołań {@*KodFormularza.Event.start} i {@*KodFormularza.Event.end}, gdzie KodFormularza to kod formularza z kalendarzem.
Akcja otwierania formularza (w trybie dialog) jest wykonywana także podczas odświeżania formularza, który został otwarty przy użyciu tej akcji. Jednak w tym przypadku kontekstem domyślnym jest kontekst formularza docelowego. Dlatego ważne jest odpowiednie skonfigurowanie parametrów odwołujących się do kontekstu formularza źródłowego (tego, z którego jest inicjowana akcja).
Właściwa składnia to {@*KodFormularza.PoleFormularza}. Alternatywnie można skorzystać z funkcji
JSON_VALUE({@OpenedForms},’$[0].PoleFormularza’)
Należy przy tym pamiętać (w obu przypadkach) o konieczności przestawienia trybu pola wprowadzania na SQL.
Zastosowanie zmiennej {@PoleFormularza} spowoduje błąd lub nieoczekiwane zachowanie po odświeżeniu formularza docelowego, ponieważ system będzie szukał wartości takiej zmiennej w kontekście odświeżanego formularza.

Akcja aktualizacji
: akcja wykonywana po zmianie daty i godziny rozpoczęcia/zakończenia zadania metodą drag and drop w widoku kalendarza; na przykład:
UPDATE [dbo].[WyjsciaRejestr]
SET GodzWyjscia = JSON_VALUE({@Event}, '$.start'),
GodzPowrotu = JSON_VALUE({@Event}, '$.end')
WHERE [dbo].[WyjsciaRejestr].Id = JSON_VALUE({@Event}, '$.id')
W definicji akcji należy włączyć przełącznik
Przekaż wszystkie parametry jako nvarchar
.
Akcja usunięcia
: akcja wykonywana po kliknięciu symbolu x w prawym górnym rogu prostokąta zdarzenia; na przykład
DELETE FROM [dbo].[WyjsciaRejestr]
WHERE [dbo].[WyjsciaRejestr].Id = JSON_VALUE({@Event}, '$.id')
W definicji akcji należy włączyć przełącznik
Przekaż wszystkie parametry jako nvarchar
.
-
Zależność od sekcji
: pozwala określić sekcję zawierającą pole, którego wartości będą mogły zostać użyte do filtrowania listy; możliwe jest także filtrowanie bieżącej listy zależnie od rekordów zaznaczonych we wskazanej sekcji typu lista; ponadto zależność powoduje, że sekcja zależna będzie odświeżana każdorazowo po zmianie danych w sekcji nadrzędnej.
-
Warunek dla zależności
: wyrażenie SQL filtrujące rekordy sekcji typu lista, zależnie od wartości pola na innej sekcji; możliwe są dwa rodzaje warunków:- KolumnaListy operator {@_Section_PoleFormularza}: KolumnaListy to nazwa kolumny listy wyświetlanej w sekcji, @_Section_ to przedrostek, a PoleFormularza to właściwość Pole formularza pola w sekcji wskazanej jako nadrzędna. Wartość w tym polu jest używana do filtrowania rekordów listy.
- KolumnaListy IN (SELECT [value] FROM OPENJSON({@_Section_kodSekcji_Selected})): w tym przypadku zmienna {@_Section_kodSekcji_Selected} zwraca tablicę JSON ([Id1, Id2…]) z identyfikatorami rekordów zaznaczonych w sekcji nadrzędnej.
W edytorze SQL obsługiwany jest mechanizm smart numbers. Po kliknięciu przycisku Podgląd zapytania SQL
wyświetlane jest okno dialogowe edytora, w którym można sprawdzić poprawność składni. Aby to było możliwe, w obszarze u góry okna wyświetlana jest w trybie tylko do odczytu część zapytania dla zależności w formie:
SELECT * FROM (SELECT * FROM List_View) WHERE...
Poniżej jest wyświetlany sam warunek.
Aby sprawdzić poprawność składni, należy w polach z prawej strony podać wartości parametrów ({@Nazwa}) występujących w zapytaniu. Dodatkowo, po kliknięciu przycisku Wykonaj zapytanie
zostanie wyświetlone okno edytora SQL z całym zapytaniem warunku zależności. Po podstawieniu za parametry przykładowych wartości i ponownym kliknięciu przycisku Wykonaj zapytanie
w dolnej części okna zostaną wyświetlone wyniki zwrócone przez zapytanie.
Przykład
Poniższy warunek zależności spowoduje wyświetlenie na liście zależnej tylko tych rekordów, które zostały zaznaczone na liście nadrzędnej. KodSekcji to kod sekcji nadrzędnej (wybranej z listy Zależność od sekcji
).
W odwołaniu @_Section_KodSekcji_Selected kod sekcji musi się zaczynać od wielkiej litery, niezależnie od tego, od jakiej litery zaczyna się kod sekcji nadrzędnej.
[Id] IN
(SELECT [value]
FROM
OPENJSON({@_Section_KodSekcji_Selected}))
Obsługa kalendarza w aplikacji FrontSPA
W aplikacji FrontSPA kalendarz jest wyświetlany w widoku skonfigurowanym jako domyślny. W nagłówku od lewej strony znajduje się przycisk Dziś
, który wyświetla interwał obejmujący bieżącą datę, strzałki służące do zmiany wyświetlanego interwału (następny/poprzedni dzień/tydzień/miesiąc), określenie bieżącego interwału oraz listę rozwijaną z dostępnymi widokami kalendarza. Jeśli ta lista nie jest dostępna, to znaczy, że widok domyślny jest jedynym dostępnym.

Kliknięcie pustej komórki kalendarza wyświetla formularz, w którym można wpisać dane nowego zdarzenia. Kliknięcie zdarzenia w kalendarzu pozwala edytować to zdarzenie.
Zdarzenia są wyświetlane w kalendarzu jako prostokątne obszary. Po wskazaniu zdarzenia myszą w widoku dziennym i tygodniowym wyświetlane są na górnej i dolnej krawędzi uchwyty do zmiany rozmiaru. Ich przeciąganie pozwala zmieniać czasrozpoczęcia lub zakończenia zdarzenia. Symbol x wyświetlany w prawym górnym rogu zdarzenia służy do usunięcia zdarzenia. Dodatkowo zdarzenie można przeciągnąć myszą do innej komórki, zmieniając jednocześnie czas rozpoczęcia i zakończenia zdarzenia.
Jeśli w tym samym dniu zostanie zdefiniowanych w tym samym dniu, w widoku miesięcznym będzie obok nich wyświetlany przycisk z wielokrokiem, którego kliknięcie spowoduje przejście do widoku dziennego.
Po skonfigurowaniu i włączeniu grupowania, wybrany widok kalendarza będzie wyświetlany dla każdej grupy osobno. Grupowanie jest przydatne w widoku osi czasu.

Powiązane tematy: