Wykorzystanie parametrów dynamicznych
Parametry dynamiczne to zmienne, zdefiniowane przez Użytkownika, wykorzystywane w trakcie pracy z programem poprzez ich wstawienie w definicje zmiennych. W zależności od rodzaju tekstu, którym definiowane są parametry istnieją parametry dynamiczne:
- Filtrów (tekstem jest najczęściej fragment pewnej klauzuli: WHERE)
- Wykresów i Szybkich raportów (tekstem jest treść zapytania lub parametrów graficznych definicji wykresu)
- Wydruków (parametry dynamiczne Runtimes przekazywane do wydruku)
Składnia parametrów dynamicznych
Uwagi ogólne
Ogólna składnia parametru dynamicznego jest następująca:
?@[H]Picture[(_Q|_NQ)]|[Nazwa|]Prompt:Default[@?] (PD)
albo
?@EOL (PD)
albo
?@ABC(‘Tekst’) (PD)
gdzie:
@[H]Picture – format parametru. Jeśli w formacie zostanie użyty opcjonalny przełącznik ukrycia parametru (H), wówczas kontrolka odpowiadająca parametrowi nie jest kreowana, a wartość parametru pozostaje stała (dziedziczona lub Default – owa). Przełącznik ukrycia parametru H jest dostępny zawsze dla wszystkich formatów (dla uproszczenia – w dokumencie będzie on pomijany).
Dostępne formaty
- Standardowe (predefiniowane) formaty Clarionowe (np. @S20, @N-14.2, @N3, @D17, @T1,…)
- Dodatkowe formaty, zdefiniowane specjalnie dla obsługi parametrów dynamicznych:
@X – check
@O(RadioPrompt:RadioValue{[|RadioPrompt:RadioValue]…}) – option
@LsXXX(Biblioteka.dll|CallLookupFunkcjaU[(ParametryCallLookupFunkcjaU)]) lub
@LnXXX(Biblioteka.dll|CallLookupFunkcjaU[(ParametryCallLookupFunkcjaU)]) – lookup
@R(Zapytanie)
Elementy składni
- Nazwa – kod, po którym klasa identyfikuje i wiąże parametr (np. rozpoznaje, która dana z kolejki wynikowej wykresu / zmienna dynamiczna z aplikacji odpowiada temu parametrowi). Niedozwolonymi znakami w nazwie są pipe (separator nazwy od promptu) i dwukropek (separator promptu od wartości).
- Prompt – prompt pojawiający się przy kreowanych dynamicznie kontrolkach parametrów.Niedozwolonymi znakami w prompcie są pipe (separator nazwy od promptu) i dwukropek (separator promptu od wartości). Można natomiast używać znaku & (akcelerator).
- Default – domyślna (początkowa) wartość parametru (w przypadku parametrów posiadających sekwencję zakończenia @? można nie stosować otaczających stringowy Default ciapek). Jeśli Default nie zostanie podany – klasa przyjmie jego wartość jako pustą (0 lub ”, w zależności od typu parametru, określonego przez Picture). W wartości domyślnej można używać wyrażeń. Nie można natomiast stosować odwołań do parametrów dynamicznych (brak możliwości zagnieżdżania (z jednym wyjątkiem, opisanym przy omawianiu formatu lookupu)).
- Składnia typu: ?@EOL, służy do wstawienia w danym miejscu pustej linii.
Opcjonalna sekwencja zakończenia parametru: @?
W przypadku braku sekwencji zakończenia parametru (@?) należało przyjąć jakieś inne kryterium zakończenia. Kryterium to jest następujące:
Jako koniec parametru dynamicznego w przypadku braku sekwencji zakończenia przyjmujemy:
- Znak poprzedzający pierwsze wystąpienie któregokolwiek z poniższych znaków (sekwencji):
Spacja; ‘)’; ‘}’; ‘+’; ‘-‘; ‘*’; ‘/’; ‘,’; ‘%’; ‘=’; ‘|’; ‘<13,10>’, (SZ 1)
znalezionych po rozpoczęciu Default-u i niewystępujących wewnątrz literału stringowego (‘…’) albo w przypadku braku takiego wystąpienia:
- koniec tekstu. (SZ 2)
Modyfikatory otaczania apostrofami _Q i _NQ
Wymuszają otaczanie (_Q) lub nieotaczanie (_NQ) wstawianej wartości parametru apostrofami.
Jeśli parametr jest stringowy (@Picture=@S…) – jego wartość przy wstawianiu zostaje domyślnie otoczona apostrofami. Chcąc z tego zrezygnować używamy modyfikatora _NQ (użycie w tym przypadku modyfikatora _Q jest ignorowane).
Jeśli parametr jest niestringowy (@Picture<>@S…) – jego wartość przy wstawianiu nie zostaje domyślnie otoczona apostrofami. Chcąc wymusić otoczenie apostrofami takiego parametru używamy modyfikatora _Q (użycie w tym przypadku modyfikatora _NQ jest ignorowane). Tekst, w którym jest umieszczony parametr stanowi wywołanie procedury, której drugim parametrem jest parametr stringowy, odpowiadający numerowi rachunku bankowego: OP_KASAI.DLL|CALLBRPLISTA(‘BRA’,?@n6_Q|RachunekID|Rachunek:0@?). Umieszczenie całego parametru w apostrofach spowoduje, że parametr ten nie będzie „widziany” przez parser. Stosowanie modyfikatorów ma sens tylko dla samodzielnych definicji parametrów (tzw. stara składnia), stanowiących jednocześnie deklarację parametru i odwołanie do jego wartości. Jeśli definicja jest częścią deklaracji @PAR … PAR@, to stosowanie modyfikatorów nie ma sensu – deklaracje są w całości usuwane z tekstu. W tym przypadku modyfikatory należy umieszczać w odwołaniach do wartości parametrów (np. ??_QNazwa). Jeśli chcemy wstawić linię przerwy pomiędzy kontrolkami parametrów – można w tym celu zadeklarować pomiędzy nimi specjalny, ukryty parametr (może być to również parametr, który nie będzie nigdzie indziej używany). Ukrycie należy wprowadzić wykorzystując deklarację parametru z opcją ukrycia @H[IDE]. Opcja ukrycia powinna być w tym przypadku bezparametrowa (@HIDE()) lub zawierać wyrażenie ewaluujące się zawsze do prawdy (np. @HIDE(1=1)). Przykład 1: (poprawne ale nieefektywne wstawienie pustej linii pomiędzy kontrolki parametrów: ??Akronim i ??SprawdzajDaty) @PAR ?@s20|Akronim|&Akronim:@? PAR@ @PAR ?@n1|PustaLinia|Pusta linia:@? @HIDE() PAR@ @PAR ?@X|SprawdzajDaty|&Sprawdzaj daty:1@? PAR@ Przykład 2: (linia nie będzie wstawiona) @PAR ?@s20|Akronim|&Akronim:@? PAR@ @PAR ?@Hn1|PustaLinia|Pusta linia:@? PAR@ @PAR ?@X|SprawdzajDaty|&Sprawdzaj daty:1@? PAR@ Powyższe rozwiązanie ma wadę w postaci pojawiania się na moment kontrolki parametru a także ze względu na konieczność wpisywania członów składni, które nigdzie nie są wykorzystywane. Wobec powyższego rozwiązanie to należy traktować jako przestarzałe. Aby łatwo wstawić pustą linię, należy zastosować drugi wariant składni (PD), a więc: ?@EOL, jak w przykładzie 3: Przykład 3: (poprawne i zalecane wstawienie pustej linii pomiędzy kontrolki parametrów ??Akronim i ??SprawdzajDaty). @PAR ?@s20|Akronim|&Akronim:@? PAR@ @PAR ?@EOL PAR@ @PAR ?@X|SprawdzajDaty|&Sprawdzaj daty:1@? PAR@ Jeśli w tekście mamy kilka wystąpień parametru o takiej samej nazwie – wszystkie one generują jeden, wspólny parametr (wiązanie po nazwie), którego wartość za każdym razem jest wstawiana we wszystkie miejsca definicji tego parametru. Wartość domyślna parametru jest zczytywana z pierwszego wystąpienia. Wobec powyższego powtarzanie pełnej definicji parametru w tekście jest zbyteczne. Aby uprościć wstawianie w kilku miejscach tego samego parametru została zaimplementowana składnia tzw. odwołań skróconych. Każdy parametr ma określony typ. O typie decyduje człon: Picture, definicji parametru. W zależności od typu dla parametru, kreowana jest jedna lub więcej kontrolek, których ustawienia są standardowe (generyczne). Ustawienia te można zmienić, używając odpowiednich opcji w deklaracji parametru (poza obrębem jego definicji). Składnia ?@[H]S… – gdzie: …, oznacza odpowiedni fragment każdego clarionowego członu: Picture, odpowiedniego typu. Kontrolki PROMPT + ENTRY Atrybuty standardowe: Rozwinięcie Wartość otoczona apostrofami (lub nieotoczona apostrofami, jeśli użyto modyfikatora _NQ). Składnia ?@[H]N… – gdzie: …, oznacza odpowiedni fragment każdego clarionowego członu: Picture, odpowiedniego typu. Kontrolki PROMPT + SPIN Atrybuty standardowe dla kontrolki SPIN: INS, RIGHT, STEP=1, RANGELOW = (9999999999999|0), RANGEHIGH=9999999999999. Akcje standardowe kontrolki SPIN: brak. Rozwinięcie Wartość (dodatkowo otoczona apostrofami, jeśli użyto modyfikatora _Q). Składnia ?@[H]D… – gdzie: …, oznacza odpowiedni fragment każdego clarionowego członu: Picture, odpowiedniego typu. Kontrolki PROMPT + SPIN Atrybuty standardowe dla kontrolki SPIN: INS, RIGHT, STEP=1, RANGELOW=Date(1,1,1900), RANGEHIGH= Date(1,1,2100). Akcje standardowe kontrolki SPIN: Rozwinięcie W zależności od kontekstu: Składnia ?@[H]T… – gdzie: …, oznacza odpowiedni fragment każdego clarionowego członu: Picture, odpowiedniego typu. Kontrolki PROMPT + SPIN Atrybuty standardowe dla kontrolki SPIN: INS, RIGHT, STEP= 60*100(1 min.), RANGELOW=1 (północ), RANGEHIGH=24*3600 (północ). Akcje standardowe kontrolki SPIN: brak. Rozwinięcie W zależności od kontekstu: jeśli wstawiamy parametr do dowolnego tekstu w XL-u albo do filtra TPS z KF lub parametrów wydruku RW w Optimie, albo Składnia ?@[H]DT Wartość początkowa Może być podana w postaci YYYY-MM-DD HH:MM:SS lub YYYYMMDDHHMMSS (bez separatorów i spacji). Można też użyć wyrażenia zawierającego zabindowane funkcje; najczęściej używanym w tym kontekście funkcjami są: Zwraca bieżącą datę i czas w postaci YYYY-MM-DD HH:MM:SS Przypadek zachodzący, gdy długość przekazanego jako pierwszy parametr ciągu znaków przekracza 4. Zwraca podaną parametrami datę i czas w postaci YYYY-MM-DD HH:MM:SS z tym, że data jest obliczana z wyrażenia: _DateExpr a dwa następne parametry są ignorowane. Przykłady Ustalony moment: @PAR ?@DT|dt1|Termin &ostateczny:2003-03-25 16:30:00 @? PAR@ lub @PAR ?@DT|dt1|Termin &ostateczny:20030325163000 @? Bieżący moment: @PAR ?@DT|dt2|&Teraz:{Now()} @? PAR@ Ustalony moment: @PAR ?@ DT|dt3|t&3:2003-03-20 18:00:00@? PAR@ Początek m-ca o 7.15: @PAR ?@DT|dtm1|&Pocz.mc.7.15:{DT({DateClwFirstDay(‘M’)}, 0, 0, 7, 15, 0)} @? PAR@ Koniec m-ca o 16.30: @PAR ?@DT|dtm2|&Kon.mc.16.30:{DT({DateClwLastDay(‘M’)}, 0, 0, 16, 30, 0)} @? PAR@ Początek roku, północ: @PAR ?@DT|dty1|&Początek roku:{DT({DateClwFirstDay(‘Y’)}, 0, 0, 0, 0, 0)} @? PAR@ Koniec roku, północ: @PAR ?@DT|dty2|&Koniec roku:{DT({DateClwLastDay(‘Y’)}, 0, 0, 0, 0, 0)} @? PAR@ 15. nast. m-ca o 13.45: @PAR ?@DT|dtx|&15. nast. m-ca o 13.45:{DT({Date(Month(Today())+1, 15, Year(Today()))}, 0, 0, 13, 45, 0)} @? PAR@ Aby walidować parametry typu DT – należy używać modyfikatorów _Q: Ustalony moment z walidacją: @PAR ?@DT|dt4|t&4:2003-03-22 10:00:00@? @COND(??_Qdt4 >= ??_Qdt3) @CONDMSG(dataczas ”Do” nie może być mniejsza niż dataczas ”Od”) PAR@ Rozwinięcia: …WHERE CRK_TerminOd <= ??dt1 … WHERE YMDHMS(CRK_TerminOd) <= ??_YMDHMS_dt1 … Kontrolki PROMPT + ENTRY Atrybuty standardowe kontrolki ENTRY: INS, LEFT, format @P####-##-## ##:##:##P (YYYY-MM-DD HH:MM:SS), INS, RIGHT. Akcje standardowe kontrolki ENTRY: Rozwinięcie W zależności od kontekstu: jeśli wstawiamy parametr do dowolnego tekstu w XL-u albo do filtra TPS z KF lub parametrów wydruku RW w CDN Optima, albo Składnia ?@[H]X Wartość początkowa Jedna z wartości {0, 1}. Jeśli nie podano – zostanie podstawione 0. Kontrolki CHECK Atrybuty standardowe kontrolki CHECK: TRUEVALUE=1, FALSEVALUE=0. Akcje standardowe kontrolki CHECK: brak. Rozwinięcie Wybrana wartość TRUEVALUE lub FALSEVALUE. Składnia @O(RadioPrompt:RadioValue{[|rPrompt:rValue]…}) Wartość początkowa Jedna z wartości: RadioValue – jeśli nie podano, żadne radio nie będzie podświetlone, chyba że któreś z nich ma przypisaną wartość zero lub pustą. Kontrolki OPTION{RADIO,…} Atrybuty standardowe kontrolki OPTION: BOXED. Akcje standardowe kontrolki OPTION: brak. Rozwinięcie Wartość wybranej opcji: rValue (dodatkowo otoczona apostrofami, jeśli użyto modyfikatora _Q). Uwagi Zaleca się używać list rozwijanych zamiast opcji; jest to podyktowane tym, iż kontrolka opcji zajmuje dużo miejsca na ekranie (w pionie tyle, co dwa inne parametry) i teksty radio są najczęściej obcinane z powodu braku miejsca. Customizować można tylko całą kontrolkę OPTION (zmiana właściwości kontrolek RADIO nie jest przewidywana). Składnia @R(Zapytanie) – gdzie Zapytanie musi być tak zbudowane, aby zwracało przynajmniej dwie kolumny. Te dwie pierwsze kolumny mogą być stringowe lub całkowite w układach Str-Int lub Int-Str; najczęściej zwracają one odpowiednio Id i Kod (albo Kod i Id) pobranych rekordów. W dropdownie wyświetlana jest kolumna stringowa, a jako wartość parametru wstawiana jest kolumna całkowita. Zapytanie nie zawsze musi odwoływać się do jakiegokolwiek obiektu w bazie SQL; dropdowny można z powodzeniem wykorzystywać zamiast „ekranożernych” opcji, np.: @PAR ?@R(SELECT 1, ‘Radio1’ UNION SELECT 2, ‘Radio2’ UNION SELECT 3, ‘Radio3’)|DD|&DD:Radio2 @? PAR@ Wartość początkowa Wartość jest postaci: Id|Kod. Jeśli defaultowy Kod odpowiada istniejącemu w recordsecie rekordowi, wtedy zostanie pobrany odpowiedni Id. Jeśli defaultowe Id odpowiada istniejącemu w recordsecie rekordowi, wtedy zostanie pobrany odpowiedni Kod. Jeśli recordset zawiera choć jeden rekord, wtedy zostanie pobrany Kod i Id pierwszego rekordu. Jeśli jako Kod zostanie podstawiona wartość: brak, wtedy jako Id – wartość pusta. Kontrolki PROMPT + DROPDOWN Atrybuty standardowe kontrolki DROPDOWN: DROP=5, VSCROLL, LEFT, FROM=kolejka wynikowa recordsetu Zapytania. Akcje standardowe kontrolki DROPDOWN: brak. Rozwinięcie Jeśli nie użyto modyfikatora – wstawiana jest wartość Id wybranej pozycji rValue (dodatkowo otoczona apostrofami, jeśli użyto modyfikatora _Q). Użycie modyfikatora _RES2_ powoduje wstawienie wartości pola Kod. Składnia @L(s|n)…(Biblioteka.dll|CallLookupFunkcjaU[(ParametryCallLookupFunkcjaU)]) Typ odpowiada lookupowi do funkcji Funkcja z użyciem przesiadki CallLookupFunkcjaU z biblioteki Biblioteka.dll, która to przesiadka dostaje parametry określające typ akcji (‘INIT’|‘BUTTON’|’ENTRY’), ID (zwykłe ID, GID itp.) i kod (string określający obiekt w sposób jednoznaczny, najczęściej kod, akronim itp.) obiektu i na podstawie tych parametrów wywołuje funkcję wyświetlającą odpowiednią listę w trybie lookup a następnie zwraca wartości dotyczące wybranego przez użytkownika rekordu (szczegóły – analogicznie, jak w rozdziale Lookupy). Wybór s|n decyduje jedynie o formie wyświetlania wartości parametru (ENTRY|SPIN). Wartość początkowa Jest postaci Id|Kod. Jeśli defaultowy Kod odpowiada istniejącemu w bazie rekordowi – zostanie pobrany odpowiedni Id, w przeciwnym razie zostanie wykonana próba pobrania rekordu o podanym Id. Jeśli rekord zostanie znaleziony – zostanie podstawiony odpowiedni Kod, jeśli nie – obiekt zasygnalizuje błąd (to przy inicjalizacji kontrolki parametru, natomiast przy akceptacji nieznalezionej wartości wywoła lookup). Jeśli chcemy z aplikacji wysłać zmienną dynamiczną inicjalizującą wartość początkową parametru typu lookup to możemy, ale nie musimy użyć składni [Id]|[Kod] (z pipem). Podanie samego Id jest też poprawne (klasa wykresów w przypadku stwierdzenia braku pipe-a w wartości związanej z parametrem typu lookup doklei go na koniec wartości, a więc zainicjalizuje parametr wartością:’|Id’). Opcjonalne parametry ParametryCallLookupFunkcjaU mogą zawierać odwołania do wartości innych parametrów dynamicznych; jest to jedyny obsługiwany przypadek zagnieżdżania parametrów (obsługiwany tylko w wyższej warstwie, tj. przez klasę operującą na kontrolkach). Składnia odwołania jest następująca: ?#[_Q]NazwaInnegoParametru#?. Przykład: BZp_BRpID=?@Ls30_NQ(OP_KASAI.DLL|CALLLOOKUPBRPLISTA({_Q’BRA,’&?#_QRachunekID#?}))|RaportID|&Raport:0|@?. Kontrolki PROMPTBUTTON + (ENTRY|SPIN) Atrybuty standardowe kontrolki ENTRY/SPIN: takie, jak dla standardowego typu stringowego/numerycznego. Akcje standardowe kontrolki PROMPTBUTTON: Rozwinięcie Jeśli nie użyto modyfikatora – wstawiana jest bieżąca wartość: Id (dodatkowo otoczona apostrofami, jeśli użyto modyfikatora _Q). Użycie modyfikatora _RES2_ powoduje wstawienie wartości pola Kod. Składnia @Fs…(F[ile]|D[irectory]][,[O[pen]|S[ave]][,Maski][,MaskaDomyslna][,Flagi]) Typ odpowiada dialogowi systemowemu pozwalającemu wybrać plik lub katalog. Kontrolki PROMPTBUTTON + ENTRY – gdzie znaczenie opcjonalnych atrybutów jest następujące: OFN_ALLOWMULTISELECT EQUATE(00000200h) OFN_CREATEPROMPT EQUATE(00002000h) OFN_ENABLEHOOK EQUATE(00000020h) OFN_ENABLETEMPLATE EQUATE(00000040h) OFN_ENABLETEMPLATEHANDLE EQUATE(00000080h) OFN_EXPLORER EQUATE(00080000h) OFN_EXTENSIONDIFFERENT EQUATE(00000400h) OFN_FILEMUSTEXIST EQUATE(00001000h) OFN_HIDEREADONLY EQUATE(00000004h) OFN_LONGNAMES EQUATE(00200000h) OFN_NOCHANGEDIR EQUATE(00000008h) OFN_NODEREFERENCELINKS EQUATE(00100000h) OFN_NOLONGNAMES EQUATE(00040000h) OFN_NONETWORKBUTTON EQUATE(00020000h) OFN_NOREADONLYRETURN EQUATE(00008000h) OFN_NOTESTFILECREATE EQUATE(00010000h) OFN_NOVALIDATE EQUATE(00000100h) OFN_OVERWRITEPROMPT EQUATE(00000002h) OFN_PATHMUSTEXIST EQUATE(00000800h) OFN_SHOWHELP EQUATE(00000010h) OFN_SHAREAWARE EQUATE(00004000h) OFN_SHAREFALLTHROUGH EQUATE(2) OFN_SHARENOWARN EQUATE(1) OFN_SHAREWARN EQUATE(0) Jeśli nie podano – przyjmuje się OFN_NOCHANGEDIR + OFN_PATHMUSTEXIST + OFN_FILEMUSTEXIST – dla otwierania pliku, OFN_NOCHANGEDIR + OFN_PATHMUSTEXIST – dla zapisu pliku i OFN_NOCHANGEDIR + OFN_PATHMUSTEXIST dla otwarcia katalogu. Atrybuty standardowe kontrolki ENTRY: jak dla standardowego typu stringowego. Akcje standardowe kontrolki PROMPTBUTTON: File Dialog lub Dir Dialog Akcje standardowe kontrolki ENTRY:W trybie wyboru katalogu doklejanie backslash-a na końcu wartości, jeśli wartość kończy się innym znakiem. Rozwinięcie Wartość otoczona apostrofami (lub nieotoczona apostrofami, jeśli użyto modyfikatora _NQ). Przykłady @PAR ?@Fs255(File, Open, ‘Pliki tekstowe (*.txt)|*.txt|Wszystkie pliki (*.*)|*.*’, *.txt)|FileOpen|&File open:d:\app @? PAR@ @PAR ?@Fs255(, , ‘Pliki tekstowe (*.txt)|*.txt|Wszystkie pliki (*.*)|*.*’, *.txt)|FileOpen|&File open:d:\app@? @PAR ?@Fs255(File,Save)|FileSave|&File save:d:\app @? PAR@ @PAR ?@Fs255(Dir)|Dir|&Dir:d:\app @? PAR@ Składnia ?@EOL Parametr tego typu jest interpretowany tylko w procesie wyświetlania kontrolek parametrów dynamicznych. Jego deklaracja jest usuwana z tekstu, a używanie odwołań – niemożliwe (brak nazwy parametru). Kontrolki brak Rozwinięcie Usunięcie deklaracji z tekstu. Składnia ?@ABC(‘Tekst do wyświetlenia’) Parametr tego typu jest interpretowany tylko w procesie wyświetlania kontrolek parametrów dynamicznych. Jego deklaracja jest usuwana z tekstu, a używanie odwołań – niemożliwe (brak nazwy parametru). W tekście należy używać zawsze pełnej deklaracji parametru (@PAR … PAR@), a nie samej definicji. W zasadzie użycie apostrofów ograniczających jest konieczne tylko, gdy w tekście do wyświetlenia występują nawiasy (), {} lub inne zastrzeżone sekwencje specjalne. Jednak dla większego bezpieczeństwa zaleca się zawsze używać apostrofów ograniczających. Jeśli w wyświetlanym tekście mają być apostrofy – w deklaracji należy je zdublować. Kontrolki brak Rozwinięcie Usunięcie deklaracji z tekstu. Uwagi Jeśli parametr ma być przez całą szerokość panelu – należy umieścić go po lewej stronie, a po prawej stronie (jako sąsiadujący parametr) wstawić parametr EOL. Przykłady @PAR ?@ABC(‘To jest tylko taki testowy tekst żeby wypróbować nowy typ parametru dynamicznego (typ ”ABC”).’)@? PAR@ Rozwijanie parametrów, to wstawianie ich aktualnych wartości w miejsce odwołań do tych parametrów. Istnieją dwa rodzaje odwołań do parametru: Należy mieć na uwadze fakt, że pomimo tego, iż w tekście istnieje kilka wystąpień tego samego parametru (a więc parametru o takiej samej nazwie Nazwa), to i tak będzie wykreowana tylko jedna kontrolka, a jej ustawienia będą zgodne z pierwszym wystąpieniem parametru (jeśli to wystąpienie posiada znacznik ukrycia H – kontrolka parametru nie będzie w ogóle wykreowana). Ustawienia następnych wystąpień są ignorowane. ??[(_Q|_NQ)][Modyfikator…]Nazwa (PD2) przy czym Nazwa nie może zawierać spacji z Modyfikator. Modyfikator ustala niestandardowe rozwijanie parametru i może być równy jednemu z poniższych ciągów znaków: _RES2_ (wymuszenie wstawiania ‘kodu’ zamiast ‘ID’ dla parametrów typu DROPDOWN i LOOKUP), _YMD_ (wstawianie wartości datownikowego parametru w formacie YYYY-MM-DD) _HMS_ (wstawianie wartości czasowego parametru w formacie HH:MM:SS) _ YMDHMS_ (wstawianie wartości datowoczasowego parametru w formacie YYYY-MM-DD HH:MM:SS) _ DQ_ (dublowanie apostrofów wewnątrz wartości). Zalecanym odwołaniem jest odwołanie skrócone – jest ono prostsze w użyciu a zarazem daje większe możliwości (modyfikatory). Odwołanie pełne (poprzez definicję parametru) jest pozostawione jedynie dla kompatybilności wstecz. Zalecanym sposobem jest utworzenie w jednym miejscu deklaracji wszystkich parametrów, a następnie stosowanie w dowolnych miejscach tylko odwołań skróconych. Jest to zdecydowanie bardziej ergonomiczny sposób: nie musimy wpisywać wiele razy ustawień parametru, które i tak (poza pierwszym) będą zignorowane. Ustawienia będą oczywiście pobrane z pierwszego wystąpienia parametru o nazwie Nazwa, zgodnego z pełną składnią (PD). Ponadto tylko w odwołaniach skróconych można stosować modyfikatory. Ograniczeniem tego rozwiązania jest niedopuszczenie spacji w Nazwie parametru. Ponieważ odwołanie skrócone nie posiada sekwencji zakończenia – jego koniec ustalany jest podobnie, jak w przypadku zwykłego parametru bez sekwencji zakończenia (tj. po Nazwie musi występować jeden ze znaków określonych w zbiorze automatycznej sekwencji zakończenia parametru) z tą różnicą, że terminatorem może być dodatkowo znak ‘{‘. Podana na początku składnia definicji parametru dynamicznego (PD) może zostać umieszczona wewnątrz tzw. deklaracji parametru. Składnia deklaracji parametru dynamicznego jest następująca: @PAR Definicja Opcje PAR@ (PD-DEKL) gdzie Definicja ¬oznacza definicję parametru, określoną wzorem (PD) natomiast Opcje – ciąg opcji określających dodatkowe własności kontrolki parametru, oddzielonych spacjami: Opcje = @Opcja([WarunekLubWartosc]) [@Opcja([WarunekLubWartosc])…] (PD-DEKL-O) gdzie Opcja – jedna z opcji określających dodatkowe własności kontrolki parametru, WarunekLubWartosc – wyrażenie określające warunek zastosowania Opcji (np. dla disablowania) lub wartość opcji (np. wartość tip-u). W tej chwili dostępne są następujące opcje: Opcja = (D[ISABLE] | H[IDE] | U[PPER] | (RL|RANGE LOW) | (RH|RANGE HIGH) | S[TEP] | T[IP] | M[SG] | COND | CONDMSG) (PD-DEKL-O-O) W WarunekLubWartosc mogą występować wyrażenia. Jeśli WarunekLubWartosc nie zostanie otoczony nawiasami {} – nawiasy te zostaną automatycznie dodane, co spowoduje ewaluację WarunekLubWartosc jako wyrażenia. W przypadku pominięcia WarunekLubWartosc – uznaje się, że dana opcja ma występować bezwarunkowo lub ma wartość pustą. Jeżeli WarunekLubWartosc dotyczy opcji COND to jest on sprawdzany w oparciu o bieżące wartości wszystkich parametrów dynamicznych. Warunek jest sprawdzany: Jeśli mają zostać walidowane parametry typu DT – należy używać modyfikatorów _Q: @PAR ?@DT|dt4|t&4:2003-03-22 10:00:00@? @COND(??_Qdt4 >= ??_Qdt3) @CONDMSG(dataczas ”Do” nie może być mniejsza niż dataczas ”Od”) PAR@ Dla ułatwienia posługiwania się opcjami @M[SG] i @T[IP] wprowadzono następujący element składni: @M[SG](=T[IP]) – przepisanie tip-u do message’a @T[IP](=M[SG]) – przepisanie message’a do tip-u Nie ma tu znaczenia kolejność występowania tych opcji. Użycie deklaracji parametrów pozwala na: Istotną różnicą pomiędzy deklaracją parametru a jego definicją jest to, że deklaracje parametrów są w całości usuwane z tekstu przed jego wykonaniem. Jeśli dany parametr ma gdziekolwiek w tekście deklarację – zostanie ona użyta do określenia własności parametru, nawet jeśli przed deklaracją występuje pełna definicja parametru. W poniższym przykładzie Akronim jest zawsze UPPER a ponadto jest disablowany za każdym razem gdy Numer > 10. Z kolei Numer to spin o zakresie (–100; 100) i skoku 2, disablowany w przypadku gdy Akronim = ‘D’. Wreszcie spin Hide jest ukrywany, jeśli Numer=30. Parametr DataDo musi mieć wartość nie mniejszą od wartości parametru DataOd a przynajmniej jeden z checków FA, PA musi być zaznaczony. @PAR ?@S20|Akronim|&Akronim:ALA@? @U(), @D(??Numer > 10) @MSG(Akronim kontrahenta) @TIP(=MSG) PAR@ @PAR ?@N-15.2|Numer|&Numer:20.0@? @RL(-100) @RH(100) @S(2) @D(??Akronim = ‘D’) PAR@ @PAR ?@N-15.2|Hide|&Hide:1.0@? @H(??Numer = 30) PAR@ @PAR ?@N-3|Do|&Do:10@? @RL(??Od) @RH(??Od + 10) PAR@ @PAR ?@D17|DataDo|&Do:{Today()+1}@? @COND(??DataDo >= ??DataOd) @CONDMSG(Data Do nie może być wcześniejsza niż data Od) PAR@ @PAR ?@X|PA|&Paragony:1@? @COND(??FA + ??PA > 0) @CONDMSG(Przynajmniej jeden typ dokumentu musi być zaznaczony) PAR@Wstawianie pustych linii pomiędzy parametrami
Powtarzanie parametrów w tekście
Zagnieżdżanie parametrów
Typy parametrów
Typ stringowy S (typ standardowy CW)
Typ numeryczny N (typ standardowy CW)
Typ datownikowy D (typ standardowy CW)
Typ czasowy T (typ standardowy CW)
Typ dataczasowy DT (typ dodatkowy)
Typ logiczny X (typ dodatkowy)
Typ wyboru opcji O (typ dodatkowy)
Typ wyboru z listy rozwijanej R (typ dodatkowy)
Typ wyboru z listy wywoływanej L – LOOKUP (typ dodatkowy)
Typ wyboru pliku lub katalogu F – FILE(DIR)DIALOG (typ dodatkowy)
Typ pusty EOL – wstawienie wolnego miejsca (typ dodatkowy)
Typ tekstowy ABC – wstawienie zadanego tekstu na oknie (typ dodatkowy)
Odwołania do parametrów, rozwijanie parametrów
Deklaracje parametrów