1. Základní informace

  • Editační formulář je grafické rozhraní určené k práci s jedním databázovým záznamem. Slouží buď k vytvoření nového záznamu v databázi, nebo k editaci již existujícího záznamu.
  • Každý editační formulář má právě jednu přidruženou databázovou tabulku, do které se ukládají uživatelská data vyplňovaná ve formuláři. Její skutečný název určuje identifikátor formuláře. Identifikátory uživatelských formulářů standardně začínají prefixem „ng_“, systémové formuláře tento prefix nepoužívají.
  • Vytváření i následné úpravy struktury standardní přidružené databázové tabulky probíhají automaticky na základě konfigurace editačního formuláře a jeho ovládacích prvků. Výjimkou jsou ručně spravované databázové struktury, například In-Memory tabulky a databázové pohledy popsané níže.
  • Každá přidružená databázová tabulka obsahuje sadu systémových databázových sloupců, které tvoří základ aplikační logiky:
    • „id“ – primární klíč databázového záznamu, s datovým typem „int NOT NULL“ nebo „long NOT NULL“ podle nastavení editačního formuláře.
    • „system“ – příznak systémového záznamu. Hodnota „True“ označuje záznam, který není možné smazat (např. systémové záznamy uživatelů NET Genia).
    • „pid“ – identifikátor rodičovského databázového záznamu, používaný pro hierarchické vazby.
    • „pform“ – identifikátor editačního formuláře, ve kterém se nachází rodičovský záznam.
    • „userid“ – identifikátor uživatele, který databázový záznam vytvořil a je jeho vlastníkem.

1.1. Ovládací prvky editačního formuláře

  • Editační formulář se skládá z databázových a vizuálních ovládacích prvků.
    • Databázový ovládací prvek má vždy přiřazen jeden databázový sloupec v přidružené tabulce, do kterého se ukládají hodnoty zadané uživatelem. Aby měl editační formulář smysl, musí obsahovat alespoň jeden databázový ovládací prvek.
    • Vizuální ovládací prvky nemají vlastní databázový sloupec. Slouží k prezentaci, navigaci nebo ovládání aplikace a mohou spouštět skripty či operace, které vytvářejí, mění nebo mažou jiné databázové záznamy. Patří sem například nadpisy, nahlížecí tabulky, tlačítka, grafické oddělovače nebo dekorativní prvky.
    • Součástí každého editačního formuláře je automaticky ovládací prvek „ActionButtons“, který obsahuje tři základní tlačítka: „Uložit“, „Smazat“ a „Zpět“. Detailní popis tohoto prvku je uveden v samostatné příručce Editační formulář – ActionButtons.
  • Ovládací prvky jsou ve formuláři standardně řazeny pod sebou, případně mohou být opticky seskupeny do více sloupců pomocí přichytávání k předchozím prvkům. Mezi databázovými ovládacími prvky lze přecházet klávesou „TAB“ směrem dolů a kombinací „SHIFT+TAB“ směrem nahoru.
  • K ovládacím prvkům editačního formuláře je možné přistupovat pomocí JavaScriptu a dynamicky tak měnit jejich vlastnosti, chování nebo hodnoty. U databázových ovládacích prvků je možné číst i nastavovat hodnoty textových polí, rozbalovacích seznamů a dalších prvků, pokud je znám jejich identifikátor v objektovém modelu HTML dokumentu.

1.2. Oprávnění ke vstupu do editačního formuláře

  • Editační formulář se obvykle otevírá prostřednictvím navigačních prvků umístěných na nahlížecích stránkách nebo v jiných editačních formulářích. Uživatele na něj může přesměrovat také serverová funkce „SCHEDULEFORM“ nebo externí funkce. Formulář lze otevřít i přímou adresou „Form.aspx?form=<ID formuláře>&id=<ID záznamu>“, proto zabezpečení nesmí spoléhat na skrytí URL; zobrazení a možnost editace se vždy řídí oprávněními, vlastnictvím a případným zamknutím záznamu. Vazbu nového záznamu na rodičovský záznam (systémové sloupce „pid“ a „pform“) přebírá formulář z adresy a neověřuje ji; podmínky dotazů, které se o tuto vazbu opírají, proto nemohou sloužit jako zabezpečení.
  • Pro vytvoření nového databázového záznamu může uživatel otevřít editační formulář několika způsoby:
    • Tlačítkem umístěným na nahlížecí stránce nebo v jiném editačním formuláři, které přesměruje uživatele do konkrétního formuláře. Tento způsob se nastavuje ve vlastnostech ovládacího prvku „Button“ nebo v jeho skriptu pomocí funkce „SCHEDULEFORM“.
    • Prostřednictvím nahlížecí tabulky, která zobrazuje data daného editačního formuláře. Tato možnost je dostupná povolením ikony „Nový záznam...“ ve vlastnostech nahlížecí tabulky.
    • Pomocí dalších vizuálních ovládacích prvků, jako je kalendář, plánovací vícezdrojový kalendář, rozvrh hodin, ganttův diagram nebo stromová struktura, pokud je v jejich nastavení povoleno vytváření nových záznamů.
    • Přímým vstupem z nahlížecí stránky, která je nastavena tak, aby uživatele přesměrovala do konkrétního editačního formuláře.
  • Pro editaci již existujícího databázového záznamu může uživatel otevřít editační formulář:
    • Kliknutím na ikonu tužky v nahlížecí tabulce.
    • Prostřednictvím vizuálních ovládacích prvků, které umožňují otevření detailu záznamu (např. kliknutím na položku v kalendáři, mapě, ganttově diagramu nebo stromové struktuře).
    • Tlačítkem s definovaným skriptem „SCHEDULEFORM“, které otevře konkrétní databázový záznam.
    • Pomocí nahlížecí stránky nastavené tak, aby vždy otevřela první záznam daného editačního formuláře.

1.3. Oprávnění k zobrazení obsahu editačního formuláře

  • Samotný editační formulář nemá samostatné oprávnění na zobrazení. Viditelnost formuláře je odvozena od oprávnění k jeho vnitřním ovládacím prvkům.
  • Editační formulář zobrazí pouze ty ovládací prvky, ke kterým má aktuálně přihlášený uživatel oprávnění. Nemá-li anonymní uživatel oprávnění k žádnému ovládacímu prvku, zobrazí se mu místo formuláře přihlašovací obrazovka; přihlášenému uživateli se v takovém případě zobrazí prázdný formulář. Existuje-li v adresáři „Config“ soubor „DenyLogin.txt“, přihlašovací obrazovka se zobrazí jen při přístupu z IP adresy „127.0.0.1“, jinak se i anonymnímu uživateli zobrazí prázdný formulář. Detailní popis souboru je uveden v samostatné příručce Nastavení NET Genia.
  • Každý ovládací prvek může mít nastaveny konkrétní uživatelské skupiny nebo jednotlivé uživatele, kteří jej mohou vidět a používat. Ostatní uživatelé ovládací prvek neuvidí a nemohou s ním pracovat.
  • Ovládací prvek bez nastavených oprávnění vidí pouze uživatel s administrátorským oprávněním – oprávnění editačního formuláře ani aplikace se na něj nepřenášejí.
  • Pokud uživatel vytvoří nový databázový záznam a nemá oprávnění k některým databázovým ovládacím prvkům, budou odpovídající databázové sloupce uloženy s hodnotou „null“.
  • Při uložení existujícího záznamu se hodnoty databázových ovládacích prvků, ke kterým uživatel nemá oprávnění, nepřepisují a zůstávají zachovány.

1.4. Vlastnictví záznamů

  • Každá databázová tabulka obsahuje sloupec „userid“, který uchovává identifikátor uživatele, jenž databázový záznam vytvořil a je jeho vlastníkem.
  • Vlastníkem nového záznamu se ve výchozím stavu stane přihlášený uživatel, který záznam v editačním formuláři uloží. JavaScript editačního formuláře může vlastníka nového záznamu před uložením změnit – proměnná „#owner#“ vrací odkaz na skryté pole s ID vlastníka záznamu. U existujícího záznamu se vlastník vždy čte z databáze a změna tohoto pole se neuplatní.
  • Databázové záznamy, které byly importovány nebo vytvořeny externí aplikací, nemusí mít hodnotu sloupce „userid“ vyplněnou. Takové záznamy se považují za záznamy bez vlastníka.
  • Vlastníkem záznamu bez vyplněného vlastníka se stane ten uživatel, který daný záznam poprvé otevře v editačním formuláři a uloží jej.
  • Záznam bez vlastníka se při otevření považuje za záznam aktuálně přihlášeného uživatele. Je-li „Práva na editaci“ nastaveno na „Vlastník nebo spoluvlastník záznamu“, může takový záznam upravit a uložit každý uživatel s oprávněním k ovládacím prvkům formuláře.
  • Vlastníka záznamu doplní pouze uložení v editačním formuláři. Hromadné změny a hromadné mazání v nahlížecí tabulce považují záznam bez vlastníka za cizí; úprava hodnoty přímo v buňce nahlížecí tabulky se u něj chová stejně jako v editačním formuláři.
  • Anonymní uživatel má v NET Geniu jediný uživatelský účet „Anonymous“, takže záznam vytvořený anonymním uživatelem má za vlastníka tento účet a z pohledu vlastnictví patří všem anonymním návštěvníkům. U veřejných formulářů je proto vhodné ponechat „Práva na editaci“ na hodnotě „Pouze spoluvlastník záznamu“ a uživatele, kteří záznamy zpracovávají, zařadit mezi spoluvlastníky.

