Język programowania aplikacji 4GL
Język programowania 4GL QLX
"...nie myśl jak masz to zrobić, pomyśl tylko po co..."
QLX jest językiem programowania wysokiego poziomu. Składnia języka QLX została uproszczona do minimum tak aby język służył aplikacji Gardens Buildera w sposób optymalny. Założeniem jest aby pozwalał on na rozbudowę aplikacji przez konsultantów merytorycznych, a nie tylko przez programistów. Zaletą języka QLX jest wysoki stopień optymalizacji i specjalizacji w budowaniu aplikacji biznesowych.
Składnia języka QLX jest prosta. Składa się ze składni podstawowej i dwóch rozszerzeń : biblioteki SYS oraz metod obiektu struktury danych DS.
:typy |
Systemowe : o Boolean , Integer, Decimal, Date, Text, BLOB, Rec, Object Przodkowie typów własnych (Custom Types) i ich reprezentacja w typach systemowych (): o Number (Decimal), Option(Integer), String (Text), Field(?), COM (Object) |
:Konwersja typów |
Konwersja podczas wartościowania operacji dwóch zmiennych odbywa się wg porządku (od najniższego typu): Boolean, Integer, Decimal, Date, Text, Blob , Rec Object Dla dwóch typów następuje konwersja do typu większego. Konwersja przy przypisaniu jest możliwa we wszystkie strony. Możliwe jest przypisanie jako operacja np.: l = ((p=5)-4); lub l = p = i = 5; |
:pętle |
FOR (iEx = minValue;maxValue ) { statement } WHILE ( bEx ) { statement } |
:instrukcja warunkowa : |
IF ( bEx ) { statement } ELSE { statement} |
:operatory : |
& - i bEx= bEx1 & bEx2 | - lub bEx= bEx1 | bEx2 <> - różny bEx= bEx1 <> bEx2 lub bEx = !(bEx1 = bEx2) ! - negacja bEx= ! bEx1 |
:zwrócenie wartości funkcji i przerwanie: |
EXIT ( Value, [break] ); |
:obsługa wyjątków : |
TRY { statement } |
:commit transakcji bazodanowych : |
COMMIT ( [tConnection, bClose] ) |
QLX - Podstawowe udogodnienia GUI
ERROR ( tInfo ); |
Systemowe : Przerwanie pojedynczej ścieżki kodu i transakcji bazodanowych ( jeśli nie w klauzuli TRY, komunikat w GUI) tInfo - komunikat o błędzie |
DIALOG ( tInfo ,[ iType ] ) : iModal |
Komunikaty i pytania dialogowe tInfo - komunikat iType - rodzaj okienka dialogowego |
STATUS ( ['O','U','C'], tId, tInfo, iSize ) |
O - otwarcie okna statusów lub dołączenie kolejnego panelu statusu, U - aktualizacja statusu, C - zamknięcie okna statusów, tid - identyfikator statusu, tInfo - Etykieta statusu, iSize - Max. Zakres paska stanu. |
INFO ( tInfo , [clear ] ) |
Dodanie linii w okienku pomocniczym "Info". iInfo - komunikat, clear - jeżeli clear = 1 to zawartość okienka Info jest czyszczona przed dodaniem nowej linii. |
RUNWIN ( tName , [iType, iReportType ] ) |
Uruchomienie okna lub raportu (podgląd, wydruk, eksport) |
CREATE ( COMobject ) |
Zbudowanie instancji obiektu COM, COM+ |
QLX - Przykłady metod obiektu Schematu danych (DS methods)
DS: | ||
_ASXML :Text | Generuje XML z Ds. | |
_DSNAME :Text | Nazwa DS | |
_FIRSTFIELD :fname | Zwraca nazwę pierwszego pola struktury w przypadku kiedy jest to struktura konstruowana dynamicznie. | |
_FROMXML(Blob, [Bool recid]) | Parsuje XML do Ds. | |
_GETDS(fname,Rec) : Bool | Umożliwia wędrówkę po węzłach DS | |
_GETFIELD (fname):TextValue | Zwraca wartość pola wg jego nazwy | |
_GETTYPE(fname) :text | Zwraca typ pola wg jego nazwy | |
_MODIFYALL(fname, textvalue) | Modyfikuje wszystkie wartość w polu dla wszystkich wybranych rekordów | |
_NEXTFIELD :fname | Zwraca nazwą kolejnego pola dla przypadku dynamicznej konstrukcji struktury DS | |
_SETCONN(conn) | Umożliwia zmianę źródła danych. Struktura DS może być zasilana z wielu baz danych. | |
_SETFIELD(fname,textval) | Ustala wartość w polu wg jeg nazwy. | |
_SETRANG(fname,val) | Założenie drugiego poziomu filtrów | |
_SORT(f1,f2,...) | Umożliwia sortowanie struktur w pamięci niezależnie od sortowanie w bazie danych | |
_SUMFIELD(fname): decimal | Zwraca sumę wartości w określonym polu | |
_SUMFIELDS (SumDS,[fname 1,...,fname n]); | Buduje tempds - sumds Bez pól buduje z wszystkich pól które typu decimal | |
CLEAR | Czyści wartości bieżącego rekordu | |
COPY(rec, noisnert) | Noinsert 1 - Kopiuje tylko jeden poziom bez wstawiania do bazy 0 - domyślnie kopiuje całą strukturę z rec do struktury podobnej wraz z podstrukturami z wstawieniem do bazy | |
COUNT(memonly bool) | Zwraca ilość rekordów | |
CREATEDS | Tworzy strukturę danych w bazie danych | |
DELETE :bool | Kasuje rekord wraz z podstrukturami | |
DELETEALL | Kasuje wszystkie rekordy wraz z podstrukturami | |
EXPORT(FileName,[CSV,XML,TAB], [header str]) | Exportuje dane zawarte w strukturze DS do pliku | |
FIND( Fname,val ,[bConti]):bool | Szuka tekstu w polu CS bConti : 0, brak - od poczatku, 1 - od miejsca | |
FIRST : bool | Ustawia kursor na pierwszym rekordzie danych | |
GETFILTERS(fname):text | Zwraca bieżące filtry założone na danych DS | |
IMPORT(FileName,[CSV,XML,TAB], bool recid, [header str]) | Importuje dane do struktury DS z pliku | |
INSERT | Wstawia rekord danych do bazy danych | |
LAST : bool | Ustawia kursor na ostatnim rekordzie danych | |
LOOP ([memonly bool, reverse]) {} | Przegląda wszystkie rekordy w zbiorze danych struktury DS | |
MARK | Zaznacza bieżący rekord | |
MARKED :Bool | Sprawdza czy bieżący rekord jest zaznaczony | |
NEXT : bool | Przesuwa kursor DS na kolejny rekord danych | |
ORDER( f1,f2,...) | Powoduje sortowanie danych pobieranych z bazy danych | |
SETFILTERS( f1,f2...) | Zakłada filtr pierwszego poziomu na wielu polach | |
UPDATE | Modyfikuje dane w bazie danych | |
DS:Pola | dostęp bezpośrednio do pól struktury ds:nazwasubds:nazwapola... lub "ds:nazwa pola" | |
Definiowane metody DS w pakiecie związanym z DS | ds:nazwmetody(params) lub "ds:nazwa metody"(params) |
QLX - Przykłady metod biblioteki SYS
SYS: | ||
ASTIME (Date):Text | Zwraca czas ze zmiennej Data i Czas | |
BLOB(op[I E C], | I - import zmienną Blob z pliku, E - eksportuje zmienną Blob z pliku, P - pakuje zmienną blob U - rozpakowuje zmienną blob | |
CHAR(AsciCode) | Zwraca znak z kodu Asci | |
CLOSE | Zamyka urządzenie I/O | |
COS(x) | Zwraca cosinus kąta | |
CREATEDS(dsname,temprec): Bool | Tworzy DS wg DSTree zawartym w ogrodzie | |
CTAN(x) | Zwraca cotangens kąta | |
DATEDIFF (Date1,Date2):Int | Oblicza różnicę między datą i czasem | |
DATEINT (Date,Text[YMDWRhms]):Int | Konweruje zmienną Data i Czas do wartości liczbowych | |
DATEMAKE (Date,Int,Text[YMDhms]):Date | Tworzy zmienną typu Data i Czas | |
DELETEFILE(fname) | Kasuje plik z dysku | |
GETERROR:text | Zwraca ostatni błąd przechwycony w klauzuli TRY | |
OPEN(name,CLIENT,SERVER,LPT,FILE) | Otwiera urządzenie I/O | |
OPENFILE(Mask) :FileName | Otwira okno dialogowe wyboru pliku do otwarcia | |
RAND(Max) | Funkcja losowa | |
READ:text | Czyta dane z urządzenia I/O np. z portu TCP/IP | |
ROUND(Dec,Precision,[+,-]): Dec | Zaokrągla zmienne liczbowe | |
RUNSERVER(PacName,Port) | Uruchamia nasłuch serwera W czasie połączenia klienta uruchamiany jest PacName:Run | |
SAVEFILE(Mask) :FileName | Otwira okno wyboru pliku do zapisu | |
SHELL(FileName, Params, Operat) | Podejmuje akcje dla pliku zgodnie z shellem systemu | |
SIN(x) | Zwraca sinus kąta | |
SQL(command,[ Conn , dsresult])): Bool | Wywołanie komendy SQL, w wybranej bazie danych | |
STRCOPY (Text,Pos,[Len]):Text | Kopiuje substring ze zmiennej tekstowej | |
STRLEN (Text):Int | Zwraca długość zmiennej tekstowej | |
SYSDATE | Zwraca datę i czas systemowy | |
TAN(x) | Zwraca tangens kąta | |
USERLOGIN ([UserId],[Password]):UserId | Zwraca identyfikator zalogowanego użytkownika systemu | |
WRITE(text) | Umożliwia zapis do urządzenia I/O np. portu TCP/IP |
QLX - metody obiektów GUI (okna, raporty, GDI)
Obj: | ||
SETPROP(name,val,[noupdate=0]) | Ustalenie właściwości | |
ADD(id,label,i1,i2,parid/accel) | Dodawanie podelementu | |
DEL(id) | Kasowanie podelementu Id = ?ALL? wszystkie | |
SETITEM(id, name,val) | Ustalenie właściwości podelementu | |
UPDATE | Odświerzenie | |
_HANDLE | Zwraca uchwyt okna | |
FOCUS | Ustawia focus na obiekcie | |
Gdi: | ||
RECT(x,y,w,h) | Rysuje prostokąt | |
LINE(x,y,w,h) | Rysuje linie | |
CLEAR | Czyści buforową bitmapę | |
SETCOLOR (Col, Typ, Wi) | Ustala kolor i grubość linii | |
ELIPS(x,y,w,h) | Rysuje elipsę | |
ADDACTION | Dodanje akcję podręcznego menu GDI | |
DRAW(blobpicture,[X,Y,W,H,Stretch]) | Rysuje obiekty w formacie BMP i EMF | |
DRAWTEXT(X,Y,W,H,Text) | Rysuje tekst | |
FLOODFILL(X,Y,[Color]) | Wypełnia obszar kolorem | |
GRADIENT | Rysuje strukturę wielu gradientów | |
SAVEAS(FileName, [W,H]) | Zapisuje obraz w formacie EMF. | |
Win: | ||
RUNMODAL(name,&ds,typ,R_typ) | Uruchamia okno( raport) modalne względem Win: Oparte na DS. podanym przez referencje | |
PROCMSG | Przetwarza zdarzenia okna | |
DIALOG( text,ds.,typ,f1?fn) :int | Buduje okno dialogowe modalne z editami lub z gridem Typ 0 ? edits1 ? read grid 2 ? edit grid 3 - tree 4 - ListView f1?fn nazwy pól | |
CLOSE(action) | Action = mok,mcancel | |
Rep: | ||
PRINTSEC (SecName,bool nomove) | Drukuje wybraną sekcję raportu | |
PAGENEXT | Powoduje przejście do kolejnej strony wydruku | |
PAGENO : int | Zwraca numer bieżącej strony |