QBS
>> Suplementy i Dokumentacja Techniczna do Q-Line 3000
>> Opis QCONL'a
1. Wstęp
Projektanci Q-Line 3000
stanęli przed problemem potrzeby szybkiego i efektywnego sposobu konstruowania baz danych. Tworzenie za każdym razem od początku do końca całego programu zupełnie mija się z celem, ponieważ klienci "nie lubią czekać na produkt". Wolą, by program był już gotowy i by, w miarę potrzeb, można było dokonać szybko zmian.
Dlatego powstał system, dzięki któremu możliwe jest tworzenie programów wykorzystując gotowe elementy standardowe takie jak np. moduły i klocki ("klocki" to wewnętrzne pojęcie naszej firmy - takie mniejsze moduły).
Programista wykorzystując gotowe elementy standardowe jest w stanie szybko stworzyć produkt odpowiadający klientowi. Do konfigurowania programów opracowaliśmy QCONL
- język konstruowania programów.
Podstawą konstrukcyjna każdego programu serii 3000
są pliki konfiguracyjne *.qcon. Podstawę *.qcon'ów stanowią obiekty opisane poniżej. Dzięki całkowitej parametryzacji w wielu przypadkach programistom udaje się bez zbędnego głebokiego wnikania zaimplementować określone rzeczy. Na przykład do każdej tabeli w programie można podłączyć moduł wydruków etykietowych QM-Labels
samego podłączenia dokonuje się poprzez wpisanie słowa kluczowego "LABELSARRANGER" w odpowiedniej rubryce.
Definiowane obiekty w plikach konfiguracyjnych mają swoje określone znaczenie w programie np. menu, okno przeglądu danych, czy też okno edycji rekordów. Obiekty te są ściśle opisane poprzez szereg parametrów i atrybutów.
2. Słowa kluczowe-rodzaje obiektów w pliku konfiguracyjnym *.qcon
W serii Q-Line 3000
występuje kilkanaście słów kluczowych, za pomocą których definiuje się obiekty. Obiekty to elementy standardowe, z których buduje się program.
Lista słów:
- MENU - słowo to służy do definiowania postaci menu, które jest podstawą każdego programu z serii
Q-Line 3000
. Ogólna struktura jaką się wykorzystuje do definiowania obiektów tego typu jest opisana tutaj. Wykorzystując własności tej struktury możemy zdefiniować poszczególne pozycje menu i pod każdą z tych pozycji podpiąć akcję jaka ma być wykonana po uruchomieniu. Dodatkowo szereg parametrów i atrybutów umożliwia opisanie własności samego menu, czyli np. pozycję wyświetlenia, help - co się pojawia po najechaniu myszką, klawisza skrótu, czy też ikony jaka ma być wyświetlona przy danej pozycji.
- TAB - jest to bardzo uniwersalne słowo. Dzięki niemu możemy definiować wiele różnych obiektów. Definicja obiektu tego typu wygląda bardzo podobnie jak definicja menu, wykorzystuje się tą samą ogólną strukturę. Podstawowym obiektem jaki możemy zdefiniować jest tabela bazy danych. W ten sposób określamy rodzaj danych jakie chcemy przechowywać w naszej bazie i ich typ. Obiekty takiego typu posiadają zdolność dziedziczenia, czyli tworzenia podobnego obiektu(potomnego) - przy tworzeniu należy podać czym się różni od tabeli rodzica(polecenie "extends"). Dzięki tej własności możemy tworzyć inne obiekty. Następnym takim obiektem jest edycja rekordów, która bazuje na tabeli rodzicu(stąd wie jakie dane można wprowadzać) i służy, jak sama nazwa wskazuje, do edycji danych. Do przeglądania wprowadzonych danych stosuje się tzw. browser'y, które też są rozwinięciem tabel. Szereg atrybutów pozwala nam określić sposób edycji i prezentacji danych.Dodatkowo parametry określają np. rozłożenie pól edycji, rozmiar okna, pozycje wyświetlania okna, itp. .
- Dodatkowo mamy jeszcze inne słowa kluczowe, jednak na tym poziomie dokumentacji nie będą opisywane dokładnie:
- EXT - Służą one do tworzenia rozszerzeń do obiektów TAB i MENU
- RSS - Służą one do definiowania związków relacyjnych między bazami
- BSS - Służą one do definiowania zakresu wyświetlanych rekordów w browserze
- 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 )
- LABELSARRANGER - Wywołanie modułu
QM-Labels
3. Struktura definiowanych obiektów
Spośród wielu możliwych struktur projektanci Q-Line 3000
wybrali strukturę nazwaną przez nich ListoMacierz
. Struktura taka posiada m.in. zalety:
- czytelność - przy zachowaniu zwartego opisu zawiera bardzo dużo informacji
- łatwość tworzenia i modyfikacji - jest to między innymi konsekwencją punktu poprzedniego
- nieograniczone możliwości zapisania każdej informacji (elementem ListoMacierzy może być ListoMacierz)
- łatwość nauki
Dzięki tak prostej strukturze możliwe jest stworzenie dowolnego obiektu programu w szybki sposób.
Poniżej przedstawiamy ListoMacierz w postaci ogólnej:
*Słowo kluczowe* < ident >
{
|
| Ident kolumny_1
| Ident kolumny_2
| ...
| ...
| Ident kolumny_m
| ;
|
| 1
| Wartość kolumny_11
| Wartość kolumny_12
| ...
| ...
| Wartość kolumny_1m
| ;
|
| 2
| Wartość kolumny_21
| Wartość kolumny_22
| ...
| ...
| Wartość kolumny_2m
| ;
|
| ...
| Wartość kolumny_...1
| Wartość kolumny_...2
| ...
| ...
| Wartość kolumny_...m
| ;
|
| ...
| Wartość kolumny_...1
| Wartość kolumny_...2
| ...
| ...
| Wartość kolumny_...m
| ;
|
| n
| Wartość kolumny_n1
| Wartość kolumny_n2
| ...
| ...
| Wartość kolumny_nm
| ;
|
}
< ident > stanowi identyfikator tekstowy - nazwę danego obiektu.
Pierwsza tabela stanowi opis macierzowy parametrów danego obiektu. Każdy wiersz to oddzielny parametr wraz z przypisaniem wartości. I tak mamy :
Ident linii_1 = Wartość linii_1
gdzie Ident linii_1 jest identyfikatorem tekstowym(nazwą) parametru, a np.Wartość linii_1 jest wartością na przecięciu pierwszego wiersza i kolumny. Może być zarówno w postaci tekstu, liczb całkowitych lub też szeregu liczb. Takich parametrów możemy wpisać dowolną ilość - k, w zależności od potrzeb. Tę swobodę zapewnia nam interpreter struktury plików konfiguracyjnych. Przykład :
| TITLE
| =
| "Dane osoby wprowadzanej do książki adresowej"
|
| BASE
| =
| ADRESY
|
| BASETYPE
| =
| SEP
|
| POS
| =
| 50 50
|
| SIZE
| =
| 120 100
|
| BROWSER_ACTIONS
| =
| +FULL_SET +F10MENU
|
| RECEDIT
| =
| ADRESY_EDIT
|
Wyjaśnienie : Okno BROWSER'a będzie miało tytuł "Dane adresowe". Dane są przechowywane w pliku ADRESY, na serwerze SEP. Okno wyświetlone zostanie w pozycji X=50 Y=50 i będzie miało rozmiar X=120 Y=100. ADRESY_EDIT jest obiektem typu EDIREC. BROWSER_ACTIONS stanowi spis dostępnych w BROWSER'ze akcji, jakie możemy wykonać na danych, itp. .
Dalszą część stanowi ciało obiektu, które jest umieszczone między nawiasami klamrowymi {}. Podobnie jak w przypadku parametrów mamy tu opis macierzowy, jednak o wiele bardziej rozbudowany. Taka macierz może mieć wiele kolumn - m i może zawierać wiele wierszy - n. Nazwa każdej kolumny - Ident kolumny stanowi oddzielny atrybut. Atrybut może przyjmować wiele wartości lub tylko pojedyńczą Wartość kolumny. Przykład :
| ID
| NAME
| VIS
| ;
|
| IDENT
| "Id"
| HIDE
| ;
|
| IMIE
| "Imię"
| SHOW
| ;
|
| NAZWISKO
| "Nazwisko"
| SHOW
| ;
|
| ULICA
| "Ulica"
| SHOW
| ;
|
| MIASTO
| "Miasto"
| SHOW
| ;
|
| KOD_POCZTOWY
| "Kod pocztowy"
| SHOW
| ;
|
Wartością parametrów i atrybutów mogą być także inne obiekty zdefiniowane w pliku konfiguracyjnym, tak jak w przykładzie parametr RECEDIT ma wartość TABELA_EDIT - obiekt TAB będący obiektem potomnym obiektu TABELA poszerzonym o edycję danych. Budowanie obiektów opiera się na zasadzie rozbudowywania. Rozpoczyna się od obiektu bazowego i poprzez rozszerzanie(dziedziczenie) buduje się nowe obiekty, dodając odpowiednie elementy i parametry.
2.1. Opis dodatkowych możliwości struktury definiowania obiektów
W momencie kiedy tworzymy określony obiekt musimy się zastanowić, które atrybuty występują we wszystkich wierszach. Jeśli w takim przypadku wybierzemy n atrybutów dla m wierszy, powstaje macierz n x m. Jednak interpreter struktury plików konfiguracyjnych umożliwia dodanie atrybutów do określonego wiersza, mimo iż nie występują w pozostałych. Daje nam to możliwość wstawiania dowolnej liczby atrybutów dla danego wiersza. I tak :
| ID
| NAME
|
| ;
|
| IDENT
| "Id"
| VIS=HIDE
| ;
|
| IMIE
| "Imię"
|
| ;
|
| NAZWISKO
| "Nazwisko"
|
| ;
|
| ULICA
| "Ulica"
| ATTRIB=(CAPITAL)
| ;
|
| MIASTO
| "Miasto"
|
| ;
|
| KOD_POCZTOWY
| "Kod pocztowy"
|
| ;
|
mamy macierz 6x2 z kolumnami ID i NAME, dodatkowo dla ID=IDENT mamy atrybut VIS=HIDE, a dla ID=ULICA mamy ATTRIB=(CAPITAL) - nawiasy oznaczają, że możemy wprowadzić więcej niż jedną wartość. W całości obiekt typu TAB może być zdefiniowany jak niżej:
TAB TABELA
| TITLE
| =
| "Dane osoby wprowadzanej do książki adresowej"
|
| BASE
| =
| ADRESY
|
| BASETYPE
| =
| SEP
|
| POS
| =
| 50 50
|
| SIZE
| =
| 120 100
|
| BROWSER_ACTIONS
| =
| +FULL_SET +F10MENU
|
| RECEDIT
| =
| ADRESY_EDIT
|
{
| ID
| NAME
|
| ;
|
| IDENT
| "Id"
| VIS=HIDE
| ;
|
| IMIE
| "Imię"
|
| ;
|
| NAZWISKO
| "Nazwisko"
|
| ;
|
| ULICA
| "Ulica"
| ATTRIB=(CAPITAL)
| ;
|
| MIASTO
| "Miasto"
|
| ;
|
| KOD_POCZTOWY
| "Kod pocztowy"
|
| ;
|
}
4. Dokładny opis parametrów obiektów MENU
Lista parametrów obiektu MENU :
TITLE POS
| TITLE - nazwa wyświetlana w nagłówku menu
|
| POS - pozycja na ekranie wyświetlanego menu, przykład : POS=50 50
|
Lista atrybutów obiektu MENU :
ID SHORTCUT
NAME HELP
ACTION
| ID - identyfikator tekstowy menu
|
| SHORTCUT - skrót klawiszowy np. A,D,h itp
|
| NAME - nazwa pozycji wyświetlana w menu
|
| HELP - wyświetla określony tekst po najechaniu myszką na daną pozycję menu
|
ACTION - słyży do podczepienia akcji pod daną pozycję menu.Dostępne akcje:
- MENU - otwiera inne menu
- BROWSER - otwiera BROWSER
- LABELS_ARRANGER - otwiera LABELS ARRANGER
- RECEDIT - okno edycji rekordu
- LINE - wstawia linię
- INSERT - powoduje wstawianie danych
- ICON - ustawia ikonę wyświetlaną przy pozycji menu
- PRINT -
- EMAIL_SENDER - uruchamia moduł wysyłania emaili
- THTML - otwiera dokument THTML
- QTENBERG - otwiera moduł QTENBERG
|
PRZYKŁAD:
I KOD W PLIKU *.qcon:
MENU MainMenu
TITLE="To jest główne menu programu"
POS=75 20
{
ID ACTION NAME ;
POZYCJA_1 MENU Menu_1 "Pozycja pierwsza" ;
POZYCJA_2 BROWSER TABELA_BROW1; "Pozycja druga" ;
LINIA LINE "Linia" ;
POZYCJA_3 RECEDIT TAB=TABELA_EDIT; "Pozycja trzecia" ;
}
MENU Menu_1
TITLE="To jest rozwijane menu"
{
ID ACTION SHORTCUT NAME;
POZ1 BROWSER TABELA_BROW1; W "Pozycja pierwsza menu rozwijanego";
POZ2 BROWSER TABELA_BROW2; E "Pozycja druga menu rozwijanego" ;
POZ3 BROWSER TABELA_BROW3; R "Pozycja trzecia menu rozwijanego"
HELP="To jest pomoc wyświetlana po
najechaniu myszką" ;
}
|
Tabele TABELA_BROW1,TABELA_BROW2,TABELA_BROW3,TABELA_EDIT są przykładowe, ich definicje są nie istotne w tym przykładzie.
5. Dokładny opis parametrów obiektów TAB
Lista parametrów obiektu TAB tabeli bazowej:
BASE BASETYPE ORDERS
BASE - przypisuje się wartość w postaci tekstowej, jest to nazwa na serwerze, poprzez którą odwołujemy się do tabeli. BASE musi koniecznie posiadać wartość dla tabel bazowych, nie ma wartości domyślnej.
|
BASETYPE - określa czy dana tabela jest tabelą bazową. Może przyjmować tylko określone wartości:
- DEFAULT - oznacza, że tabela jest tworzona na domyślnym serwerze, dane w pliku qline.txt
- SEP - tabela tworzona na serwerze SEP
- MEMORY - tabela istnieje tylko w pamięci
- LOCAL - tabela tworzona lokalnie
- POSTGRES - tabela tworzona na serwerze PostgresSQL
|
ORDERS - określa uporządkowanie na tabeli, format jak w ciele tabeli, mamy następujące kolumny:
- ID - identyfikator tekstowy uporządkowania(nazwy inne niż w ciele tabeli)
- FIELDS - lista identyfikatorów wierszy z tabeli wg. których następuje uporządkowanie
- LABEL - nazwa uporządkowania
- VIS - czy widoczny, wartości SHOW(tak) lub HIDE(nie), domyślnie SHOW
- UNIQUE - ustawia czy klucz dany w atrybucie FIELDS ma być kluczem unikalnym, wartości YES i NO
|
Nazwy kolumn tabeli bazowej(atrybuty):
ID LEN TYPE
| ID - identyfikator tekstowy wiersza w ciele tabeli
|
| LEN - liczba bajtów do przechowywania wartości danego pola, dla typów INT i DOUBLE ma być 8
|
TYPE - typ wartości, mamy 3 typy:
- STRING - pole typu znakowego
- INT - pole typu liczba całkowita
- DOUBLE - pole typu zmiennoprzecinkowego
|
Tabela bazowa sama w sobie nie stanowi obiektu wizualnego, ale w rozszerzeniu jako BROWSER tak. W praktyce nie stosuje się samych tabel bazowych. Najczęściej tabela bazowa jest już uzupełniona o atrybuty BROWSER'a czy też EDIREC'a, a tabele BROWSER'a i EDIREC'a są tworzone przez dziedziczenie i dodanie BROWSER_ACTIONS dla BROWSER'a i LAYOUT dla EDIREC'a. Poniższy przykład pokazuje nam połączenie tabeli bazowej, BROWSER'a i EDIREC'a. Natomiast w punkcie 5.1 i 5.2 są opisane parametry i atrybuty obiektów BROWSER i EDIREC.
Przykład BROWSER'a:
Przykład EDIREC'a:
W kodzie wygląda to następująco :
TAB TABELA
TITLE="Przeglądanie danych osobowych"
BASE=TABELA
BASETYPE=SEP
POS=50 50
ORDERS=
{
ID FIELDS LABEL VIS ;
NAZW (NAZWISKO) "Porządkowanie po nazwisku" SHOW ;
}
{
ID TYPE LEN NAME ;
ID INT 8 "Id" VIS=HIDE;
DATA_WPR INT 8 "Data wprowadzenia" MASK=DATE AUTFUN=curr_date();
IMIE STRING 20 "Imię" ATTRIB=(FCAPITAL);
NAZWISKO STRING 40 "Nazwisko" ATTRIB=(FCAPITAL);
DATA_UR INT 8 "Data urodzin" MASK=DATE;
ULICA STRING 40 "Ulica" ATTRIB=(FCAPITAL);
KOD STRING 6 "Kod pocztowy" MASK=MASK("00\\-000");
MIASTO STRING 20 "Miasto" ATTRIB=(CAPITAL);
TELEFON STRING 15 "Telefon" ;
EMAIL STRING 30 "Adres email" ;
PRACA INT 3 "Czy pracuje?" MASK=LLIST("TAK" "NIE");
OPIS STRING 60 "Opis osoby" ;
}
TAB TABELA_BROW extends TABELA;
BROWSER_ACTIONS=+FULL_SET +F10MENU
RECEDIT=TABELA_EDIT
{;}
TAB TABELA_EDIT extends TABELA;
TITLE="Edycja danych osobowych"
LAYOUT=HPAN(GRP("Data wprowadzenia danych" TCP(DATA_WPR))
GRP("Imię i Nazwisko" TCP(IMIE NAZWISKO) )
GRP("Adres i kontakt" TCP(ULICA KOD MIASTO TELEFON EMAIL) )
GRP("Inne dane" TCP(DATA_UR PRACA OPIS) ) )
{;}
|
5.1. Przeglądanie danych jako rozszerzenie tabeli bazowej - BROWSER
Parametry obiektu TAB jako BROWSER'a:
TITLE POS SIZE
RECEDIT BAROFF BROWSER_ACTIONS
FIELDORDER LINE_ATTRIB ORDERSBAR
| TITLE - jest to nazwa wyświetlana na głównym pasku BROWSER'a.
|
| POS - pozycja wyświetlenia BROWSER'a liczona w procentach, wartość 50 50 jest wartością domyślną i powoduje wyświetlenie okna na środku ekrany, przykład: POS = 75 30
|
| SIZE - rozmiar wyświetlanego BROWSER'a w znakach dla X i w liniach dla Y, przykład: SIZE=100 25
|
| RECEDIT - określa jaki obiekt będzie używany do edycji rekordów, przykład: RECEDIT=TABELA_EDIT, gdzie TABELA_EDIT jest edycją rekordów
|
| BAROFF - wyłączanie paska narzędziowego, wartości TRUE i FALSE, domyślnie FALSE
|
BROWSER_ACTIONS - określa nam jakie akcje są dostępne na pasku narzędziowym.Wartość tego parametru definiujemy jako listę wartości odpowiednio dodając znak "+" przed wartością gdy chcemy dodać akcję lub znak "-" zabierając ją. Lista dostępnych akcji:
- VIEW - przeglądanie rekordu : ENTER
- CHANGE - zmiana uporządkowania : F3
- SEARCH - wyszukiwanie : F6
- FILTER - filtrowanie : f/F
- F2MENU - menu pod F2 : F2
- LINEPRINT - wydruk wierszowy : F8
- INSERT - dodanie rekordu : INS
- MODIFY - modyfikacja rekordu : m
- DELETE - usuwanie rekordu : DEL
- F10MENU - operacje na zaznaczonych pozycjach : F10
- COUNT - zliczanie pozycji : F7
- SELMODE - wyświetlenie tylko zaznaczonych : F4
- ALLMODE - wyświetlenie wszystkich : F5
- INVERTALL - odwrócenie zaznaczonych : *
- SELALL - zaznaczenie wszystkich : +
- UNSELALL - odznaczanie wszystkich : -
- SELECT - zaznaczenie bieżącej pozycji : SPACE
- SELUP - zaznaczenie wszystkich pozycji powyżej bieżącej : u
- SELDOWN - zaznaczenie wszystkich pozycji poniżej bieżącej : d
- UNSELUP - odznaczenie wszystkich pozycji powyżej bieżącej : U
- UNSELDOWN - odznaczenie wszystkich pozycji poniżej bieżącej : D
Dodatkowo całe zestawy akcji:
- FULL_SET - ( wszystko poza F10 ) - VIEW SEARCH CHANGE FILTER F2MENU LINEPRINT INSERT MODIFY DELETE COUNT SELMODE ALLMODE INVERTALL SELALL UNSELALL SELECT SELUP SELDOWN UNSELUP UNSELDOWN
- READ_SET - ( tylko odczyt ) - VIEW SEARCH CHANGE F2MENU LINEPRINT COUNT
- MODIFY_SET - ( modyfikacja ) - INSERT MODIFY DELETE
- SELECTION_SET - ( zaznaczenia ) - COUNT FILTER SELMODE ALLMODE INVERTALL SELALL UNSELALL SELECT SELUP SELDOWN UNSELUP UNSELDOWN
|
| FIELDORDER - zmiana domyślnej kolejności wyświetlania,przypisuje się wartość ABSOLUTE() wraz z listą identyfikatorów w nawiasie
|
LINE_ATTRIB - ustawienie atrybutów linii w BROWSER'ze, dostępne wartości:
- BGCOLOR - kolor tła
- FONTNAME - nazwa czcionki
- FONTSIZE - rozmiar czcionki
- FONTSTYLE - styl czcionki
|
| ORDERSBAR - wyłączenie uporządkowania na pasku narzędzi, wartości TRUE i FALSE, domyślnie FALSE
|
Kolumny BROWSER'a to te będące atrybutami tabeli bazowej(ID LEN TYPE) i poza tym:
AUTFUN ATTRIB EDILEN
LOOK MASK NAME
AUTFUN - służy do wyliczenia dynamicznie kolumny, której nie ma zdefiniowanej w tabeli, jako wartość możemy ustawiać to co zwracają, następujące funkcje:
- filedata(expr_filename) - odczytuje plik o określonej nazwie
- money2words(expr_amount) - zamienia kwotę na postać słowną
- copy(expr_string,long,long) - wycina w ciagu znaków od określonego indeksu określoną liczbę znaków
- curr_date() - zwraca bierzącą datę
- curr_time() - zwraca bierzący czas
- edit_mode() - zwraca status edycji pola : 0 NULL 1 VIEW 2 INSERT 3 MODIFY
- isNULL() - zwraca czy pole jest Null
- length(expr_string,expr_long1,expr_long2) - zwraca długość ciągu znaków
- login_name() - zwraca identyfikator użytkownika
- login_group_name() - zwraca identyfikator grupy użytkownika
- sysfield(expr_tabname,expr_fieldname) - zwraca wartość pola fieldname z tabeli tabname
- trim(expr_string) - wycina białe znaki
- weekday() - zwraca dzień tygodnia(0-PO,1-WT)
- internalDate(expr_date) - zamienia datę na string w formacie YYYY.MM.DD
- min(expr_num1,expr_num2) - zwraca minimum dwóch liczb
- max(expr_num1,expr_num2) - zwraca maximum dwóch liczb
- parentVal(expr_fieldId) - zwraca wartość pola głowy
- color(color) - zwraca kolor
- parse() - ???
- zero_number(expr_num,expr_len) - zamienia liczbę na string dopełniony zerami na określonej długości
Dodatkowo atrybut służy do wyliczeń gdzie jako wartość ustawiany jest wynik operacji numerycznej na polach tabeli. Przykład:
Jeśli w tabeli mamy zdefiniowane pola PO1,PO2,PO3,PO4 to może być AUTFUN=(PO1-PO2)*PO3/PO4
|
ATTRIB - atrybut ten służy do ustawiania różnego rodzaju właściwości. Dla samego BROWSER'a dostępna jest tylko jedna właściwość:
- BGCOLOR - służy do ustawiania tła, kolory możemy ustawiać w następujący sposób:
- RGB(red,green,blue) - podaje się składowe koloru
- INT(int) - podaje się wartość int zwracaną przez RGB
- SIMPLE(identifier) - podaje się jeden ze standardowych kolorów
|
| EDILEN - pełni tą samą funkcję co LEN w tabeli bazowej
|
| LOOK - służy do wyciągania danych z innych baz, jako wartość ustawia się makro EVH. 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.
|
| MASK - 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.
Maski są zdefiniowane tutaj
|
| NAME - nazwa pola w BROWSER'ze
|
5.2. Okno edycji rekordu jako rozszerzenie tabeli bazowej - EDIREC
Parametry edycji rekordu poza POS TITLE, które są tak jak w tabeli bazowej :
AER_CONDITION ASCESC BUTTONS
COPY2HIST_FIELDS F10LOOKUPS LAYOUT
AER_CONDITION - opisuje warunki zatwierdzenia rekordu, tutaj możemy wymusić wypełnienie pewnych pól lub też zadać warunek na wzajemną zależność pół np A > B
Jako wartość podaje się listę : <condition_element> .... <condition_element> gdzie każdy condition_element to jeden z tych :
- MBF(fieldId,....,fieldId) - (Must Be Filled) - musi być wypełnione, określa pola , które muszą być wypełnione
- COND(cond) - podany warunek musi być prawdziwy
|
| ASCESC - Ustawiając ten parametr 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. Domyślna wartość to NO.
|
BUTTONS - Tu podajemy zawartość paska (belki) z guzikami pojawiającej się na dole pod edycją rekordu.
Możemy wprowadzić następujące wartości:
- DEFAULT - standardowy pasek z przyciskami OK i CANCEL
- NONE - wyłaczony pasek z guzikami
- EXPLICITE(buttonid,...,buttonid) - podaje się listę przycisków np. OK, CANCEL lub identyfikator pola, w którym musi być zdefiniowana maska BUTTON z podaną akcją "ButtonFieldAction"
|
COPY2HIST_FIELDS - 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ć. Jako wartość podajemy listę c2h_element,...,c2h_element; gdzie każdy z c2h_element to jeden z poniższych:
- HARD(fieldId,...,fieldId)- twarde kopiowanie, czyli zawsze
- SOFT(fieldId,...,fieldId)- miękkie kopiowanie, czyli tylko w puste pola
|
| F10LOOKUPS - służy do liczenia lookup'ów, jeśli ustawimy ten atrybut na TRUE to lookup'y zostaną ponownie policzone po F10. Można dzięki temu wyciągać do głowy jakieś wartości np. z historii.
|
| LAYOUT - Tym parametrem budujemy opis wyglądu karty edycji, podając layout_element, najprostszym ułożeniem jest TCP czyli ułożenie pól jedno pod drugim. Można też składać elementy z innych elementów.
Opis wszystkich elementów wraz z przykładami tutaj.
|
Atrybuty okna edycji rekordu poza MASK EDILEN AUTFUN:
ATTRIB BASEFUN
DEFVALUE ENABLED
ATTRIB - ustawia się tu różne atrybuty pola edycji. Dostępne wartości:
- CAPITAL - wymuszenie wszystkich dużych liter
- FCAPITAL - wymuszenie tylko pierwszej dużej litery
- COLOR - kolor czcionki, określany tak jak w ATTRIB
- FONTNAME - nazwa czcionki
- FONTSIZE - wielkość czcionki
- FONTSTYLE - styl czcionki: BOLD - wytłuszczona, PLAIN -zwykła, ITALIC-pochyła
- SUFFLE - włączenie dopełniaczki słownikowej (tylko dla słów słownikowych)
|
BASEFUN - 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 obliczania 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).Możliwości :
- 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.
|
| DEFVALUE - 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ń. Jako wartość można wstawiać wyrażenia te same co są w AUTFUN.
|
| ENABLED - 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łączając pola. Warunek, który podajemy (jeśli jest prawdziwy to pole jest do edycji) jest wyrażeniem typu AutFun, więc zastosowań tego jest dużo. UWAGA!!! Wyrażenia w tej kolumnie przeliczają się na podstawie tzw. parametrów kontrolek. Jeśli chcemy reagować dopiero po wyjściu z pola to przed Autfun'em trzeba podać 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.
|