Popis vnitřních doplňků klienta ESO9 editor RTF a rychlý číselník Zpracoval: Tomáš Urych U Mlýna 2305/22, 141 Praha 4 Záběhlice Dne: 21.9.2010 tel.: +420 585 203 370-2 e-mail: info@eso9.cz Revize: Marcela Zavadilova www.eso9.cz Dne: 1.7.2011
Obsah 1. POPIS VNITŘNÍCH DOPLŇKŮ KLIENTA ESO9 EDITOR RTF A RYCHLÝ ČÍSELNÍK... 3 2. EDITOR RTF OBSAHU... 3 2.1 PRINCIP FUNGOVÁNÍ... 3 2.2 OZNAČENÍ POLOŽKY S RTF OBSAHEM V PŘEDLOZE ESOFORM... 3 2.3 CHOVÁNÍ POLOŽKY V EDITORU A BROWSE:... 3 2.4 FUNKČNOST EDITORU RTF... 3 2.5 POZNÁMKY K REALIZACI... 4 3. RYCHLÝ FILTROVACÍ ČÍSELNÍKOVÝ DIALOG... 4 3.1 PRINCIP FUNGOVÁNÍ... 4 3.2 OZNAČENÍ FILTROVACÍHO ČÍSELNÍKU V PŘEDLOZE ESOFORM... 5 3.2.1 Blokování parametru StartFilter... 5 3.3 CHOVÁNÍ PŘI VOLÁNÍ UPRAVENÉHO ČÍSELNÍKU... 5 3.3.1 Změny chování... 5 3.4 VYHLEDÁVÁNÍ POMOCÍ RYCHLÉHO FILTROVÁNÍ... 6 3.4.1 Nastavení filtrování při startu zobrazení číselníku... 6 3.4.2 Práce s rychlým filtrem v zobrazené windows formě číselníku... 7 3.4.3 Změna filtrovací položky... 7 Strana 2 z 7
1. Popis vnitřních doplňků klienta ESO9 editor RTF a rychlý číselník Tento dokument popisuje dva vnitřní doplňky.net klientské komplety ESO9. Doplňky jsou součástí kódu komponenty a jsou nadstavbou původní funkčnosti. 2. Editor RTF obsahu 2.1 Princip fungování Jedná se o editor formátovaného RTF obsahu. Účelem je umožnit uložit formátovaný text případně i s obrázky do položky formy eso9. RTF obsah se ukládá jako textový řetězec, položka tedy může být databázově typu varchar nebo text. RTF obsah edituje uživatel výhradně pomocí okna RTF editoru, nemá k němu přímý přístup. Typ varchar může být problematický z hlediska těžko odhadnutelné velikosti RTF obsahu. 2.2 Označení položky s RTF obsahem v předloze esoform Položku formy označíme jako položku obsahující Rtf obsah pomocí speciální hodnoty atributu masky - MASK="RTFED". Např.: <input type="text" size="60" name="subjpoznmemo" mask="rtfed"> Není důvod umísťovat masku RTFED k tagu TEXTAREA, protože se obsah položky stejně přímo nezobrazuje, předpokládá se, že to bude vždy INPUT typu text. 2.3 Chování položky v editoru a browse: V editoru i browse není položka editační. V obou zobrazeních se místo aktuálního obsahu zobrazí text Formátovaný text. V editoru i browse slouží ke spuštění RTF editačního okna kombinace kláves Ctrl+Enter nad položkou. V browse se navíc při vstupu do editačního módu položky zobrazuje napravo buton pro vyvolání editoru obdobně jako u klasické memo položky. Při ukončení RTF editoru, nebo pomocí vyvolání operace uložení v jeho průběhu, se zavolá FChange nad položkou s novým RTF obsahem. POZOR - uživatel může přijít o pracně sestavený RTF obsah, pokud např. po ukončení RTF editoru v browse zmáčkne tlačítko ESC a tím zruší rozeditovaný stav aktuálního řádku a tedy i změnu RTF obsahu, zapsanou přes FChange. 2.4 Funkčnost editoru RTF - Zobrazované informace: Zobrazuje se stav rozeditováno červená hvězdička, pozice v textu, aktuální font a jeho velikost. Je možno nastavit měřítko zobrazení úroveň přiblížení. - Editace: Jsou podporovány operace Undo, Redo, kopírování přes Clipboard (cut,copy, paste), vymazání obsahu editoru, vybrání celého obsahu. Operace je možno volat z menu, z kontextového menu, z toolbaru a na horké klávesy. - Vkládání: Lze vkládat aktuální datum, čas a obrázek v běžných formátech. Při vložení správného textu hyperlinku je tento detekován a je umožněno jeho vyvolání. Strana 3 z 7
- Hledání textu: Lze vyhledávat text a pokračovat v původním hledání. - Nastavení formátu: Lze nastavit aktuální font (typ a velikost), jeho úpravy (bold, italic, Underline) a jeho barvu pro aktuální editační pozici nebo výběr. Lze nastavit barvu pozadí pro celý obsah nebo pro aktuální výběr. - Paragraf Lze nastavit odsazení paragrafu, typ odrážky, formátování paragrafu doleva, doprava a na střed. - Tisk: Nastavení parametrů tisku a volba tiskárny, náhled tisku a provedení tisku (celý dokument nebo vybraná část). - Načtení a uložení obsahu na disk: Lze ukládat obsah do souboru na disk ve tvaru RTF nebo prostého textu, lze načíst soubor s RTF obsahem nebo s prostým textem. - Uložení obsahu do editované položky: Lze vyvolat FChange nad editovanou položkou v průběhu editace, při zavření okna, které má změněný obsah, je zobrazen dotaz o uložení. Editační okno lze zavřít s uložením i bez uložení. 2.5 Poznámky k realizaci Stálo by za úvahu, zda funkčnost neupravit tak, že se bude RTF obsah editovat pouze nad uloženým řádkem a kromě FChange se bude volat po změně RTF obsahu i uložení řádku tím by se ovládání vzdálilo chování běžné memo položky, ale zase by se snížilo riziko ztráty obsahu neopatrnou manipulací uživatele. Problém bude způsobovat snaha ukládat větší texty nebo texty s většími obrázky položka s RTF textem je totiž součástí editovaného řádku a její obsah se tedy např. v bufferu browse tahá na klienta pro každý viditelný řádek. To bude způsobovat velké zpoždění. Optimalizace by byla možná upravením chování položek s RTF textem dotahováním obsahu těchto položek nějakým speciálním voláním rozhraní serveru pouze při začátku editace. 3. Rychlý filtrovací číselníkový dialog 3.1 Princip fungování Mechanismus umožňující rychlé zobrazení a výběr z číselníku. Je určen pro situace, kde se používají číselníky jednodušší struktury nebo s malým množstvím dat, která se málo nebo vůbec nemění. Volání standardního číselníku probíhá tak, že se z klienta volá modální html dialog nasměrovaný na esoform.asp odkaz číselníku. Číselník je tedy standardní aktivní stránka na aplikačním serveru, obsahující jednu nebo více forem, z nichž jedna je ve vazbě slavemaster s formou z volající stránky. Po zavolání přenosu je okno se stránkou číselníku uzavřeno a volající forma provede funkci serveru pro aktualizaci přenesených údajů. Přitom na serveru forma číselníku skrytě (neviditelně pro navigaci) zůstává otevřená až o doby, než je uzavřena forma, která číselník volala. Do klientské komponenty je nyní doplněn kód, který umožňuje programově volat odkazy esoform.asp, číst jejich obsah (html vygenerované stránky) a inicializovat vnitřní programový objekt aktivní stránky tak, jakoby byl inicializován při zobrazení tohoto HTML kódu v okně prohlížeče. Tento mechanismus je použit pro zrychlený číselník. Při prvním volání číselníku je z takto získané html odpovědi nainicializován objekt stránky číselníku parametry vyextrahovanými z tohoto html a napojen na klientskou Strana 4 z 7
session serveru. stránce/formě. Tento objekt je uschován v objektu představujícím číselníkovou položku ve volající Při příštím přístupu k tomuto číselníku se tento objekt přímo použije a k volání esoform.asp pro číselník již nedochází. Serverová reprezentace číselníku (forma a stránka) musí existovat díky výše zmíněnému serverovému neviditelnému kešování. Aby byl tento mechanismus použitelný, musí se změnit zobrazení číselníku u klienta. Nelze použít zobrazení celé html stránky číselníku, pouze napojení na existující formu na aplikačním serveru přes rozhraní klientské session. Číselník je proto zobrazován jako klasický Windows dialog obsahující komponentu browse s daty číselníku a vyhledávací/filtrovací vstupní pole. Tato číselníková (.NET) forma se zobrazí po volání číselníku ať už v editoru nebo browse jako vyskakovaní (popup okno). 3.2 Označení filtrovacího číselníku v předloze esoform Číselníkové položky, které využívají tento způsob zobrazení, musí být v předloze esoform speciálně označeny. Ostatní položky bez značky zachovávají funkčnost zobrazení původní číselníkové stránky. Položku formy (INPUT box typu text), který obsahuje odkaz na číselník svázaný tagem label, označíme jako položku používající vyhledávací číselník pomocí speciální hodnoty atributu masky - MASK="QP" nebo MASK="QP2"(quick popup). Typická struktura číselníkové položky může vypadat například takto: <label for="fp5"> <a href="esoform.asp?tpage=subjekt/tsubjpozn&reltype=slavemaster "> Typ Poznámky </a> </label> <input type="text" size="6" name="kodtsubjpozn" id="fp5" mask="qp"> <input type="text" size="30" name="nazevtsubjpozn" readonly id="fp6" title="název typu pozn."> 3.2.1 Blokování parametru StartFilter Tento typ číselníkové položky nemůže mít nastavený StartFiltr tedy nemůže se vždy po vyvolání číselníku zobrazovat filtrovací dialog. Tato funkčnost nemá pro tento typ číselníku smysl (použití filtru znamená změnu datového zdroje na serveru) a pokud je vyžadována, pak se musí použít klasický číselník. Pokud se v odkazu číselníku s maskou QP přesto objeví nastavení parametru startfiltr, je vymazáno. Naopak před voláním je doplněn parametr StartFiltr=4, který vypne i startfiltr případně nastavený v konfiguraci. 3.3 Chování při volání upraveného číselníku Upravený číselník QP se volá pomocí klávesy F12 nebo pomocí tlačítka napravo v editačním boxu číselníkové položky v browse. Číselník je též vyvolán automaticky u číselníkových položek, kde FChange oznamuje speciálním kódem chyby nutnost vyvolání číselníku po použití klávesy enter na neúplnou hodnotu číselníkové položky. U odkazu na číselník v editoru se nový způsob volání neuplatní - naopak původní funkčnost odkazu slouží k vyvolání plného číselníku, který je možno použít k editaci, nastavení konfigurace, práv atd. 3.3.1 Změny chování - Nelze použít StartFilter v odkazu číselníku (viz výše) - Číselník je readonly (jako všechny číselníky), ale nelze jej přepnout do editoru (je to pouze Windows okno, ne okno prohlížeče HTML) a tedy nelze v něm editovat a přidávat záznamy). Tento číselník je určen do míst požadujících rychlý výběr. Strana 5 z 7
- Počet řádků browse číselníku odpovídá defaultnímu počtu - t.j. standardně 10 nebo tak, jak je nastaveno v předloze esoform. - Inicializační šířka číselníku je pevná - 1/3 šířky plochy obrazovky. Lze ji měnit. - Konfigurace číselníku přednastavená velikost a případně upravené pořadí nebo šířka položek - se nezapisuje na server tak jako u běžných HTML forem. Udržuje se pouze v cache na klientovi v průběhu platnosti stránky/aplikace - klíčem je odkaz k číselníku. Trvalou změnu defaultní konfigurace lze udělat pouze přes běžný číselník. - Kontextové menu a některé operace na horké klávesy s ním související jsou v browse upraveného číselníku potlačeny číselník není editační, nelze z něj zavolat editor atd. 3.4 Vyhledávání pomocí rychlého filtrování Tento dialog slouží k rychlému vyhledání řádku číselníku, obsahuje proto mechanismus filtrování jednak podle zadané hodnoty přímo v číselníkové položce, jednak přímým psaním do readonly browse číselníku. K filtrování se používá funkce eso formy filtrování podle hledání, tedy filtr v dialogu hledání. Toto filtrování se děje na serveru v rámci aktuálně načtených dat, neprovádí se nové čtení datového zdroje z databáze. 3.4.1 Nastavení filtrování při startu zobrazení číselníku Po vyvolání číselníku se filtr hledání nastavuje vždy tak, že se v číselníku hledá položka se stejným jménem jako má položka, nad kterou je číselník vyvolán. Jestliže je v odkazu číselníku zadán parametr SMPLUS=, pak se jméno této položky upraví tak, že se z jeho konce odřízne hodnota SMPLUS, je-li zadáno SMPRED, pak se z jeho začátku odřízne hodnota SMPRED (obojí pokud si hodnoty začátku/konce a smpred/smplus odpovídají). Pokud je ale nalezen parametr SETFIELDNAME, použije se přednostně jeho hodnota. Není-li položka s takto získaným jménem přístupná u klienta v číselníkové formě, je mechanismus filtrování zablokován. Při volání mohou nastat tyto varianty hodnoty zapsané v editoru číselníkové položky a jim odpovídající způsob nastavení filtru hledání a aktivní položky ve vyvolaném číselníku: Editor není vyplněn: Pokud je ve formě číselníku nastaven filtr hledání, pak se zruší a pozice se nastaví na první řádek číselníku. Editor číselníkové položky obsahuje hodnotu odpovídající hodnotě položky v aktuálním řádku formy: Pokud je ve formě číselníku nastaven filtr hledání, pak se zruší a pozice se nastaví na zadanou hodnotu z číselníkové položky. Je rozeditováno nějakou jinou hodnotou (pokus o neúplné zadání vazební hodnoty vazby MasterSlave) nebo došlo k vyvolání číselníku klávesou Enter po chybě (51999): Nastaví se filtrování podle hledání pro zadanou hodnotu. Tyto reakce na stav číselníkové položky odpovídají původním reakcím běžného číselníku, který vyhledá zadanou hodnotu a nastaví se na ní, pokud není, pak se naství na začátek a jestliže je vyvolán pomocí Ester a neúplného kódu, pak nastaví hledací filtr. Rozdíl je v tom, že zde se vždy nastavuje filtr podle hledání (a případně ruší starý) s výjimkou kdy je hodnota položky stejná jako v databázi (nebo prázdná), pak se jen vyhledá a předpokládá se, že uživatel začne filtrovat (a tím hledat) nějakou jinou položku. Pro filtrování podle hledání se u rychlého číselníku používá znak % a to buď na konci vyhledávaného řetězce (jeli nastavena maska MASK="QP") pak se filtrují výskyty, které začínají zadaným řetězcem (tedy like text% ), nebo se znak % přidá na začátek i konec vyhledávaného řetězce (je-li nastavena maska MASK="QP2") pak se filtrují výskyty, které obsahují zadaný řetězec(tedy like %text% ). Strana 6 z 7
Není-li v datovém zdroji browse číselníku vazební položka nalezena, pak je aktuální filtrování zrušeno a jako filtrovací se použije první možná položka browse zleva. 3.4.2 Práce s rychlým filtrem v zobrazené windows formě číselníku V horní části okna vyhledávacího číselníku se nachází toolbar se jménem položky, podle které se filtruje, a s vyhledávacím textboxem, obsahujícím aktuální filtrovací řetězec. Po zobrazení formy číselníku se vyhledávací textbox naplní aktuální hodnotu vyhledávacího řetězce bez koncového znaku %, zobrazí se jméno vyhledávací položky a browse je nastaven tak, že tato položka je aktuálně vybraná (má focus). Zápisem textových znaků v browse nebo do vyhledávacího textboxu nebo použitím klávesy BackSpace v browse a všech editačních kláves v editačním textboxu se dá editovat filtrovací řetězec. Klávesa ENTER ve vyhledávacím textboxu funguje jako ENTER nad browse volá se přenos. Klávesa esc nad browse i nad textboxem pokud není filtrovací řetězec prázdný, způsobí výmaz filtru, jinak provede zavření okna číselníku. Při změně filtrovacího textu nedochází k nastavení nového filtru okamžitě. Do mechanismu je zapojeno zpoždění, které měří dobu nečinnosti uživatele (psaní filtrovacího textu). Po uplynutí zadané doby je teprve pod časovačem voláno na serveru vlastní hledací filtrování se změněnou hodnotou filtrovacího řetězce. Tento mechanismus umožňuje uživateli napsat více znaků filtrovacího textu bez toho, aby jej zdržovalo volání aplikačního serveru. Interval prodlevy je stejný jako u opožděného překreslování dat závislých forem při změně aktuálního řádku řídící formy v rámci stránky. 3.4.3 Změna filtrovací položky Filtrovací položku lze v průběhu práce s rychlým číselníkem změnit. Protože je zakázáno použití běžného vyhledávacího dialogu a filtru (hledání je používáno pro náš rychlý filtr), je to jediný způsob, jak umožnit vyhledat/filtrovat hodnotu podle jiného než vazebního sloupce. Změna filtrovací položky se provádí kombinací kláves Ctrl+F nad sloupcem, kde se má filtrovat. Změna tedy nahrazuje původní volání vyhledávacího dialogu. Jméno nové filtrovací položky je zobrazeno ve vyhledávacím toolbaru a původní filtr je zrušen. Při ukončení a novém vyvolání číselníku se opět nastaví jako filtrovací vazební položka a funguje mechanismus popsaný v předchozích kapitolách. Pro filtrování nelze použít položku typu combobox, u položek typu datum a číslo se filtrovací řetězec použije bez značky % a pouze, pokud lze hledaný text převést na platnou hodnotu daného typu. Strana 7 z 7