Język programowania

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.

Do pobrania

Aktualna wersja pliku pomocy dewelopera - pobierz


QLX - Skladnia podstawowa

: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