1.5. Spoluvlastnictví záznamů

  • Databázové záznamy mohou mít kromě jednoho vlastníka také jednoho nebo více spoluvlastníků.
  • Spoluvlastníky mohou být jednotliví uživatelé i celé uživatelské skupiny.
  • Informace o spoluvlastnictví se nenastavuje na úrovni jednotlivých databázových záznamů, ale na úrovni databázové tabulky, resp. editačního formuláře jako celku.
  • Pro editaci existujícího databázového záznamu a jeho uložení je vyžadováno vlastnictví nebo alespoň spoluvlastnictví daného záznamu; konkrétní chování určuje nastavení „Práva na editaci“.
  • Není-li uživatel vlastníkem ani spoluvlastníkem záznamu, nemá oprávnění provádět změny tohoto záznamu. Výjimkou je uživatel s administrátorským oprávněním.
  • Spoluvlastnictví nemá vliv na vytváření nových databázových záznamů. Vlastníkem nového záznamu se stává uživatel, který záznam v editačním formuláři uloží, nezmění-li ho JavaScript formuláře (viz „Vlastnictví záznamů“).

1.6. Oprávnění k zobrazení hodnoty ovládacího prvku

  • Viditelnost hodnot databázového ovládacího prvku může být řízena vlastnictvím nebo spoluvlastnictvím databázového záznamu.
  • Právo na zobrazení hodnoty databázového ovládacího prvku se nastavuje přímo ve vlastnostech daného ovládacího prvku.
  • Ovládací prvek může být nastaven jedním z následujících způsobů:
    • hodnota je zobrazena všem uživatelům (výchozí stav),
    • hodnota je zobrazena pouze vlastníkovi nebo spoluvlastníkovi záznamu.
  • V editačním formuláři se ovládací prvek s hodnotou zobrazenou pouze vlastníkovi nebo spoluvlastníkovi zobrazí tomu, kdo smí záznam upravit – uživateli s administrátorským oprávněním, spoluvlastníkovi a vlastníkovi, je-li „Práva na editaci“ nastaveno na „Vlastník nebo spoluvlastník záznamu“. Ostatním se ovládací prvek nezobrazí a nemohou jeho hodnotu zobrazit ani vyplnit.
  • Takový ovládací prvek nelze zobrazit jako sloupec nahlížecí tabulky ani exportovat z nahlížecí tabulky. V detailech nahlížecí tabulky, ve stromu a v kanbanu se jeho hodnota zobrazí uživateli s administrátorským oprávněním, vlastníkovi a spoluvlastníkovi záznamu, u záznamu bez vlastníka všem uživatelům. Tisková šablona hodnotu vytiskne vždy.
  • V těle e-mailu odeslaného příkazem skriptu „Odeslat e-mail“ se hodnota takového ovládacího prvku zobrazí jen tehdy, má-li uživatel, který skript spustil, administrátorské oprávnění nebo je-li vlastníkem záznamu, anebo nemá-li záznam vlastníka. Spustí-li skript spoluvlastník záznamu, hodnota se nezobrazí; na příjemcích e-mailu to nezávisí. U záznamu, který se synchronizuje do jiné instance, se e-mail odešle až po jeho přenosu a rozhoduje uživatel, pod kterým odesílání synchronizace právě běží.
  • Je-li takový ovládací prvek vybraný jako sloupec „Zdroj“ ovládacího prvku Kanban, řadí se podle jeho hodnoty karty do sloupců nástěnky bez ohledu na toto omezení, a je-li seznam zdrojů nástěnky zadaný ručně a prázdný, zobrazí se jeho hodnoty jako názvy sloupců nástěnky všem jejím uživatelům.
  • Nastavení chrání zobrazení ovládacího prvku, nikoli hodnotu použitou v kódu stránky: identifikátor ovládacího prvku použitý v JavaScriptu nebo v ovládacím prvku „HTML“ se u uživatele, který ovládací prvek nevidí, nahradí hodnotou z databáze.

1.7. Oprávnění k uložení záznamu

  • Oprávnění k uložení databázového záznamu je podmíněno právem alespoň na jeden databázový ovládací prvek a současně vlastnickým oprávněním podle nastavení „Práva na editaci“. Administrátor může záznam uložit i mimo toto vlastnické omezení.
  • Právo na editaci se nastavuje přímo ve vlastnostech editačního formuláře.
  • Editační formulář může být nastaven jedním z následujících režimů:
    • oprávnění k editaci má vlastník i spoluvlastník záznamu,
    • oprávnění k editaci má pouze spoluvlastník záznamu (výchozí nastavení).
  • Skripty tlačítek a událostí editačního formuláře zapisují do databáze bez ohledu na oprávnění uživatele, který je spustil – kdo smí akci provést, určují oprávnění k tlačítku.

1.8. Oprávnění ke smazání záznamu

  • Smazat lze pouze existující nesystémový záznam ve formuláři, který má uživatel oprávnění editovat a ve kterém má přístup alespoň k jednomu databázovému ovládacímu prvku.
  • Ve výchozím nastavení musí mít uživatel právo ke všem databázovým ovládacím prvkům editačního formuláře.
  • Pokud je ve vlastnostech ovládacího prvku „ActionButtons“ zapnuta možnost „Vždy povolit mazání vlastníkovi nebo spoluvlastníkovi záznamu“, může oprávněný vlastník nebo spoluvlastník záznam smazat i bez práva k některým databázovým ovládacím prvkům.
  • Záznam s příznakem „system“ nelze smazat ani při zapnutí této možnosti.
  • Nemá-li uživatel oprávnění záznam smazat, je tlačítko „Smazat“ neaktivní. U nového, dosud neuloženého záznamu je tlačítko „Smazat“ neaktivní vždy.
  • Smazáním záznamu se nesmažou jeho vnořené záznamy ani soubory příloh.

1.9. Identifikátory ovládacích prvků

  • Identifikátor ovládacího prvku představuje odkaz na databázový ovládací prvek v objektovém modelu HTML dokumentu a současně určuje název databázového sloupce, do kterého jsou ukládány hodnoty zadané ve formuláři.
  • Identifikátor je odvozen z názvu ovládacího prvku a začíná prefixem „ng_“. Systémové ovládací prvky prefix „ng_“ nepoužívají.
  • Identifikátor odvozený z názvu ovládacího prvku se zkrátí na nejvýše 50 znaků včetně prefixu, u databáze Firebird 3 a starší na 31 znaků. Je-li odvozený identifikátor v databázové tabulce formuláře už použitý, doplní se na jeho konec číslo.
  • Identifikátor ovládacího prvku je dostupný na záložce „Administrace“ ve vlastnostech ovládacího prvku.
  • Identifikátory lze používat:
    • v JavaScriptu ve webovém prohlížeči,
    • ve skriptech na straně serveru,
    • v databázových podmínkách a join ech,
    • v ovládacím prvku „HTML“,
    • v tiskových šablonách.

1.10. Zamykání záznamů

  • Databázové záznamy otevřené v editačním formuláři mohou být zamykány tak, aby je mohl v jeden okamžik editovat pouze jeden uživatel.
  • Uživatel, který záznam otevře jako první a smí ho měnit, jej automaticky uzamkne.
  • Zámek se po dobu práce v editačním formuláři automaticky prodlužuje. Při řízeném opuštění formuláře tlačítkem „Zpět“ nebo přesměrováním se uvolní ihned; při zavření záložky, pádu prohlížeče nebo ztrátě spojení zanikne až po nastavené době od posledního prodloužení.
  • Délka platnosti zámku se nastavuje v minutách ve vlastnostech editačního formuláře a hraje roli zejména při technických problémech (zavření záložky, ztráta připojení apod.).
  • Zamčené záznamy jsou v nahlížecích tabulkách označeny ikonou zámku s informací o uživateli, který záznam uzamkl, a o době platnosti zámku.
  • Zamčený záznam lze otevřít i jiným uživatelem, avšak editační formulář je v takovém případě dostupný pouze pro čtení.
  • Uživatel s administrátorským oprávněním zámek jiného uživatele nerespektuje – zamčený záznam může upravit i uložit.
  • Anonymní uživatel záznam nezamyká, ale zámek jiného uživatele se na něj vztahuje.
  • Záznam se zamkne pouze tehdy, má-li uživatel oprávnění alespoň k jednomu ovládacímu prvku formuláře a smí-li záznam měnit. Uživatel, kterému se formulář otevře pouze pro čtení (nemá oprávnění záznam měnit nebo k žádnému databázovému ovládacímu prvku, případně je záznam zamčený jiným uživatelem), záznam nezamkne; zámek jiného uživatele se mu ale ohlásí. Zablokuje-li formulář až skript události „OnAfterOpen“ funkcí „DISABLEFORM“, záznam se zamkne stejně jako u formuláře, který lze měnit.
  • Zámek se uplatní pouze v editačním formuláři. Úprava hodnoty přímo v nahlížecí tabulce, hromadné změny, import dat, skripty i funkce „form_Save“ a „control_Save“ zapíší i do záznamu, který má zamčený jiný uživatel. Skript se zamčenému záznamu může bránit serverovou funkcí „PROTECTFORM“, jejíž popis je uveden v samostatné příručce Serverové funkce.

