QBS
>> Suplementy i dokumentacja techniczna
>> Pliki konfiguracyjne
Komentarze
Komentarze piszemy po // do końca linii, lub pomiędzy /* */. Tak jak w języku programowania C.
W pliku konfiguracyjnym może się znajdować kilka rodzajów obiektów (bloków).
Pierwsze słowo każdego bloku to kod rodzaju, a następnie jego definicja (składnia może być inna dla każdego rodzaju)
Rodzaje Obiektów w pliku konfiguracyjnym
W pliku konfiguracyjnym może się znajdować kilka rodzajów obiektów (bloków).
Pierwsze słowo każdego bloku to kod rodzaju, a następnie jego definicja (składnia może być inna dla każdego rodzaju)
Oto lista istniejących rodzajów bloków ( ich kody ):
- Obiekty TAB -
Służą one do opisu struktury baz, browserów, edycji rekordu (i innych w przyszłości).
- Obiekty MENU -
Służą one do opisu menu.
- Obiekty EXT -
Służą one do tworzenia rozszerzeń do obiektów TAB i MENU
- Obiekty RSS -
Służą one do definiowania związków relacyjnych między bazami
- Obiekty BSS -
Służą one do definiowania zakresu wyświetlanych rekordów w browserze
- Obiekty EVH -
Służą one do definiowania całego "zestawu" : BSS + RSS + pola kopiowane + inne atrybuty - dla pól które korzystają z innych baz ( Słownik Historia Lookup itd )
Blok definicji tabelek - TAB
Blok definicji tabelek TAB - Składnia
Blok TAB (po prostu tabelka) składa się z następujących części
TAB jest dość
uniwersalną strukturą. Służy ona do definiowania struktur baz danych,
browserów, edycji rekordów ... Inaczej mówiąc w tą samą formę zapisu
(rozszerzenia + nagłówek + kolumny i linie) wrzucona jest definicja
wielu różnych obiektów. Ponieważ nigdzie nie podajemy explicite co
definiuje dany TAB, jeden TAB może jednocześnie definiować dwa różne obiekty
(np: Tabele na serwerze SEP i Browser). W takiej sytuacji pewne kolumny będą
interpretowane tylko przez jeden obiekt, zaś inne tylko przez drugi,
no i będą także takie, które są wspólne. To podejście pozawala na definiowanie nowych obiektów,
tylko przez przedefiniowywanie różnic. (np. w spojrzeniu innym zmieniamy tytuł i dodajemy tylko pole)
Lista atrybutów nagłówka i linii tabelki jest różna dla różnych obiektów:
Linia identyfikująca
Blok rozpoczyna się słówkiem TAB, następnie pojawia się identyfikator Tabelki (unikalny kod odwołania po którym będziemy szukać).
jeżeli tabelka ma rozszerzać inną to po tym występuje słowo extends a następnie lista identyfikatorów tabelek roszerzanych.
Ogólny opis mechanizmu rozszerzania znajduje się w punkcie Zasady rozszerzania bloków
Np:
TAB BOLEK // bez rozszerzania
// albo
TAB BOLEK extends BOLECZEK1 BOLECZEK2; // rozszerzająca tabelki BOLECZEK1 i BOLECZEK2
Nagłówek tabelki
Nagłówek tabelki składa się po prostu z kolejnych atrybutów i ich wartości.
Definicja atrybutu jest postaci
<identyfikator atrybutu>=<wartość>
gdzie składnia pola <wartość> zależy od samego atrybutu. atrybuty nagłówka
mogą oczywiście być dziedziczone i nadpisywane. wyjątkiem jest tylko atrybut BASETYPE.
Oto przykład:
TITLE="Okresy zawodników w drużynach"
BASE=TEAM_PLAYERS
BASETYPE=SEP
POS=10 30
RECEDIT=TEAM_PLAYER_EDIT
ORDERS=
{
ID FIELDS LABEL VIS;
ID ( ID ) "Id" HIDE UNIQUE=YES;
}
W celu utrzymania czytelności przed każdym atrybutem nagłówka należy zrobić
wcięcie (4 spacje).
Ciało tabelki - czyli rzędy i kolumny
Ciało tabelki zaczyna się od lini definiującej identyfikatory obowiązkowych atrybutów dla następujących linii.
Następnie występują właściwe linie tabelki;
Każda linia definiuje jakiś zastaw atrybutów. Każda linia musi definiować wszystkie linie
podane w pierwszej linijce po koleji podając wartości tych atrybutów. O kolejności wartości
atrybutów decyduje kolejność podana w pierwszej linii. Po podaniu wszystkich obowiązkowych atrybutów
możemy podać wartości dla innych atrybutów. wystarczy podać identyfikator atrybutu a następnie po znaku =
jego wartość.
Jedynym atrybutem obowiązkowym w każdej linii każdej tabelki jest atrybut ID
czyli identyfikator linii.Zwyczajowo podajemy go
jako pierwszy identyfikator w linii obowiązkowych atrybutów.
Każda liniia (łącznie z pierwszą linią (obowiązkowych kolumn)) musi być zakończona średnikiem.
zakończona jest średnikiem. Oto przykład:
{
ID LEN TYPE NAME;
ID 8 INT "ID" VIS=HIDE;
TEAMID 8 INT "TEAMID" VIS=HIDE;
PLAYERID 8 INT "PLAYERID" VIS=HIDE;
DATE_FROM 8 INT "Data od" MASK=DATE;
DATE_TO 8 INT "Data do" MASK=DATE;
DATE_TO_ORDER 8 INT "Data ord" MASK=DATE AUTFUN=DATE_TO=0?2567655:DATE_TO;
}
Formalna składnia
Syntax:
{
<linia identyfikatorów obowiązkowych>
<linia>
<linia>
.
.
.
<linia>
}
rozwijając:
{
< id-atr obow> < id-atr obow> .... < id-atr obow>;
<wart-atr obow> <wart-atr obow> .... <wart-atr obow> <id-atr>=<wart-atr> .... <id-atr>=<wart-atr> ;
<wart-atr obow> <wart-atr obow> .... <wart-atr obow> <id-atr>=<wart-atr> .... <id-atr>=<wart-atr> ;
. .
. .
. .
<wart-atr obow> <wart-atr obow> .... <wart-atr obow> <id-atr>=<wart-atr> .... <id-atr>=<wart-atr> ;
}
gdzie
- <linia identyfikatorów obowiązkowych> to lista identyfikatorów obowiązkowych zakończonych średnikiem.
- <linia> to lista < wart-atr obow> - musi być ich tyle co identyfikatorów obowiązkowych następnie
definicje atrybutów opcjonalnych postaci <id-atr>=<wart-atr> zakończone średnikiem, ich liczba może być różna dla różnych linii.
- <id-atr obow>i< id-atr> to identyfikatory atrybutów.
- <wart-atr obow>i< wart-atr> to wartości atrybutów ich składnia zależy od konkretnego atrybutu.
Jest jedna specjalna wartość (myślnik) - oznacza ona nie zdefiniowanie atrybutu. Używana jest tam gdzie nie chcemy definiować obowiązkowych atrybutów.
UWAGI
- Puste ciało tabelki możemy zapisać jako {;}.
- W przypadku rozszerzania tabelki domyślna kolejność linii jest następująca: njapierw linie które były zdefiniowane
w tabelkach rozszerzanych, potem linie nowe (nie występujące w tabelkach nadrzędnych. Kolejność domyślna może być przedefiniowana
atrybutem nagłówka FIELDORDER.
Blok definicji tabelek TAB - Atrybuty
Atrybuty zależą od konkretnych obiektów opisywanych przez TAB
Atrybuty tabeli bazowej
Atrybuty nagłówka tabeli bazowej
- BASETYPE- czy TAB jest tabelą bazową / jaką
- BASE - nazwa tabeli na serwerze
- ORDERS - uporządkowania na bazie
- OPIS: Lista uporządkowań na tabeli, składnia jest taka sama jak w ciele tabelki,
Dostępne są następujące kolumny:
- ID - identyfikator uporządkowania (wymyślić se jakiś)
- FIELDS - ( <identifier> <identifier> ... <identifier> ) - lista identyfikatorów pól w indeksie
- LABEL - <string> - nazwa uporządkowania
- VIS - <identifier> - [SHOW|HIDE] indeks widoczny/ukryty (dla zmiany uporządkowania w browserze) - domyślnie SHOW;
- UNIQUE - <identifier> - [YES|NO] indeks widoczny/ukryty (dla zmiany uporządkowania w browserze) - domyślnie NO
- SKŁADNIA WARTOŚCI: dokładnie tak jak w tabelce, tyle że z podanymi wyże atrybutami.
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: Dla tabel bazowych konieczny
Atrybuty kolumn tabeli na serwerze
Uwaga kolejność pól powinna być zgodna z kolejnością pól na serwerze.
- ID- Identyfikator pola
- LEN- długość pola
- OPIS: Liczba bajtów na jakiej trzymane jest pole, dla typów INT i DOUBLE ma być 8
(INT - jest rzeczywiście na 8, lecz DOUBLE nie, ale to szczegół).
- SKŁADNIA WARTOŚCI:
<int> - długość pola
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: konieczny!
- TYPE- typ pola
Atrybuty Browsera
Atrybuty nagłówka Browsera
- TITLE- tytuł browsera
- OPIS: Tytuł na belce browsera.
- SKŁADNIA WARTOŚCI:
<string>
- WARTOŚĆ DOMYŚLNA: "Spis"
- WYMAGALNOŚĆ: opcjonalny
- POS- pozycja browsera
- OPIS: Pozycja browsera na ekranie podana procentowo (X,Y)
- SKŁADNIA WARTOŚCI:
<intX> <intY>
- WARTOŚĆ DOMYŚLNA: 50 50
- WYMAGALNOŚĆ: opcjonalny
- SIZE- wielkość browsera
- OPIS: Wielkość preferowana browsera, X - w znakach Y - w liniach,
jeżeli jakaś współrzędna jest = 0 to dla tej współrzędnej brana jest wartość domyślna
- SKŁADNIA WARTOŚCI:
<intChars> <intRows>
- WARTOŚĆ DOMYŚLNA: intChars = wyliczana z szeerokości kolumn, intRows=20
- WYMAGALNOŚĆ: opcjonalny
- RECEDIT- kod tabelki opisującej edycję rekordu
- OPIS: Atrybut ten mówi jaka tabelka będzie używana do opisu edycji rekordu na browserze (jak wciskamy INSET MODIFY lub ENTER)
- SKŁADNIA WARTOŚCI:
<identifier>
- WARTOŚĆ DOMYŚLNA: kod naszej tabelki czyli ta sama tabelka definiuje i browsera i edycję rekordu
- WYMAGALNOŚĆ: opcjonalny
- BAROFF- wyłączenie paska z ikonkami
- BROWSER_ACTIONS- akcje dostępne na browserze
- FIELDORDER- wymuszenie kolejności i zbioru pól
LINE_ATTRIB- ustalenie atrybutów linii browsera
ORDERSBAR- wyłączenie paska z uporządkowaniem
Atrybuty ciała tabelki (kolumny) dla Browsera
- AUTFUN- definicja kolumny wiliczeniowej
- ATTRIB- atrybuty kolumny
- EDILEN- szerokość kolumny w browserze
- OPIS: Szerokość kolumny w browserze (podana w znakach standardowych), domyślna brana z kolumny LEN.
Jednak ponieważ często BROWSER TAB i BASE TAB są tą samą tabelką to został wprowadzony dodatkowy atrybut,
znaczący to samo co LEN.
- SKŁADNIA WARTOŚCI:
<int> - liczba całkowita
- WARTOŚĆ DOMYŚLNA: z kolumny LEN
- WYMAGALNOŚĆ: opcjonalna
- ID- ID pola
- OPIS: Identyfikator pola
- SKŁADNIA WARTOŚCI:
<identifier>
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: konieczny
- LEN- szerokość kolumny w browserze
- OPIS: tu możemy przedefiniować szerokość kolumny w browserze.
Uwaga: można to też zrobić atrybutem EDILEN.
- SKŁADNIA WARTOŚCI:
<int> - długość
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: konieczny!
- LOOK- lookup - czyli makro wypełniające pole wartością
z bazy zewnętrznej w browserze.
- OPIS: Możemy dodać do browsera pola wyciągane w locie z innej bazy. Lookupy są realizowane przez
serwer (SEP), w związku z tym narzut czasowy jest mały ale zauważalny. Jeden lookup definijue
tylko sposób wypełninia pól (nie zaś kolumny), kolumny trzeba jawnie zadeklarować jako kolumny tabelki BROWSER.
Co więcej jeden Lookup może wypełniać kilka kolumn za jednym zamachem. (np wyciągane z innej bazy imię i nazwisko). Takie
łączenie jest zalecane efektywnościowo, gdyż serwer wykonuje wtedy jedną operację wyszukania dla kilku pól. Zmniejsza to niestety czytelność
tabelki. Dlatego jeżeli nie jest to wymagane, lepiej by każde pole lookup było definiowane oddzielnym
makrem lookup zdefiniowanym przy tym właśnie polu.
|
UWAGA!!!!: TEJ KOLUMNY NIE WOLNO DEFINOWAĆ W SPOJRZENIU BROWSERA (bezpośrednio lub pośrednio przez dziedziczenie)
JEŻELI POLE O TYM SAMYM IDENTYFIKATORZE JEST ZADEKLAROWANE JAKO BAZOWE!!!
|
Co jakby ktoś chciał to zrobić to mówię że jest to bez sensu - niech się zastanowi! A jak chce zapamiętać lookup
to niech kolumne LOOK zdefiniuje tylko dla spojrzenia edycji rekordu.
- SKŁADNIA WARTOŚCI:
<MacroEVH> - lookup określony makrem EVH
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- MASK- Sposób wyświetlania kolumny
- OPIS: Sposób wyświetlania kolumny w browserze jest definiowany przez tą kolumnę, zaś jeżeli tej kolumny brak, to
wtedy wartość domyślna brana z kolumny TYPE. Wszystkie wartości numeryczne zostaną
wyrównane do prawej strony, pozostałe do lewej (to oczywiste!).
- SKŁADNIA WARTOŚCI: Zajrzyj do opisu Masek
- WARTOŚĆ DOMYŚLNA: dla różynych wartości typów TYPE.
- INT - jako liczba całkowita
- STRING - jako string
- DOUBLE - double. - to jeszcze trzeba zrobić, a gdyby było już zrobione to wywalcie ten tekst.
- WYMAGALNOŚĆ: opcjonalna
- NAME- nazwa kolumny w browserze
- TYPE- bazowy typ pola
- OPIS: typ pola (tak jak w tabeli bazowej TYPE)
Atrybuty Tabelki Edycji Rekordu
Atrybuty nagłówka edycji rekordu
- AER_CONDITION- warunek zatwierdzenia rekordu.
- OPIS: Tu możemy określić jakie warunki muszą spełnić rekord, żeby mógł zostać zaakceptowany. Wymusza się tu wypełnienie pewnych pól.
Można też zadać warunek na wzajemną zależność pól. (np Pole A > pole B)
- SKŁADNIA WARTOŚCI: <condition_element> .... <condition_element>; - podajemy listę
<condition_element> gdzie każdy z nich to jeden z:
- MBF(<fiedlId> ..... <fiedlId>) - (Must be filled) Podana lista pól musi być wypełniona.
- COND(<condition>) - podany warunek musi być prawdziwy
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- ASKESC- Czy pytać o porzucenie edycji rekordu.
- OPIS: Ustawiając ten atrybut na wartość YES przy każdej próbie porzucenia edycji rekordu (ESC) program się zapyta
czy na pewno chcemy wyjść. Jest to szczególnie pożądane dla rekordów z historiami.
- SKŁADNIA WARTOŚCI: "YES"
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- BUTTONS- określenie paska guzików.
- OPIS: Tu podajemy zawartość paska (belki) z guzikami pojawiającej się na dole pod edycji rekordu.
Można użyć standardowej belki (DEFAULT czyli - OK i CANCEL), wyłączyć ją (NONE) lub samemu określić guziki jakie mają się pojawić (EXPLICITE).
Przy tym ostatnim podajemy listę identyfikatorów pól przy których są zdefiniowane Maksi BUTTON z których to brana jest akcja, nazwy guzików brane są z nazw pól.
dodatkowo można tam podać jeden z predefiniowanych identyfikatorów (OK lub CANCEL)
- SKŁADNIA WARTOŚCI: <buttons_set_type> - Określamy listę guzików gdzie <buttons_set_type> to
- NONE - Belka z guzikami wyłączona.
- DEFAULT - Belka z guzikami standardowymi (OK i CANCEL)
- EXPLICITE(<buttonid>....<buttonid>) - bezpośrednio określamy listę guzików, a <buttonid> to:
- WARTOŚĆ DOMYŚLNA: DEFAULT
- WYMAGALNOŚĆ: opcjonalny
- COPY2HIST_FIELDS- wykonanie kopiowania pól do historii.
- OPIS: Tu możemy określić dla jakich historii wykonywane będzie kopiowanie do historii.
Podajemy rodzaj kopiowania a następnie w nawiasach listę pól do których mamy podpięte
historie z kopiowaniem do historii czyli w makrze musi być BROWSER_INS_.
Pola które nie są wyszczególnione a mają takie makra nie będą kopiowane.
Kopiowanie do historii wykonane jest po F10 po sprawdzeniu poprawności i po Triggerze.
Dla serwerów SQL można to mocno przyśpieszyć.
- SKŁADNIA WARTOŚCI: <c2h_element> .... <c2h_element>; - podajemy listę
<c2h_element> gdzie każdy z nich to jeden z:
- HARD(<fiedlId> ..... <fiedlId>) - Twarde kopiowanie tzn zawsze.
- SOFT(<fiedlId> ..... <fiedlId>) - Tylko w puste pola.
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- F10LOOKUPS- Liczenie lookup'ów po F10
- OPIS: Ustawiając ten atrybut na wartość TRUE lookup'y zostaną ponownie policzone po F10. Można dzięki temu wyciągać
do głowy jakieś wartości z np. historii.
- SKŁADNIA WARTOŚCI: "TRUE"
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- LAYOUT- definicja rozmieszczenia kontrolek w karcie edycji rekordu
- OPIS: Tym atrybutem budujemy opis wygląd karty edycji, podając <layout_element>,
najprostrzym ułożeniem jest TCP czyli ułożenie poł jedno pod drugim. Można też składać elementy z innych elementów
- SKŁADNIA WARTOŚCI: kliknij tu by zobaczyć pełną składnię wartości
- WARTOŚĆ DOMYŚLNA: TCP( <wszystkie widoczne pola> )
- WYMAGALNOŚĆ: opcjonalny
- POS- pozycja karty rekordu
- OPIS: pozycja procentowa .
- SKŁADNIA WARTOŚCI:
<intX> <intY>
- WARTOŚĆ DOMYŚLNA: 50 50
- WYMAGALNOŚĆ: opcjonalny
- TITLE- tytuł
- OPIS: Tytuł na belce browsera.
- SKŁADNIA WARTOŚCI:
<string>
- WARTOŚĆ DOMYŚLNA: "Spis"
- WYMAGALNOŚĆ: opcjonalny
Kolumny ciała edycji rekordu
- ATTIRB- atrybuty pola
- AUTFUN- definicja pola wiliczeniowego
- OPIS: Możemy zdefiniować pole wyliczające się na podstwie innych, czyli za pomocą wyrażenia.
UWAGA!!!! pole takie zawsze musi się umieć wyliczyć, niezależnie od wartości rekordu. Czyli nie może być wyrażeń warunkowych dla których nie
są podane wartości dla wszystkich przypadków. Jeżeli są to zwykłe Autfuny (wyliczjące się w nieokreślonych momentach, tzn nic nie możemy założyć o momencie wyliczenia się takiego AutFuna'a
co więcej w grafie zaleźności nie może być wtedy cyklu.
Jedynym wyjątkiem są turja AutFun'y leniwe tzn wyliczają się tylko jeżeli pole BEZPOŚREDNIO wpływające na nie zostanie zmienione
"z palca". Tu mogą być cykle.
wyliczana podczas wyświetlania browsera. UWAGA: każda taka kolumna spowalnia pracę browsera
- SKŁADNIA WARTOŚCI:
<expression> - wyrażenie typu AutFun,
może być poprzedzone słowem kluczowym CTRL_LAZY wtedy AutFun jest leniwy.
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- BASEFUN- definicja pola wyliczeniowego (sumowanego)
- OPIS: Możemy zdefiniować pole które sumuje jakieś wyrażenie przeglądając
bazę zewnętrzną oraz jest na bieżąco uaktualniane (również w trakcie dopisywania rekordów). Pola te są bardzo wygodne to oblicznia sum jakiegoś pola w historii lub ilości rekordów itp....
Jako wartość sumowaną dla każdego rekordu podajemy wyrażenie
UWAGA!!!! Na razie pole to przelicza się za każdym razem jak otwieramy kartę rekordu (docelowo będzie to opcja)
- SKŁADNIA WARTOŚCI:
Możliwe są następujące rodzaje BASEFUN'ów
- SUM(<fieldid>,<expression>) - Sumuje wartość gdzie <fieldid> to identyfikator pola z podpiętym makrem historii,
zaś <expression> to wyrażenie typu AutFun liczone dla REKORDU HISTORII i sumowane.
- COUNT(<fieldid>) - liczy ilość pozycji gdzie <fieldid> to identyfikator pola z podpiętym makrem historii.Jest to samo co
SUM(<fieldid>,1), ale ponieważ jest często używane to zostało wydzielone.
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- DEFVALUE- wartość wstawiane podczas INSERT
- OPIS: Dzięki temu pole możemy zdefiniować wartości domyślne, podając czym pole ma się wypełnić,
przy dodawaniu nowej pozycji. Ta kolumna może być też użyta do innych celów. Np. możemy wstawić
identyfikator użytkownika wporwadzającego pozycję, albo jakąś wartość z par. systemowych... i pewnie jest jeszcze parę innych zastosowań.
Jak się można domyśleć jest to wyrażenie typu AutFun
- SKŁADNIA WARTOŚCI:
<expression> - wyrażenie typu AutFun,
- WARTOŚĆ DOMYŚLNA: brak
- WYMAGALNOŚĆ: opcjonalny
- EDILEN- przedefiniowanie długości pola edytowalnego
- OPIS: Pole to ma różne znaczenie zależnie od maski. Dla stringów kontrolki będą scrollować wartość, dla liczb całkowitych i
rzeczywistych na tylu miejscach będzie to edytowalne i już ....., a dla niektórych kontrolek nie ma to znaczenia.
- SKŁADNIA WARTOŚCI:
<int> - liczba całkowita oznaczająca liczbę znaków.
- WARTOŚĆ DOMYŚLNA: dla MONEY - 20 dla INT i DOUBLE - 8 , a dla reszty tyle co LEN
- WYMAGALNOŚĆ: opcjonalny
- ENABLED- dynamiczne włącznie pola do edycji i wyłącznie
- OPIS: Można tu określić warunkiem kiedy pole ma być do edycji, a kiedy nie.
Warunek ten możemy uzależnić od wartości innych pól tego samego rekordu, w trakcie edycji włączając i wyłączjąc pola.
Warunek który podajemy (jeśli jest prawdziwy to pole jest do edycji) jest wyrażeniem typu typu AutFun,
więc zastosowań tego jest dużo.
UWAGA!!!:Wyrażenia w tej kolumnie przeliczają się na podstawie tzw. parametrów kontrolek. Jesli chcemy reagowac
dopiero po wyjsciu z pola to przed Autfun'em trzeba podac modyfikator REC_PARAMS
Dlatego można przełączyć wyrażenie w tej kolumnie na parametry rekordu pisząc przed wyrażeniem identyfikator REC_PARAMS
Przydaje się to jeśli chcemy np. uzależnić pole od BASEFUN'a.
- SKŁADNIA WARTOŚCI:
<expression> - wyrażenie typu AutFun,
lub
REC_PARAMS <expression> - wyrażenie to będzie się liczyło na parametrach rekordu (patrz opis)
- WARTOŚĆ DOMYŚLNA:
- WYMAGALNOŚĆ: opcjonalny
- MASK- Sposób edycji pola - interpretacja wartości
- OPIS: Maski określają jak pole ma wyglądać oraz jak ma być edytowane, czyli taki typ pola nie związany z formą zapisu na serwerze.
Opis dokładny znajdziesz w opisie masek
- SKŁADNIA WARTOŚCI: Zajrzyj do opisu Masek
- WARTOŚĆ DOMYŚLNA: dla różynych wartości typów TYPE.
- INT - jako liczba całkowita
- STRING - jako string
- DOUBLE - double. - to jeszcze trzeba zrobić, a gdyby było już zrobione to wywalcie ten tekst.
- WYMAGALNOŚĆ: opcjonalna
Zasady rozszerzania bloków
W każdym bloku (poza blokiem EXT) można zastosować rozszerzanie.
Tzn. Możemy powiedzieć że blok A rozszerza blok B, wtedy wszystkie atrybuty, dane, .. , bloku B,
automatycznie zostaną skopiowane do bloku A, zaś rzeczy zdefiniowane w bloku A dodawane są do istniejących, bądź nadpisywane
(jeżeli były już zdefiniowane w B). Rozszerzanie takie może być wielopoziomowe, tzn. A rozszezra B, B rorzerza C, itd.
Jeden blok może rozszerzać całą listę bloków (ostrożnie bo łatwo się pogubić)
Rozszerzać można oczywiście tylko bloki tego samego typu, dla bloków EVH RSS BSS czyli makr, dodatkowo blok roszerzany i rozszerzający muszą
mieć takie same parametry!
Jeżeli blok ma rozszerzać inne bloki to po jego nazwie podajemy słówko extends a następnie listę bloków rozszerzanych zakończoną średnikiem.Rozszerzanie będzie
wykonywane w takiej kolejności jak w podanej liście.
Oto przykład
TAB BOLEK
TITLE="Bolek Wielki"
{;} // to jest pusta treść tabelki
TAB BOLECZEK extends BOLEK;
SIZE=20 20
{;}
// teraz w tabeli BOLECZEK jest zdefiniowany i tytuł i rozmiar