Třída: cUniEval
Třída cUniEval implementuje
univerzální rozhraní pro validaci formulářů, editačních tabulek, zpracování
uživatelských povelů od menu a desktop commanderu. Freelance používá jednoduchý
a robustní princip validace: každý formulář anebo tabulkový editor může mít
vlastní validátor. Aplikace jako taková pak má aplikační validátor.
Validátor je objekt následníka třídy cUniEval; v rámci konstrukce
formuláře či tabulky se zadává jeho jméno. Při otevření formuláře Freelance
automaticky vytvoří objekt validátoru a zaregistruje jeho validační rozhraní.
Validace vždy začíná tak, že Freelance volá metody validátoru při
určitých akcích nad formulářem či tabulkou, tedy nikdy explicitně. Validací se
obecně rozumí provedení kódu, které tyto metody implementují. Některé metody
(onCreate, onLoad, … ) se mohou objevit, přesněji být volány jak
v kontextu validace formuláře, tak i tabulky a v případě aplikačního
validátoru i v kontextu aplikace.
Rozlišení kontextu a původce volání je nejdůležitější u sdílených validátorů, což jsou
validátory formulářů obsahujících jednu či více tabulek, a to proto, že stejnou
metodu (např. onLoad() může volat více než jeden objekt).
Zde je tedy nanejvýš důležité
·
Zjistit, zda kontextem je formulář či
tabulka. K tomu slouží informativní metody inForm() či inBrowse().
·
Pohybovat se pouze ve zjištěném kontextu,
tj. volat pouze ty manipulační metody (metody pracující s obsahem ovl.
prvků formuláře či tabulky), které v daném kontextu mají smysl.
Členské
proměnné
protected cForm form;
reference na formulář. Platná,
probíhá-li validace ovládacího prvku formuláře anebo volání některé notifikační
metody pro formulář (onCreate, onLoad…)
protected cBrowse browse;
reference na editační tabulku. Platná,
probíhá-li validace sloupce tabulky anebo volání některé notifikační metody pro
tabulku (onLoad…)
protected cApplet applet;
reference na vlastní aplet
protected cSql sql;
reference na SQL objekt
Rozhraní
validátoru - validace
formuláře a tabulky
Libovolnou z metod
popsaných v následující tabulce může validátor překrýt. Platí pravidlo, že
v překryté metodě se vždy nejprve volá metoda předka. Pokud metoda vrací
boolean a volání předka vrátí false (např. onValidate), vrací se vždy false.
Metoda |
Formulář |
Tabulka |
public void onCreate( String objName
) metoda volaná bezprostředně po vytvoření objektu včetně jeho dětí
(ovl. prvků). Parametrem je jméno vytvořeného objektu. |
* |
* |
public void onNew() metoda volaná po vyprázdnění formuláře metodou clear() anebo po vložení nové řádky do edit.
tabulky |
* |
* |
public void onLoad() metoda volaná po načtení dat do formuláře metodou load() anebo po načtení řádky dat z databáze
do edit. tabulky |
* |
* |
public boolean onValidate( String
itemName ) stěžejní metoda volaná při každé validaci ovládacího prvku
formuláře anebo sloupce tabulky. Parametrem je jméno ovládacího prvku,
případně sloupce tabulky. Vrátí-li false, přesune se fokus do validovaného
prvku. |
* |
* |
public boolean canSave() metoda volaná před spuštěním ukládání dat formuláře či tabulky.
Vrátí-li false, ukládání je odvoláno. |
* |
* |
public boolean onMenu( cMenu menu
) metoda volaná při vyvolání některé položky menu. Kód akce je
uložen v proměnné menu.menuId, variantní parametr menu je
dostupný voláním menu.getVariant(). |
* |
|
public void onShowTab( int tabIndex ) metoda volaná při přepnutí aktivní záložky formuláře (cTabForm, cWFXForm). |
* |
|
public boolean onCustomSave() metoda volaná v případě, že formulář nemá definován saveCommand
(tj. FastX příkaz pro ukládání dat) ani připojený X modul. Používá se
například při zápisu dat z formuláře do formuláře či tabulky. |
* |
|
public void onDeleteRow( boolean
unDelete ) metoda volaná při změně stavu zrušení řádky tabulky. |
|
* |
public boolean onRowValidate() metoda volaná při změně aktivní řádky tabulky, před kterou došlo
k modifikaci obsahu některé buňky. |
|
|
public boolean onRowHeaderClick(MouseEvent e, long
rowNumber ) metoda volaná při poklepání na záhlaví řádky tabulky. Vrátí-li
true, je potlačena implicitní akce. |
|
* |
public boolean onColumnHeaderClick(MouseEvent e, int
columnId ) metoda volaná při poklepání na záhlaví sloupce tabulky. Vrátí-li
true, je potlačena implicitní akce. |
|
* |
public boolean forEachFunction() metoda volaná iteračními metodami třídy cBrowse |
|
* |
Manipulační
metody – čtení a zápis ovládacích prvků a sloupců tabulky
Metoda |
public String getText( String itemName) metody vrací obsah ovládacího prvku anebo sloupce tabulky (dle kontextu) identifikovaného jménem. Liší se typem
návratové hodnoty a konverzí. |
public void setText( String itemName,
String text) metody nastaví obsah ovládacího prvku anebo sloupce tabulky (dle kontextu) identifikovaného jménem. Liší se typem
zapisované hodnoty a konverzí. |
Speciální
manipulační metody – čtení a zápis ovládacích prvků formuláře
Následující metody pracují
vždy nad ovládacím prvky formuláře – tedy i v kontextu validace tabulky.
Slouží k jednoduchému zpřístupnění ovládacích prvků i z kontextu
tabulky, což je dost často zapotřebí.
Metoda |
public String getFormText( String itemName) metody vrací obsah ovládacího prvku identifikovaného jménem. Liší
se typem návratové hodnoty a konverzí. |
public cControl
getFormControl ( String itemName ) metoda vrátí referenci na objekt ovládacího prvku
identifikovaného jménem. |
public void setFormText( String
itemName, String text) metody nastaví obsah ovládacího prvku identifikovaného jménem.
Liší se typem zapisované hodnoty a konverzí. |
Metody
public cControl getControl( String itemName )
metoda vrátí odkaz na jmenovaný
ovládací prvek anebo null, pokud nebyl nalezen. Je-li ovládací prvek
jiného typu (cEdit, cChoice,...), lze výsledek přetypovat.
public cBrowse getBrowse( String itemName )
metoda vrátí odkaz na jmenovanou edit.
tabulku ovládací prvek anebo null, pokud nebyla nalezena. Metoda je identická
s getControl() s tím rozdílem, že výsledek přetypovává na cBrowse.
Metody
Následující metody pracují s kontextem
validátoru. Používají se v pouze ve výjimečných případech, nikoli ve
standardních metodách on*, které popisuje tento dokument. Kupříkladu
chceme-li volat get* /set* metody z jiné metody, například nějakého rozhraní.
Typický případ: validátor implementuje rozhraní iEditNotification a metodu
iEdited. V této metodě chceme volat metody getText..., setText... apod. Musíme
tedy explicitně nastavit kontext validátoru a na konci jej opět zrušit.
public void setForm( cForm f )
metoda
nastaví kontext validátoru na daný formulář. Všechny metody pracující s
ovládacími prvky a jejich hodnotami se vztahují k tomuto formuláři. Po skončení práce musí být
kontext uvolněn metodou endAction().
public void setBrowse( cBrowse b )
metoda
nastaví kontext validátoru na daný browse - edit. tabulku. Všechny metody
pracující s ovládacími prvky a jejich hodnotami se vztahují k tomuto browsu. Po skončení práce musí
být kontext uvolněn metodou endAction().
public void endAction()
metoda
uvolní kontext validátoru alokovaný některou z metod setForm(), setBrowse().
Další metody
public boolean checkFormSaved()
metoda zjistí, zda změny provedené uživatelem byly
uloženy. Pokud ne, spustí proceduru ukládání dat. Vrací false, pokud
ukládání dat selže.
public static String par( String parName, String value )
metoda vrací formátovaný parametr pro
FastX server ( |<parName>=<value> ). Slouží k
přehlednému sestavování parametrů FastX příkazů. spouštěných metodami jako
<cRequester>.fastx(),
applet.openFastXDocument(),applet.openFastXDocumentIn(), applet.wro() apod.
Metoda je identická s cApplet.par().
Příklady:
applet.openFastXDocument( "x", par(
"Name", "xmodule1" ) + par( "ID", "1" )
+ par( "DATE", "1.1.2001" ) );
applet.wro( "report1.wro" + par( "PARTNER", "%" )
+ par( "DATE", "1.1.2001" ) );
applet.hp( "homepage.hp" + par( "USER", "?" ) +
par( "DATE", "1.1.2001" ) );
public static String parDouble( String parName, double value )
metoda
podobná metodě par(). Pracuje s proměnnou typu double.
public static String parList( String parNameList, String
valueList, String valDelimiter )
metoda podobná metodě par().
Pracuje se sezname jmen parametrů oddělených čárkou (parNameList) a hodnotami parametrů (valueList) oddělenými znakem valDelimiter. Metoda slouží k hromadnému předávání parametrů.
public String ctlPar( String ctlName )
metoda vrací formátovaný parametr pro
FastX server ( |<ctlName>=getText(<value>) ).
Narozdíl od par() pracuje s pojmenovaným ovládacím prvkem formuláře
(případně sloupcem editační tabulky, je-li volána v kontextu browse). Slouží k
přehlednému sestavování parametrů FastX příkazů. spouštěných metodami jako
<cRequester>.fastx(), applet.openFastXDocument(),applet.openFastXDocumentIn(),
applet.wro() apod.
Příklady:
applet.openFastXDocument( "x", ctlPar(
"NAME" ) + ctlPar( "ID" ) + par( "DATE",
"1.1.2001" ) );
applet.wro( "report1.wro" + ctlPar( "PARTNER" ) + par(
"DATE", "1.1.2001" ) );
public boolean setLimitsBySqlQuery( String query,
String editList )
metoda zjistí délky sloupců v zadaném
SQL SELECT příkazu query a omezí jimi editační délku editačních polí,
jejichž jmenný seznam (oddělený čárkami) obsahuje parametr editList.
Volá se zpravidla v onCreate().
public boolean setLimitsBySql( String table, String
columns, String editList )
metoda sestaví SELECT příkaz ze jména
tabulky a seznamu sloupců (výrazů). Poté zjistí délky sloupců v SELECT příkazu
a omezí jimi editační délku editačních polí, jejichž jmenný seznam (oddělený
čárkami) obsahuje parametr editList. Volá se zpravidla v onCreate().