1.11. Historie a sledování změn

  • Ke každému editačnímu formuláři existuje automaticky generovaná databázová tabulka historie s názvem ve tvaru „<identifikátor formuláře>_history“.
  • Tabulka historie obsahuje kopie uživatelských databázových sloupců formuláře a vlastní systémové sloupce:
    • „id“ – ID záznamu historie,
    • „date“ – datum změny,
    • „userid“ – přihlašovací jméno uživatele, který změnu provedl,
    • „action“ – identifikátor zdroje změny, například skriptu, tlačítka nebo služby; změny zapsané importem dat do nahlížecí tabulky, synchronizací nebo obnovou z historie ho nemají vyplněný; u změn, které neprošly odesláním editačního formuláře, nese hodnotu:
      • „ngef.aspx“ – změna provedená externí funkcí volanou z JavaScriptu,
      • „Save.aspx“ – změna uložená bez odeslání editačního formuláře: úpravou hodnoty přímo v nahlížecí tabulce, javascriptovými funkcemi „form_Save“ a „control_Save“ nebo z matice,
    • „changedid“ – ID změněného záznamu,
    • „pform“ a „pid“ – vazba změněného záznamu na rodičovský záznam (součást snímku pro obnovu smazaného záznamu),
    • „userid2“ – vlastník změněného záznamu uložený odděleně od autora změny v „userid“ (slouží k obnově smazaného záznamu),
    • „created“ – příznak vytvoření záznamu („x“ = vytvořeno formulářem, skriptem, externí funkcí, MCP serverem nebo synchronizací, „i“ = importem dat do nahlížecí tabulky, a to i při úpravě existujícího záznamu importem podle ID, „r“ = obnoveno z historie),
    • „deleted“ – příznak smazání záznamu („x“ = smazáno, „r“ = smazání vráceno obnovením).
  • Při vytvoření záznamu se do historie uloží hodnoty uživatelských sloupců stejně jako do hlavní databázové tabulky.
  • Při úpravě existujícího záznamu se do historie ukládají pouze změněné uživatelské sloupce. Sloupce, které se v dané změně neměnily, zůstávají v řádku historie bez uložené hodnoty (databázová hodnota „null“).
  • Pokud se hodnota pole změní na databázovou hodnotu NULL, NET Genium ji v historii ukládá interní zástupnou hodnotou podle datového typu sloupce, aby ji bylo možné odlišit od sloupce, který se vůbec neměnil.
  • Výjimkou je import dat do nahlížecí tabulky: do historie ukládá všechny sloupce, které import do záznamu zapsal, i když se jejich hodnota nezměnila, a databázovou hodnotu NULL interní zástupnou hodnotou neodlišuje.
  • Při smazání záznamu se do historie uloží poslední hodnoty uživatelských sloupců — tento úplný snímek umožňuje pozdější obnovu smazaného záznamu.
  • Při zobrazení historie se některé zvláštní uložené hodnoty zobrazují jako tři tečky „...“ s tooltipem, který určuje jejich význam: „Prázdný řetězec“ znamená změnu textového pole na prázdný textový řetězec, „Databázová hodnota NULL“ znamená změnu pole na databázovou hodnotu NULL a „ID 0“ u ovládacího prvku ForeignKey se zaškrtnutým polem „Zobrazovat hodnotu v nahlížecí tabulce bez nutnosti joinování“ a tooltip „0“ u ovládacích prvků File a Image mimo řádek s příznakem „created“ = „x“ znamenají uloženou nulovou hodnotu, tedy žádný vybraný záznam, resp. žádný soubor nebo obrázek. Samotné tři tečky „...“ tedy neznamenají „beze změny“.
  • Je-li protokolování historie zapnuto, vytvoření, úprava i smazání databázového záznamu generuje odpovídající záznam v historii. Úprava, která nezmění žádnou hodnotu, záznam v historii nevytvoří; výjimkou je import dat do nahlížecí tabulky.
  • Do historie se nezapisují změny provedené serverovou funkcí „DELETEDATA“, příkazy „TRUNCATE TABLE“ v nastavení editačního formuláře, zápis a mazání záznamů přes MCP server bez zapnuté historie ani přímé změny v databázi.
  • Obnovením smazaného záznamu z historie vznikne v historii nový záznam s příznakem „created“ = „r“ a původní záznam o smazání dostane příznak „deleted“ = „r“. Obnovení se do historie zapíše i u editačního formuláře se zakázaným protokolováním historie. Existuje-li v databázové tabulce záznam se stejným ID, obnovení se neprovede.
  • Protokolování historie je ve výchozím stavu zapnuto a lze jej vypnout v nastavení editačního formuláře.

1.12. Synchronizace databázových tabulek

  • Synchronizace slouží k udržování konzistentní kopie databázových tabulek mezi více instalacemi NET Genia.
  • Podporována je jednosměrná i obousměrná (multiple master) synchronizace.
  • Při obousměrné synchronizaci jsou změny prováděny ve stejném pořadí, v jakém byly iniciovány na zdrojovém serveru.
  • Synchronizace není dostupná v cloudové variantě NET Genium Online — odkaz na její nastavení se v nabídce editačního formuláře nezobrazuje.
  • Změny se nepřeposílají dál: změna přijatá z jiné instalace se už nikam neodesílá. Má-li se záznam dostat ze serveru A přes server B na server C, musí mít server A propojení přímo i na server C.
  • Změna přijatá synchronizací se na protistraně zapíše přímo do databázové tabulky: nespustí ukládací ani mazací skripty, validaci, výchozí hodnoty ani přepočet prvků „AutoSum“ editačního formuláře protistrany. Logiku, která má proběhnout v obou instalacích, je proto nutné přenést jako data.
  • Změny čekají ve společné frontě všech formulářů a všech propojených serverů a odesílají se přísně v pořadí, v jakém vznikly. Nepodaří-li se některou změnu odeslat (nedostupný server, chybějící formulář na protistraně, chyba databáze), zastaví se přenos všech dalších změn, dokud se příčina neodstraní nebo dokud se změna nesmaže z fronty. V reportech lze v zobrazení systémové tabulky „ssynchronization“ smazat jen první zobrazený řádek — bez hledání je to první řádek fronty, tedy přenos nejstarší změny na jedno propojení — a v reportu „Editační formuláře (Synchronizace)“ celou frontu jednoho propojení. E-maily změny nese první řádek její skupiny ve frontě, takže se smazáním tohoto řádku zahodí i ony — samostatně i spolu s celou frontou propojení. Další pokus proběhne nejdříve za 2 minuty.
  • Sloupec, který v editačním formuláři protistrany neexistuje, se při příjmu vynechá bez hlášení; hodnota, kterou nelze převést na datový typ sloupce protistrany, se vynechá se záznamem v logu „Warnings“ příjemce. Přenos ostatních sloupců i fronty pokračuje, takže po změně identifikátoru nebo smazání ovládacího prvku na protistraně je nutné upravit sloupce v nastavení synchronizace.
  • Záznam má ve všech synchronizovaných instalacích stejné ID. Nový záznam proto před odesláním dostane ID dohodnuté se všemi protistranami a lokálně se případně přečísluje. Přečíslování přepíše ID záznamu v jeho historii, v rozepsaných e-mailech a ve frontě synchronizace. Vazbu vnořených záznamů („pid“) opraví jen v samotném formuláři, ve formulářích otevíraných z něj tlačítkem typu „Otevřít editační formulář“ a ve formulářích, jejichž záznamy zobrazuje nestatistická nahlížecí tabulka tohoto formuláře se zaškrtnutou volbou „Zobrazit pouze vnořené záznamy“; vnořené záznamy ostatních formulářů zůstanou u odesílatele navázané na původní ID. Cizí klíče, které na přečíslovaný záznam odkazují, se neopraví.
  • ID se vyjednává jen u záznamu, který je při uložení nový. Existující záznam — například záznam, který vznikl před nastavením synchronizace, nebo záznam, který splnil podmínku synchronizace až touto úpravou — se odešle pod svým ID a jen se sloupci změněnými tímto uložením. Na protistraně se tyto sloupce zapíší do záznamu se stejným ID, i když jde o jiný záznam, a přepíše se mu i vazba na rodičovský záznam („pid“, „pform“) a při synchronizaci uživatelů vlastník; neexistuje-li tam záznam s tímto ID, založí se jen s nimi. Všechny synchronizované sloupce odešle tlačítko „Synchronizovat“ nebo jednorázová synchronizace.
  • Cizí klíče, vazba na rodičovský záznam („pid“) a vlastník záznamu se přenášejí jako čísla, takže odkazované záznamy musí mít ve všech instalacích stejné ID. Vlastník záznamu se přenáší, jen když se na tentýž server synchronizují i uživatelé (formulář „Uživatel“); jinak zůstane záznam založený synchronizací na protistraně bez vlastníka a u existujícího záznamu se vlastník nemění. Rodičovský formulář vnořených záznamů musí být propojený na tentýž server.
  • Dohodnuté ID se na protistranách rezervuje vložením prázdného záznamu (jen s vazbou na rodičovský záznam), který se daty doplní až přenosem. Selže-li rezervace na některé z protistran nebo lokální přečíslování, vyjedná další pokus nové ID a prázdné záznamy vložené předchozím pokusem na protistranách zůstanou; prázdný záznam zůstane i tehdy, když se změna smaže z fronty dřív, než se přenese. Takové záznamy je nutné odstranit ručně.
  • Soubory příloh se přenášejí spolu se záznamem a na protistraně vzniká vždy nová příloha. Chybí-li soubor přílohy na disku odesílatele, ponechá si protistrana původní hodnotu.
  • E-maily odesílané skripty „OnBeforeSave“ a „OnAfterSave“ synchronizovaného záznamu se odešlou až po úspěšném přenosu záznamu na všechny protistrany. Smaže-li se záznam dřív, než se jeho změna přenese, e-maily z této změny se neodešlou.
  • Smazání záznamu se na protistranu přenese, smaže se ale jen samotný záznam — vnořené záznamy ani soubory příloh ne. Nový záznam smazaný dřív, než se odeslal, se na protistranu nepřenese vůbec.
  • Do fronty se nezařazují změny provedené importem dat do nahlížecí tabulky, obnovením záznamu z historie, serverovou funkcí „DELETEDATA“, příkazy „TRUNCATE TABLE“ a zápisem nebo mazáním přes MCP server bez zapnuté historie.
  • V administrátorském režimu nabízí editační formulář uloženého synchronizovaného záznamu tlačítko „Synchronizovat“. Tlačítko záznam uloží stejně jako tlačítko „Uložit“, včetně skriptů „OnBeforeSave“ a „OnAfterSave“, a do fronty zařadí všechny synchronizované sloupce, nejen změněné; podmínky synchronizace záznamu i sloupců platí dál. U nového záznamu a v editačním formuláři se skrytým tlačítkem „Uložit“ se tlačítko nezobrazuje.

2. Seznam záložek v dialogu nastavení editačního formuláře

  • Obecné – Nastavení obecných vlastností
  • Ostatní – Nastavení primárního klíče, zámků, sledování změn a javascriptu
  • Nápověda – Nastavení textu plovoucí nápovědy a seskupování ovládacích prvků
  • Práva na editaci – Nastavení práv
  • Práva podřízených objektů – Nastavení práv podřízených ovládacích prvků
  • Administrace – Nastavení ostatních vlastností

2.1. Záložka „Obecné“

2.1.1. Název

  • Název editačního formuláře určuje ideálně v jednotném čísle vyjádřené pojmenování jednoho databázového záznamu, který je uložen v databázové tabulce přidružené k formuláři.
  • Název editačního formuláře se zobrazuje v titulku záložky webového prohlížeče.

2.1.2. Slovník

  • Slovník zobrazuje seznam názvů aplikačních skupin, aplikací, kategorií, nahlížecích stránek, editačních formulářů a ovládacích prvků použitých napříč celou aplikací.
  • Vyhledávání ve slovníku slouží k navržení správného názvu editačního formuláře a k udržení konzistence názvosloví v celé aplikaci.

2.1.3. Možnosti

  • Tab Obecné + Ostatní
    • Zaškrtnutí tohoto pole určuje, zda mají být při vytvoření nového editačního formuláře vytvořeny také ovládací prvky záložek „Tab“ a „Ostatní“.
  • Sledování změn + Watcher
    • Zaškrtnutí tohoto pole určuje, zda mají být při vytvoření nového editačního formuláře vytvořeny také ovládací prvky pro sledování změn:
      • Ovládací prvek „History“
      • Ovládací prvek „Watcher“
        • Zadáno kým
        • Zadáno kdy
        • Změněno kým
        • Změněno kdy

2.1.4. Zadejte sloupce vaší nové tabulky

  • Pole „Zadejte sloupce vaší nové tabulky“ umožňuje vytvoření nových ovládacích prvků v editačním formuláři.
  • Jednotlivé názvy sloupců jsou zapisovány po řádcích, oddělené enterem, přičemž každý řádek představuje jeden sloupec tabulky.
  • Prázdné řádky se přeskočí. Název sloupce se zkrátí na 50 znaků a jeho první písmeno se převede na velké; zapsaný datový typ se do této délky nepočítá. Vytvoří se nejvýše 100 sloupců, další řádky se nepoužijí.
  • Za název sloupce je možné uvést také datový typ, který je zapsán za dvojtečku hned po názvu sloupce; mezera za dvojtečkou je nepovinná. Místo anglického klíče lze zapsat i název datového typu v jazyce uživatele (například „Celé číslo“), na velikosti písmen ani diakritice nezáleží:
    • string
      • Tlačítko v průvodci pro rychlé zvolení tohoto typu: Textový řetězec
      • Cílový ovládací prvek: TextBox
      • Datový typ: Textový řetězec
      • Šířka: 150 px
      • Maximální délka: 100 znaků
    • integer
      • Tlačítko v průvodci pro rychlé zvolení tohoto typu: Celé číslo
      • Cílový ovládací prvek: TextBox
      • Datový typ: Celé číslo
      • Šířka: 150 px
      • Maximální délka: 50 znaků
      • Zarovnání: Vlevo
    • long
      • Cílový ovládací prvek: TextBox
      • Datový typ: Velké celé číslo
      • Maximální délka: 50 znaků
    • double
      • Tlačítko v průvodci pro rychlé zvolení tohoto typu: Desetinné číslo
      • Cílový ovládací prvek: TextBox
      • Datový typ: Desetinné číslo
      • Šířka: 150 px
      • Maximální délka: 50 znaků
      • Zarovnání: Vlevo
    • currency
      • Cílový ovládací prvek: TextBox
      • Datový typ: Měna
      • Maximální délka: 50 znaků
    • date
      • Tlačítko v průvodci pro rychlé zvolení tohoto typu: Datum
      • Cílový ovládací prvek: TextBox
      • Datový typ: Datum
      • Šířka: 150 px
      • Maximální délka: 50 znaků
    • file
      • Tlačítko v průvodci pro rychlé zvolení tohoto typu: Soubor
      • Cílový ovládací prvek: File
    • image
      • Tlačítko v průvodci pro rychlé zvolení tohoto typu: Obrázek
      • Cílový ovládací prvek: Image
  • Datový typ je volitelná informace, při neuvedení datového typu je automaticky zvolen textový řetězec.
  • Nerozpoznaný datový typ se nepoužije: vytvoří se textový řetězec a dvojtečka s textem za ní zůstane součástí názvu sloupce.

2.1.5. Přidat nové sloupce

  • Do již vytvořeného a uloženého editačního formuláře lze přidat nové sloupce po zaškrtnutí možnosti „Přidat nové sloupce“.
  • Názvy nových sloupců se zadávají do pole „Zadejte nové sloupce“, přičemž každý řádek představuje jeden sloupec.
  • Umístění vložených ovládacích prvků do formuláře se řídí tím, zda je před úpravou editačního formuláře, resp. před stisknutím ikony ozubeného kolečka, označena konkrétní pozice:
    • Bez označení – vložení ovládacích prvků na konec editačního formuláře; je-li posledním ovládacím prvkem formuláře grafický oddělovač „Space“, vloží se ovládací prvky před něj
    • S označením místa pomocí horizontální linie – vložení ovládacích prvků na předem určenou pozici

2.2. Záložka „Ostatní“

2.2.1. Primární klíč

  • Primární klíč určuje datový typ primárního klíče – databázového sloupce "id", který je součástí každé databázové tabulky v NET Geniu.
  • Datový typ primárního klíče může být kdykoliv změněn z Integeru na Long.
  • Zpětná změna z Long na Integer se provede pouze tehdy, když všechny hodnoty primárního klíče v databázové tabulce i v tabulce historie spadají do rozsahu datového typu Integer; jinak primární klíč zůstane Long. Před provedením změny se zobrazí dotaz na potvrzení, protože konverze dat může být časově náročná.
  • Před změnou primárního klíče na Long je důležité zajistit správnou funkcionalitu externích funkcí, služeb nebo ostatních aplikací, které s databázovou tabulkou pracují. Především jde o objekty DataSaver nebo DataSaverSynchro, které musí být změněny na DataSaver2 a DataSaverSynchro2.
  • Ovládací prvky ForeignKey, které na databázovou tabulku odkazují, zůstávají i po změně primárního klíče na Long typu „int“; na záznamy s ID větším než 2 147 483 647 proto odkazovat nemohou.
  • Záznamy s ID větším než 2 147 483 647 se nesynchronizují — jejich změny se do fronty synchronizace nezařazují.

2.2.2. Zamykání záznamů

  • Databázové záznamy otevřené v editačním formuláři mohou být nastaveny tak, aby je v jednu chvíli mohl editovat pouze jeden uživatel.
  • Uživatel, který databázový záznam otevře jako první a smí ho měnit, záznam automaticky zamyká. Během práce v editačním formuláři se zámek automaticky prodlužuje. Při řízeném opuštění formuláře tlačítkem „Zpět“ nebo přesměrováním se zámek ihned uvolní; při zavření záložky, pádu prohlížeče nebo ztrátě spojení zanikne až po uplynutí nastaveného intervalu od posledního prodloužení.
  • Zámek patří oknu webového prohlížeče, ve kterém byl záznam otevřen. Otevře-li tentýž uživatel záznam i v jiném prohlížeči, zobrazí se mu tam editační formulář stejně jako ostatním uživatelům pouze ke čtení. Otevře-li ho v jiném okně téhož prohlížeče, formulář se hned po otevření zablokuje stejně jako při převzetí zámku popsaném níže a upozorní na to hlášením. V obou případech ho tooltip ikony zámku v nahlížecí tabulce upozorní, že má záznam otevřený jinde. Zámek, který po zavření okna zůstal, se i pro ostatní okna téhož přihlášení uvolní až po uplynutí nastaveného časového intervalu.
  • Převezme-li zámek mezitím jiné okno nebo jiný uživatel, typicky poté, co zámek během spánku počítače vypršel, původní okno to zjistí při nejbližším automatickém prodloužení zámku, upozorní na to hlášením a další editaci záznamu v něm zablokuje: vypne tlačítka pro uložení a smazání záznamu i všechna tlačítka ovládacích prvků editačního formuláře, zakáže hromadnou editaci v nahlížecích tabulkách formuláře a vypne automatické ukládání. Tlačítko „Zpět“ zůstává funkční. Uložení i smazání záznamu ověřuje zámek i server, takže z takového okna neprojde ani tehdy, když se o ně uživatel pokusí dřív, než okno převzetí zámku zjistí; místo toho se zobrazí hlášení o uzamčení záznamu.
  • Zamykání záznamů se definuje v nastavení editačního formuláře zadáním časového intervalu v minutách, během kterého má být zámek aktivní. Délka časového intervalu hraje roli pouze při technických problémech uživatele, díky kterým nemůže docházet k automatickému prodlužování zámku během celé doby práce uživatele s daným databázovým záznamem v editačním formuláři. Typicky jde o otevření jiné záložky webového prohlížeče, zavření aktuální záložky křížkem, spuštění jiné aplikace na mobilním telefonu, nebo o výpadky internetu. V případě technických problémů tedy dojde k automatickému uvolnění zámku až po uplynutí zvoleného časového intervalu od posledního automatického prodloužení zámku. Délka časového intervalu tedy určuje dobu, po kterou bude zámek aktivní i v případě výpadku spojení mezi klientem a serverem.
  • Restart webové aplikace nejdříve minutu po předchozím restartu uvolní všechny zámky (u více instancí nad jednou databází jen restart hlavní instance; ostatní instance je uvolní nejdříve 6 hodin po předchozím restartu). Zámky relace uvolní ihned její odhlášení administrátorem nebo správcem uživatelských účtů, automatické odhlášení předchozích relací uživatele podle konfiguračního souboru „SingleLogin.txt“, smazání uživatele v NET Geniu nebo přes webové služby knihovny „NETGeniumConnection“, odhlášení relace ticketem přes tytéž webové služby a ukončení nečinné relace přihlášené tokenem, přes webové služby nebo přes Windows z adresy s parametrem „autologin“ dalším takovým přihlášením téhož uživatele, které založí novou relaci; odhlášení odkazem v záhlaví nebo v menu v uživatelském režimu uvolní zámek záznamu otevřeného v hlavním okně stejně jako jiný odchod z formuláře. Zámky ostatních oken, zámky při odhlášení v administrátorském režimu nebo tlačítkem „Odhlásit“ v dialogu „Změna hesla“ a zámky relace, jejíž session vypršela, zaniknou až po uplynutí nastaveného časového intervalu.
  • Zamčené záznamy mají v nahlížecí tabulce místo ikony tužky, která slouží k otevření databázového záznamu, ikonu zámku. Ikona zámku obsahuje tooltip s informací, kdo záznam uzamknul, a do kdy je zámek aktivní. I tak je však možné databázový záznam pomocí ikony zámku otevřít, ostatním uživatelům se editační formulář se zamčeným záznamem zobrazuje pouze ke čtení bez možnosti editace.

2.2.3. Možnosti

  • Protokolovat otevírání záznamů
    • Zaškrtnutí tohoto pole určuje, zda má být každé otevření databázového záznamu v editačním formuláři zaznamenáno do historie sledování změn.
    • Záznam do historie vznikne při každém otevření existujícího záznamu, a to i tehdy, když uživatel záznam neuloží.
    • Otevření se protokoluje jen tehdy, když není zakázané protokolování historie záznamů a uživatel má právo alespoň na jeden ovládací prvek editačního formuláře.
  • Zakázat protokolování historie záznamů
    • Zaškrtnutí tohoto pole určuje, zda má být zakázáno protokolování historie databázových záznamů.
    • Úplné, nebo třeba jen dočasné vypnutí protokolování, se doporučuje před hromadnou úpravou nebo mazáním databázových záznamů, kdy každá změna nebo smazání databázového záznamu vytvoří jeden záznam v historii sledování změn.
    • Vypnutí protokolování se týká jen nových změn; dříve zapsané záznamy historie zůstávají zachovány.
  • Zakázat JavaScript
    • Zaškrtnutí tohoto pole určuje, zda má být zakázáno generování obsahu ovládacích prvků „JavaScript“. Zároveň se při otevření formuláře nespustí kód události ovládacích prvků „CheckBox“, který volá funkci „chb_Display“, a tlačítko pro vymazání hodnoty ovládacích prvků „TextBox“ a „ForeignKey“ se zobrazí jako tlačítko místo ikony.
    • JavaScript v událostech ovládacích prvků a v poli „Klient“ tlačítek se tímto nastavením nevypíná.
    • JavaScript tlačítek ovládacího prvku „ActionButtons“ („Uložit“, „Smazat“, „Zpět“) se tímto nastavením nevypíná.
    • Této možnosti se využívá v situacích, kdy dojde k zacyklení editačního formuláře nevhodným javascriptem. V některých případech dokonce není možné nastavení editačního formuláře otevřít běžným způsobem, a je nutné k tomu použít reporty. Detailní popis reportů je uveden v samostatné příručce Reporty.

2.3. Záložka „Nápověda“

2.3.1. Šířka plovoucí nápovědy

  • Šířka plovoucí nápovědy určuje šířku boxu s nápovědou k editačnímu formuláři umístěného v pravém horním rohu formuláře. Tento box se zobrazuje nezávisle na vertikálním skrolování v editačním formuláři.
  • Na malém displeji se box zobrazuje nahoře ve formuláři a posouvá se spolu s ním. Na editačním formuláři s přihlašovacím oknem se box nezobrazuje.
  • Součástí plovoucího boxu je také obsah všech ovládacích prvků „RichText“ a „HTML“ se zaškrtnutým polem „Plovoucí nápověda v editačním formuláři“. Tento obsah je umístěný za nápovědu editačního formuláře v pořadí, které mají tyto ovládací prvky v editačním formuláři.
  • Není-li šířka vyplněna, použije se výchozí šířka plovoucího boxu 200 pixelů.

2.3.2. Možnosti

  • Automatické seskupování nápovědy přichycených ovládacích prvků
    • Je-li zaškrtnuto „Automatické seskupování nápovědy přichycených ovládacích prvků“, zobrazí se v uživatelském režimu ve sloupci s nápovědou posledního ovládacího prvku řádky ikona nápovědy. Po kliknutí na ni se rozbalí odrážkový seznam ovládacích prvků řádky, které mají nápovědu, ve tvaru „název – text nápovědy“. Nápověda zobrazovaná až po kliknutí na ikonu otazníku (tři tečky na konci řádky) a nápověda z dotazu mají v položce seznamu vlastní ikonu, po jejímž kliknutí se text zobrazí.
    • Není-li zaškrtnuto „Automatické seskupování nápovědy přichycených ovládacích prvků“, nápovědy ovládacích prvků umístěných nalevo od přichycených ovládacích prvků se nezobrazují.
    • Seskupování nápověď se používá u ovládacích prvků, které mají zaškrtnuté pole „Přichytit k předchozímu ovládacímu prvku“.

2.3.3. Nápověda

  • Nápověda je text zobrazovaný v pravém horním rohu editačního formuláře uvnitř plovoucího boxu.
  • Součástí plovoucího boxu je také obsah všech ovládacích prvků „RichText“ a „HTML“ se zaškrtnutým polem „Plovoucí nápověda v editačním formuláři“. Tento obsah je umístěný za nápovědu editačního formuláře v pořadí, které mají tyto ovládací prvky v editačním formuláři.

2.3.4. Poznámky

  • Poznámky slouží pro zadání libovolného textu určeného pro správce aplikace.
  • Do poznámek se umísťuje volání serverových funkcí, které řídí chování editačního formuláře:
    • CENTER() – vystředí editační formulář
    • DISABLEAUTOFILL() – zabrání webovému prohlížeči v automatickém vyplňování textových polí
    • DISABLEPAGETOOLS() – skryje ikony v pravém horním rohu formuláře
    • FULLAJAXMODE() – místo odeslání formuláře používá formulář ajaxové požadavky
    • LABELSINSIDE() – ovládací prvky zobrazují popisek uvnitř prvku
    • LAYOUT(id) – použije pro formulář jiný vzhled
    • LEFTALIGNMENT() – zarovná názvy ovládacích prvků v levém sloupci doleva
    • LOWRESOLUTION() – zobrazí formulář na mobilním zařízení pro malý displej; malý displej pak zůstane uživateli zapnutý až do konce session
    • MARGINS(top, right, bottom, left) – nastaví okraje formuláře
    • NOBACKGROUND() – ovládací prvky nepoužívají barevné pozadí levého sloupce s názvy
    • WEBFORM() – ovládací prvky používají reverzní design webového formuláře bez barevného pozadí levého sloupce
  • Z poznámek se při otevření formuláře vyhodnocují pouze uvedené funkce; ostatní text poznámek včetně jiných serverových funkcí se nevyhodnocuje. Detailní popis serverových funkcí je uveden v samostatné příručce Serverové funkce.
  • Text „DEBUGPICKER“ v poznámkách zapne výpis průběhu převzetí hodnot z pickeru do konzole prohlížeče. Detailní popis pickeru je uveden v samostatné příručce Picker.
  • Do poznámek se umísťuje definice databázového pohledu, je-li editační formulář nastaven pro čtení dat z databázového pohledu.

2.4. Záložka „Práva na editaci“

2.4.1. Spoluvlastníci záznamů

  • Spoluvlastníci záznamů definují seznam uživatelských skupin a uživatelů, kteří rozšiřují vlastnictví databázových záznamů. Vedle vlastníka záznamu, tedy uživatele, který databázový záznam vytvořil, rozšiřují vlastnictví o další uživatele, kteří se automaticky stávají spoluvlastníky všech záznamů v dané databázové tabulce.

2.4.2. Práva na editaci – možnosti

  • Vlastník nebo spoluvlastník záznamu – databázové záznamy v editačním formuláři může editovat vlastník nebo spoluvlastník záznamu.
  • Pouze spoluvlastník záznamu – databázové záznamy v editačním formuláři může editovat pouze spoluvlastník záznamu.
  • Uživatel s administrátorským oprávněním může záznam editovat bez ohledu na volbu „Práva na editaci“.

2.5. Záložka „Práva podřízených objektů“

  • Seznam práv na této záložce slouží pouze k hromadné změně práv ovládacích prvků editačního formuláře. Uplatní se jen při uložení editačního formuláře se zaškrtnutou některou z voleb uvedených níže a sám se nikam neukládá – při dalším otevření nastavení editačního formuláře je seznam prázdný.
  • Které uživatelské skupiny a uživatelé vidí ovládací prvek v editačním formuláři a jeho hodnoty všude jinde v aplikaci, určují práva nastavená u jednotlivých ovládacích prvků.
  • Editační formulář nemá samostatné právo na zobrazení. Otevře se uživateli, který má právo alespoň na jeden jeho ovládací prvek; ovládací prvky bez práva se ve formuláři nezobrazí.

2.5.1. Možnosti

  • Nahradit práva ve všech podřízených objektech – Zaškrtnutí tohoto pole určuje, zda má být při uložení editačního formuláře přepsáno nastavení práv ve všech podřízených ovládacích prvcích na uživatelské skupiny a uživatele zvolené v seznamu na této záložce.
  • Přidat zvolená práva všem podřízeným objektům – Zaškrtnutí tohoto pole určuje, zda mají být při uložení editačního formuláře přidány všechny zvolené uživatelské skupiny a uživatelé všem podřízeným ovládacím prvkům.
  • Odebrat zvolená práva všem podřízeným objektům – Zaškrtnutí tohoto pole určuje, zda mají být při uložení editačního formuláře odebrány všechny zvolené uživatelské skupiny a uživatelé všem podřízeným ovládacím prvkům.

2.6. Záložka „Administrace“

2.6.1. Umístění

  • Výběr aplikační skupiny a aplikace, ve kterých je editační formulář umístěn.
  • Rozbalovací seznam aplikací nabízí aplikace zvolené aplikační skupiny.
  • U systémového editačního formuláře umístění změnit nelze a formulář nelze smazat.

2.6.2. Identifikátor

  • Identifikátor určuje název databázové tabulky v databázi, do které se ukládají samotná uživatelská data vyplňovaná uživatelem v editačním formuláři.
  • Identifikátor je odvozen od názvu editačního formuláře. Začíná prefixem „ng_“, a dále obsahuje alfanumerické znaky použité v názvu editačního formuláře (systémové editační formuláře „ng_“ neobsahují). Při změně názvu editačního formuláře je k dispozici tlačítko „Opravit“, které slouží k opravě identifikátoru, a tedy i přejmenování databázové tabulky v databázi. Pro přehlednost a eliminaci případných nedorozumění se doporučuje udržovat identifikátor v souladu s názvem editačního formuláře. Pokud do databáze přistupují i externí aplikace a například čtou nebo zapisují data do databázové tabulky tohoto editačního formuláře, je nutné změnu identifikátoru naplánovat až na vhodnou dobu.
  • Pro automatickou opravu identifikátorů všech databázových ovládacích prvků editačního formuláře je k dispozici tlačítko „Opravit vše“.
  • Identifikátor odvozený z názvu editačního formuláře se zkrátí na nejvýše 50 znaků včetně prefixu, u databáze Firebird 3 a starší na 19 znaků. Je-li odvozený identifikátor v databázi už použitý, doplní se na jeho konec číslo.
  • Při změně identifikátoru se automaticky opraví jeho výskyty v serverových funkcích SQL, SQLARRAY, COLORLEGEND a EXPORTDATA. Výskyty v ovládacích prvcích HTML a JavaScript, v tiskových šablonách a v externích funkcích se neopravují a je nutné je upravit ručně.
  • Data z databázové tabulky číst/zapisovat pomocí In-Memory tabulky
  • Pouze pro SQL Server
    • U databáze Firebird se pole nezobrazuje. Převezme-li editační formulář zaškrtnutí například importem aplikace, NET Genium ho u databáze Firebird ignoruje; servisní utility, například SqlBackup, ho ale vyhodnocují i u databáze Firebird.
    • In-Memory tabulky jsou databázové tabulky umístěné v operační paměti, které se hodí pro časté zapisování dat – především pro vytváření nových záznamů (INSERT) nebo aktualizaci stávajících (UPDATE).
    • In-Memory tabulky se nehodí pro řešení potíží s rychlostí zpracování databázových dotazů během čtení dat (SELECT). Řešením těchto potíží je vždy správné nastavení indexů.
    • Zaškrtnutí tohoto pole určuje, zda má být pro čtení a zápis dat použita databázová tabulka se stejným identifikátorem jako má editační formulář, jen se slovem „_memory“ na konci názvu.
    • In-Memory tabulky se musí vytvářet ručně. K tomuto účelu je možné využít příkaz „CREATE ng_kniha_memory“ z rozbalovacího seznamu umístěného pod zaškrtávacím polem. Tento příkaz zobrazí databázový dotaz na vytvoření nové In-Memory tabulky se stejnou strukturou jako má editační formulář, a databázovou tabulku se pokusí rovnou vytvořit.
    • In-Memory tabulky neumožňují dodatečnou změnu databázové struktury. Nejdříve je nutné smazat starou tabulku, a následně vytvořit novou s aktualizovanou strukturou. K tomuto účelu je možné využít příkaz „DROP ng_kniha_memory“ z rozbalovacího seznamu umístěného pod zaškrtávacím polem. Tento příkaz zobrazí databázový dotaz na smazání In-Memory tabulky, a databázovou tabulku se pokusí rovnou smazat.
    • Před smazáním In-Memory tabulek je důležité zazálohovat data uložená v těchto tabulkách, a tato data následně obnovit. K tomuto účelu je možné využít příkaz „EXPORT DATA FROM ng_kniha_memory TO 'Backup\ng_kniha_memory.xml'“ z rozbalovacího seznamu umístěného pod zaškrtávacím polem, a následně „IMPORT DATA TO ng_kniha_memory FROM 'Backup\ng_kniha_memory.xml'“ nebo „IMPORT DATA TO ng_kniha_memory FROM ng_kniha“.
  • Data z databázové tabulky číst pomocí pohledu
    • Zaškrtnutí tohoto pole určuje, zda má být pro čtení dat použitý databázový pohled se stejným identifikátorem jako má editační formulář, jen se slovem „_view“ na konci názvu. Zápis dat do pohledů není možný, proto je doporučeno v těchto editačních formulářích skrýt tlačítko „Uložit“. Při pokusu o uložení dat do pohledu dojde k chybě.
    • Pohledy se musí vytvářet ručně. K tomuto účelu je možné využít příkaz „CREATE ng_kniha_view“ z rozbalovacího seznamu umístěného pod zaškrtávacím polem.
      • Tento příkaz zobrazí databázový dotaz na vytvoření nového pohledu se stejnou strukturou jako má editační formulář, a databázový pohled se pokusí rovnou vytvořit.
      • Pohled vytvořený tímto příkazem má stejnou strukturu jako editační formulář, a proto je nutné jeho definici (CREATE VIEW) dodatečně upravit.
      • Výslednou definici je vhodné uložit do poznámky editačního formuláře, kde si ho NET Genium při příštím spuštění příkazu „CREATE ng_kniha_view“ vyhledá, a spustí ho v tomto znění.
    • Pohledy neumožňují dodatečnou změnu databázové struktury. Nejdříve je nutné smazat starý pohled, a následně vytvořit nový s aktualizovanou strukturou. K tomuto účelu je možné využít příkaz „DROP ng_kniha_view“ z rozbalovacího seznamu umístěného pod zaškrtávacím polem. Tento příkaz zobrazí databázový dotaz na smazání pohledu, a databázový pohled se pokusí rovnou smazat.
  • V cloudové variantě NET Genium Online se pole „Data z databázové tabulky číst/zapisovat pomocí In-Memory tabulky“ ani „Data z databázové tabulky číst pomocí pohledu“ nezobrazují — In-Memory tabulky ani databázové pohledy nejsou v cloudu k dispozici.

2.6.3. Příkazy

  • CREATE REPORT FROM ng_kniha – Vytvoření reportu délky stringů uložených v editačním formuláři
  • CREATE ng_kniha_memory – Vytvoření In-Memory tabulky
  • IMPORT DATA TO ng_kniha_memory FROM 'Backup\ng_kniha_memory.xml' – Import dat do In-Memory tabulky z XML souboru umístěného v adresáři „Backup“
  • IMPORT DATA TO ng_kniha_memory FROM ng_kniha – Import dat do In-Memory tabulky z hlavní databázové tabulky editačního formuláře
  • EXPORT DATA FROM ng_kniha_memory TO 'Backup\ng_kniha_memory.xml' – Export dat z In-Memory tabulky do XML souboru umístěného v adresáři „Backup“
  • DROP ng_kniha_memory – Smazání In-Memory tabulky
  • CREATE ng_kniha_view – Vytvoření pohledu
  • DROP ng_kniha_view – Smazání pohledu
  • TRUNCATE TABLE ng_kniha + ng_kniha_history – Smazání všech dat v databázové tabulce včetně záznamů historie, a nastavení čítače primárního klíče na počáteční hodnotu 1
  • TRUNCATE TABLE ng_kniha_history – Smazání všech záznamů historie, a nastavení čítače primárního klíče na počáteční hodnotu 1
  • RECREATE TABLE ng_kniha + ng_kniha_history – Zazálohování dat a opětovné vytvoření databázových tabulek včetně následného importu dat
  • Příkazy pro In-Memory tabulku se nabízejí jen u databáze MSSQL.
  • V cloudové variantě NET Genium Online se rozbalovací seznam příkazů nezobrazuje — žádný z uvedených příkazů není v cloudu k dispozici.

2.6.4. Index 1

  • Nastavení indexu na databázový sloupec „pid“ nebo sdruženého indexu na databázový sloupec „pform“ spolu se sloupcem „pid“.

2.6.5. Index 2

  • Nastavení indexu na libovolný seznam databázových sloupců editačního formuláře.
  • Do textového pole umístěného pod zaškrtávací položkou je možné definovat názvy (identifikátory) všech sloupců, které mají být ve sdruženém indexu – mají být součástí klíče indexu.

2.6.6. Smazat historii starší než

  • Nastavení počtu měsíců, během kterých je nutné uchovávat historii databázových záznamů tohoto editačního formuláře.
  • Není-li počet měsíců vyplněn, použije se výchozí nastavení 6 měsíců.
  • Nastavení samo o sobě historii automaticky nemaže – starší záznamy historie se smažou až jedním z níže uvedených způsobů.
  • Napravo vedle textového pole jsou umístěna dvě tlačítka:
    • Tlačítko „Smazat historii“ trvale smaže celou historii editačního formuláře bez ohledu na nastavený počet měsíců.
    • Tlačítko „starší než“ smaže záznamy historie starší, než je počet měsíců zadaný v textovém poli (bez zadání 6 měsíců).
  • Záznamy historie starší, než takto nastavené časové období je dále možné jednorázově smazat pomocí:
    • Menší ikony pro smazání historie záznamů z reportů. Detailní popis reportů je uveden v samostatné příručce Reporty.
    • Serverové funkce „DELETEHISTORY“.

2.6.7. C#/JavaScript

  • Pomocí tlačítka „C#/JavaScript“ se zobrazí textový report s příkladem v C# pro uložení záznamu do databázové tabulky přidružené k tomuto editačnímu formuláři.
  • Součástí reportu je seznam všech databázových ovládacích prvků v editačním formuláři.

2.6.8. Statistika

  • Statistika zobrazuje agregovanou informaci o využívání editačního formuláře napříč celou aplikací.
  • Pomocí tlačítka „Statistika“ se zobrazí detailní report všech míst, kde je editační formulář použitý nebo referencovaný, včetně možnosti otevření nastavení takového místa či ovládacího prvku.
  • Před každým smazáním editačního formuláře se doporučuje důkladně projít statistku editačního prvku, a eliminovat případná nedorozumění.
  • Před každým smazáním editačního formuláře se automaticky spustí vyhodnocení statistiky. Pokud je editační formulář někde v aplikaci používán nebo referencován, je nutné smazání editačního formuláře znovu potvrdit.

2.6.9. Logování

  • Pomocí tlačítka „Logování“ se zobrazí detailní report se záznamy o zobrazení editačního formuláře. Report obsahuje informace o:
    • datu a času zobrazení editačního formuláře,
    • uživateli, který editační formulář zobrazil,
    • době zpracování editačního formuláře,
    • datu a času zahájení zpracování,
    • datu a času dokončení zpracování,
    • velikosti výsledného HTML kódu vygenerovaného editačního formuláře,
    • informaci, zda se jedná o první načtení formuláře, nebo o jeho aktualizaci (postback).
  • Pro správné fungování logování je nutné mít v nastavení NET Genia na záložce „Ostatní“ aktivováno logování buď „Do databáze“, nebo „Do databáze a na disk“. Detailní popis je uveden v samostatné příručce Nastavení NET Genia.
  • Minimální zobrazovaný čas zpracování editačního formuláře je ve výchozím nastavení stanoven na 0 milisekund, zobrazují se tedy všechny záznamy zobrazení editačních formulářů včetně těch, jejichž zpracování trvalo 0 milisekund. Tento minimální čas je možné zvýšit nebo snížit změnou parametru „mintime“ v URL reportu.
  • Počet záznamů je ve výchozím nastavení omezen na 100 záznamů. Tento počet je možné ručně zvýšit nebo snížit změnou parametru „maxrows“ v URL reportu.

2.6.10. Historie

  • Pomocí tlačítka „Historie“ se zobrazí detailní report s jednotlivými záznamy sledování změn.

2.7. Tlačítka „Uložit“, „Smazat“ a „Zavřít“

  • Tlačítko „Uložit“ – Uložení změn v nastavení editačního formuláře.
  • Tlačítko „Smazat“ – Trvalé odstranění editačního formuláře. Smaže se editační formulář se všemi svými ovládacími prvky, jejich databázovými dotazy a skripty, databázová tabulka i tabulka historie. Soubory příloh uložených ve formuláři se nemažou. Systémový editační formulář smazat nelze.
  • Tlačítko „Zavřít“ – Zavření dialogu s nastavením editačního formuláře bez uložení změn.

3. Nastavení synchronizace

3.1. Nastavení serveru

3.1.1. Název

  • Název vzdáleného serveru, resp. NET Genia.

3.1.2. URL

  • Internetová adresa vzdáleného NET Genia (možno použít SSL komunikaci přes protokol „https“).

3.1.3. Heslo pro synchronizaci

  • Heslo pro synchronizaci nastavené na vzdáleném NET Geniu v nastavení NET Genia.

3.1.4. Intranet URL

  • Intranetová adresa vzdáleného NET Genia, na jehož záznamy budou uživatelé směrováni z e-mailových zpráv rozesílaných skriptem.

3.1.5. Jazyk

  • Jazyk, ve kterém budou vytvořeny odkazy v e-mailových zprávách, směrující uživatele na záznamy do NET Genia.

3.1.6. Možnosti

  • Ignorovat chyby SSL
    • Zaškrtnutí tohoto pole určuje, zda budou při komunikaci se vzdáleným NET Geniem přes protokol „https“ ignorovány chyby v SSL certifikátech.
  • Proxy Server
    • Zaškrtnutí tohoto pole určuje, zda bude pro komunikaci se vzdáleným NET Geniem používán Proxy Server.
  • Proxy URL
    • Adresa Proxy Serveru.
  • Přihlašovací jméno
    • Přihlašovací jméno pro komunikaci s Proxy Serverem.
  • Heslo
    • Heslo pro komunikaci s Proxy Serverem.

3.2. Nastavení synchronizace

3.2.1. Server

  • Název serveru, se kterým budou synchronizována data z databázové tabulky aktuálně otevřeného editačního formuláře.

3.2.2. Editační formulář

  • Editační formulář ve vzdáleném NET Geniu, se kterým budou synchronizována data z databázové tabulky aktuálně otevřeného editačního formuláře.
  • Změnou editačního formuláře se smažou změny, které čekají ve frontě na odeslání tímto propojením; e-maily, které tyto změny nesou, se zahodí také.

3.2.3. Podmínka synchronizace

  • Podmínka, která omezuje rozsah synchronizovaných dat pouze na určitou množinu.
  • Podmínka se vyhodnocuje při každém uložení záznamu, včetně úpravy hodnoty v nahlížecí tabulce, hromadných změn a jednorázové synchronizace. Podmínka nad proměnnou skriptu se mimo skript (např. při úpravě hodnoty v nahlížecí tabulce) považuje za splněnou.
  • Podmínka se nevztahuje na smazání záznamu. Záznam, který přestane podmínku splňovat, na protistraně zůstane. Smazání se proto odešle podle ID i u záznamu, který se na protistranu nikdy nepřenesl (nesplnil podmínku nebo vznikl před nastavením synchronizace), a na protistraně smaže záznam se stejným ID, i když jde o jiný záznam.

3.2.4. Sloupce

  • Nastavení sloupců určuje, jaký sloupec (nalevo) vzdáleného editačního formuláře bude synchronizován, a s jakým sloupcem (napravo) v aktuálně otevřeném editačním formuláři.
  • Každý sloupec může obsahovat podmínku, pouze při jejímž splnění bude hodnota sloupce synchronizována.

3.3. Jednorázová synchronizace všech dat

  • Jednorázová synchronizace odešle všechny záznamy databázové tabulky se všemi synchronizovanými sloupci pod jejich ID; záznam se stejným ID na protistraně přepíše a záznamy, které na zdroji nejsou, na protistraně nemaže.
  • Pro jednorázovou synchronizaci je nastaven maximální limit 10 000 záznamů. Při jeho překročení se neodešle nic. Limit lze navýšit pomocí konfiguračního souboru „MaxSyncCount.txt“. Detailní popis konfiguračních souborů je uveden v samostatné příručce Nastavení NET Genia.

4. Chování editačního formuláře

4.1. Otevření záznamu

  • Při otevření nového záznamu se ovládacím prvkům vyplní výchozí hodnoty. U existujícího záznamu se vyplní pouze výchozí hodnoty ovládacích prvků s volbou „Vyplnit výchozí hodnotu při každém otevření editačního formuláře“ a hodnoty prvků „AutoSum“.
  • Povinný rozbalovací seznam a povinný cizí klíč bez vyplněné hodnoty dostanou při otevření první položku své nabídky, a to i u existujícího záznamu.
  • Po otevření se spustí skript „OnAfterOpen“ – v uživatelském režimu jen tehdy, zobrazí-li se uživateli aspoň jeden ovládací prvek formuláře. U uloženého záznamu se hodnoty, které skript uloží serverovou funkcí SCHEDULESAVE, a přepočtené hodnoty prvků „AutoSum“ zapíší do databáze již při jeho otevření, bez uložení uživatelem. Funkce SCHEDULESAVE bez parametru záznam při otevření uloží celý, včetně validace a skriptů „OnBeforeSave“ a „OnAfterSave“; nový záznam tím založí.
  • Otevřením smazaného nebo neexistujícího záznamu se uživatel přesměruje na stránku s informací o smazaném záznamu, má-li oprávnění k některému ovládacímu prvku formuláře. Uživateli bez oprávnění k ovládacím prvkům se formulář zobrazí stejně jako u existujícího záznamu.

4.2. Uložení záznamu

  • Uložení záznamu probíhá v tomto pořadí: *# validace ovládacích prvků, včetně skrytých ovládacích prvků a ovládacích prvků jen ke čtení, *# vyplnění výchozích hodnot s volbou „Vyplnit výchozí hodnotu před každým uložením záznamu do databáze“, *# zkopírování hodnoty cizího klíče se zaškrtnutou volbou „Při uložení záznamu zkopírovat hodnotu do PID“ do sloupce „pid“, *# skript „OnBeforeSave“, *# vygenerování výchozích hodnot typu „Max + 1“, „Max + 1 (lokální)“, „Max + 1: jednotná řada“ a „Max + 1: jednotná řada (lokální)“ (jen u datových typů „Celé číslo“ a „Velké celé číslo“) – u nového záznamu vždy, u uloženého záznamu jen se zaškrtnutou volbou „Vyplnit výchozí hodnotu při každém otevření editačního formuláře“ nebo „Vyplnit výchozí hodnotu před každým uložením záznamu do databáze“, *# uložení záznamu do databáze, *# skript „OnAfterSave“, *# odeslání e-mailů naplánovaných ve skriptech a přesměrování naplánované ve skriptu „OnAfterSave“.
  • Skript „OnBeforeSave“ nového záznamu hodnotu typu „Max + 1“ ještě nezná. Hodnotu, kterou skript do takového ovládacího prvku přiřadí, vygenerovaná hodnota přepíše – u nového záznamu vždy, u uloženého záznamu se zaškrtnutou jednou z voleb uvedených výše.
  • Do databáze se ukládají pouze ovládací prvky, jejichž hodnota se od otevření formuláře změnila. Změnil-li mezitím jiný uživatel stejný ovládací prvek, přepíše ho hodnota z formuláře; před souběžnými úpravami chrání pouze zamykání záznamů.
  • Tlačítko „Uložit“ uloží záznam a vrátí uživatele zpět. Tlačítko „Uložit a nový“ uloží záznam, spustí skript „OnBeforeOpen“ a otevře nový záznam se stejnou vazbou na rodičovský záznam. Tlačítko „Uložit a pokračovat v editaci“ uloží záznam a znovu ho otevře se zachovanou pozicí posunutí a vybranou záložkou.
  • Chyba ve skriptu „OnBeforeSave“ záznam neuloží a uživatel zůstane ve formuláři s vyplněnými hodnotami. Chyba ve skriptu „OnAfterSave“ se zobrazí až po přesměrování; záznam už zůstane uložený.

4.3. Formulář pouze pro čtení

  • Editační formulář se zobrazí pouze pro čtení, nemá-li uživatel oprávnění záznam měnit (viz „Práva na editaci“), je-li záznam zamčený jiným uživatelem, nebo neobsahuje-li formulář žádný databázový ovládací prvek, ke kterému má uživatel oprávnění.
  • Hodnoty ovládacích prvků odeslané z formuláře pouze pro čtení se nepoužijí. Není-li důvodem zámek jiného uživatele, pracují tlačítka „Button“, která záznam ukládají – krokem „1. Uložit záznam“ nebo „3. Uložit záznam“ u typů „Otevřít nahlížecí stránku“ a „Skript“, krokem „1. Uložit záznam“ u typu „Otevřít editační formulář“, nebo svým skriptem –, s hodnotami uloženými v databázi a s hodnotami, které nastaví skript. Stejně záznam uloží i funkce „SCHEDULESAVE()“ bez parametru ve skriptu „OnAfterOpen“.
  • Je-li záznam zamčený jiným uživatelem, zobrazí se po otevření formuláře hlášení o uzamčení záznamu, tlačítka ovládacích prvků i hromadná editace v nahlížecích tabulkách formuláře se zakážou a server uložení i smazání záznamu, včetně uložení skriptem tlačítka, odmítne hlášením o uzamčení záznamu.
  • Funkce „form_Save“, „control_Save“ a „controls_Save“ z JavaScriptu ve formuláři pouze pro čtení záznam neuloží.

4.4. Tlačítko „Zpět“

  • Tlačítko „Zpět“ i uložení záznamu vrací uživatele tam, odkud byl editační formulář otevřen, v tomto pořadí: *# do rodičovského editačního formuláře se zachovanou pozicí posunutí a vybranou záložkou, byl-li záznam otevřen z jiného editačního formuláře, *# do výběrového dialogu, byl-li záznam otevřen z něj, *# na hlavní stránku s portlety, byl-li záznam otevřen z portletu, *# na nahlížecí stránku, ze které byl záznam otevřen, *# v administrátorském režimu na nový záznam téhož editačního formuláře, *# jinak na hlavní stránku.
  • Zobrazuje-li formulář dostupné tlačítko „Uložit“ a obsahuje-li neuložené změny, vyžádá si tlačítko „Zpět“ před návratem potvrzení opuštění formuláře. Nepotvrdí-li ho uživatel, zůstane ve formuláři.

4.5. Chyby, externí funkce a limity

  • Při každém požadavku na editační formulář se spustí externí funkce NETGenium.OpenForm, s výjimkou otevření smazaného nebo neexistujícího záznamu. Její chyba ukončí načítání celého formuláře. Detailní popis je uveden v samostatné příručce Externí funkce.
  • Skript tlačítka spuštěný kliknutím, skript prvku „File“ při vytvoření dokumentu ze šablony a skript nového záznamu z prvků „Planner“ a „TimeTable“ se zaznamenají do logu „Scripts60sec“, trvá-li jejich zpracování 60 vteřin a déle a neskončí-li přesměrováním naplánovaným funkcí „SCHEDULE...“. Skripty serverových událostí editačního formuláře, skripty naplánované funkcí „SCHEDULESCRIPT“ a skripty naplánovaných úloh vlastní záznam v logu nemají.
  • V cloudové variantě NET Genium Online je doba zpracování jednoho skriptu omezena na 10 vteřin; po jejím překročení se skript přeruší chybou.

4.6. Kopírování editačního formuláře

  • Kopii editačního formuláře vytvoří ikona pro kopírování v navigační oblasti administrátorského režimu. Zkopíruje se struktura formuláře, ovládací prvky, skripty, databázové dotazy, práva a spoluvlastníci. Data ani nastavení synchronizace se nekopírují.
  • Systémový editační formulář zkopírovat nelze.