1. Základní informace

1.1. Popis ovládacího prvku

Každý editační formulář automaticky obsahuje ovládací prvek „ActionButtons“, který se skládá ze třech základních tlačítek potřebných pro práci s formulářem – „Uložit“, „Smazat“ a „Zpět“.

2. Seznam záložek v dialogu nastavení ovládacího prvku

  • Obecné – Nastavení obecných vlastností
  • Uložit – Nastavení tlačítka „Uložit“
  • Smazat – Nastavení tlačítka „Smazat“
  • Zpět – Nastavení tlačítka „Zpět“
  • Pod skriptem každé události („OnAfterOpen“, „OnBeforeSave“, „OnAfterSave“, „OnBeforeOpen“, „OnBeforeDelete“, „OnAfterDelete“) je zaškrtávací pole „Zakázat skript“. Jeho zaškrtnutím se spouštění skriptu vypne, ať je událost vyvolána v editačním formuláři, nebo jinak (například hromadnou změnou v nahlížecí tabulce); skript zůstává uložený.

2.1. Záložka „Obecné“

2.1.1. Možnosti

  • Skrýt tlačítko „Uložit“
    • Zaškrtnutí tohoto pole určuje, zda má být v editačním formuláři skryté tlačítko „Uložit“.
    • Skrytí tlačítka není zabezpečením proti změně záznamu – záznam lze dál uložit tlačítky „Uložit a nový“, „Uložit a pokračovat v editaci“ nebo tlačítkem se skriptem. Kdo smí záznam měnit, určují „Práva na editaci“ editačního formuláře.
  • Skrýt tlačítko „Smazat“
    • Zaškrtnutí tohoto pole určuje, zda má být v editačním formuláři skryté tlačítko „Smazat“.
    • Na rozdíl od tlačítka „Uložit“ skrytí zakáže smazání záznamu v editačním formuláři i na straně serveru a hromadné mazání záznamů v nahlížecí tabulce pak zůstane dostupné jen administrátorovi. Smazání záznamu příkazem skriptu tím zakázané není.
  • Skrýt tlačítko „Zpět“
    • Zaškrtnutí tohoto pole určuje, zda má být v editačním formuláři skryté tlačítko „Zpět“.
  • Zobrazit tlačítko „Uložit a pokračovat v editaci“
    • Zaškrtnutí tohoto pole určuje, zda má být v editačním formuláři zobrazené tlačítko „Uložit a pokračovat v editaci“.
  • Zobrazit tlačítko „Uložit a nový“
    • Zaškrtnutí tohoto pole určuje, zda má být v editačním formuláři zobrazené tlačítko „Uložit a nový“.
    • Text tlačítka může být nastaven na vlastní.

2.1.2. OnAfterOpen

  • Skript, který se provede po otevření záznamu v editačním formuláři.
  • Skript se spustí jen při prvním načtení editačního formuláře. Po odeslání formuláře – například po stisknutí tlačítka nebo po neúspěšném uložení – se znovu nespustí.
  • Databázové změny provedené tímto skriptem se potvrdí ihned po jeho dokončení v samostatné databázové transakci.
  • Navigace naplánovaná v tomto skriptu (SCHEDULEFORM, SCHEDULEVIEWPAGE, SCHEDULEURL, SCHEDULEPORTLETS) a funkce „HIDEFORM“ se provedou jen v uživatelském režimu.

2.2. Záložka „Uložit“

2.2.1. JavaScript

  • Volání funkce (nebo jiný javascriptový výraz) bez středníku na konci, například „beforeSave()“, které se vyhodnotí po stisknutí tlačítka „Uložit“. Výsledek se použije jako podmínka, proto se funkce zapisuje i se závorkami – samotný název funkce bez závorek funkci nezavolá. Identifikátory „#ng_...#“ se ve výrazu nahradí stejně jako v ostatním JavaScriptu editačního formuláře.
  • Je-li návratová hodnota funkce hodnota „true“, dojde ke spuštění serverového skriptu „OnBeforeSave“.
  • Je-li návratová hodnota funkce hodnota „false“, nedojde ke spuštění serverového skriptu „OnBeforeSave“, a nedojde k uložení záznamu.
  • Výraz se vyhodnotí i před uložením záznamu tlačítky „Uložit a nový“, „Uložit a pokračovat v editaci“ a „Synchronizovat“, před automatickým uložením dosud neuloženého záznamu (například při zakládání vnořeného záznamu z nahlížecí tabulky formuláře) a po stisknutí tlačítka „Button“ typu „Otevřít editační formulář“ nebo „Tisk do šablony“, u typů „Otevřít nahlížecí stránku“ a „Skript“ jen se zaškrtnutým krokem „1. Uložit záznam“ nebo „3. Uložit záznam“. U tlačítka „Button“ se výraz vyhodnotí za kódem z pole „Klient“, a to jen tehdy, nevrátí-li tento kód hodnotu příkazem „return“ dřív.

2.2.2. OnBeforeSave

  • Skript, který se provede před uložením záznamu do databáze.
  • Validace ovládacích prvků proběhne ještě před spuštěním tohoto skriptu. Povinné pole proto nelze doplnit hodnotou až v tomto skriptu – validace ho vyhodnotí jako nevyplněné.
  • Navigace naplánovaná v tomto skriptu (SCHEDULEFORM, SCHEDULEVIEWPAGE, SCHEDULEURL, SCHEDULEPORTLETS a další) se neprovede. Přesměrování po uložení se plánuje ve skriptu „OnAfterSave“.
  • Skript „OnBeforeSave“ a vlastní uložení záznamu probíhají v jedné databázové transakci. Chyba skriptu zabrání uložení záznamu a vrátí zpět také databázové změny provedené tímto skriptem.
  • Funkce „SKIPSAVE()“ se chová jinak než chyba: přeskočí pouze vlastní uložení záznamu, databázové změny provedené skriptem se potvrdí a následně se spustí „OnAfterSave“.
  • Spustí-li se skript „OnBeforeSave“ jinak než uložením editačního formuláře – hromadnou změnou nebo změnou hodnoty přímo v nahlížecí tabulce, importem z Excelu nebo serverovou funkcí „OBSOAS“ – funkce „SKIPSAVE()“ změny zapsané příkazy skriptu („Uložit hodnotu do databáze“, „Nový záznam“, „Smazat záznam“ a další zapisující příkazy) neprovede. Provedou se jen ty z nich, které skript potvrdil funkcí „COMMIT()“.
  • Při hromadné změně hodnoty z nahlížecí tabulky se chyba skriptu u jednotlivého záznamu uživateli nezobrazí – záznam se nezmění a zpracování pokračuje dalším záznamem.

2.2.3. OnAfterSave

  • Skript, který se provede po uložení záznamu do databáze.
  • Spustí se pouze po úspěšném potvrzení transakce, která obsahuje skript „OnBeforeSave“ a vlastní uložení záznamu.
  • Skript „OnAfterSave“ běží v nové databázové transakci. Jeho chyba vrátí zpět databázové změny provedené tímto skriptem, ale již uložený záznam neobnoví do původního stavu.
  • Přiřazení hodnoty do ovládacího prvku aktuálního záznamu (příkaz „Přiřadit hodnotu“) se v tomto skriptu do databáze neuloží, protože záznam je již uložený. Hodnotu aktuálního záznamu je nutné zapsat příkazem „Uložit hodnotu do databáze“.

2.2.4. OnBeforeOpen

  • Skript, který se provede před otevřením nového záznamu v editačním formuláři.
  • Skript „OnBeforeOpen“ se provede po stisknutí tlačítka „Uložit a nový“ v editačním formuláři.
  • Navigace naplánovaná v tomto skriptu (SCHEDULEFORM, SCHEDULEURL a další) se neprovede. Skončí-li skript chybou, nový záznam se neotevře.

2.3. Záložka „Smazat“

2.3.1. JavaScript

  • Volání funkce (nebo jiný javascriptový výraz) bez středníku na konci, například „beforeDelete()“, které se vyhodnotí po stisknutí tlačítka „Smazat“. Samotný název funkce bez závorek funkci nezavolá.
  • Je-li návratová hodnota funkce hodnota „true“, dojde ke spuštění serverového skriptu „OnBeforeDelete“.
  • Je-li návratová hodnota funkce hodnota „false“, nedojde ke spuštění serverového skriptu „OnBeforeDelete“, a nedojde ke smazání záznamu.
  • Je-li funkce vyplněna, nahradí výchozí dotaz na potvrzení smazání záznamu – výchozí dotaz se pak nezobrazí.

2.3.2. Možnosti

  • Vždy povolit mazání vlastníkovi nebo spoluvlastníkovi záznamu
    • Zaškrtnutí tohoto pole určuje, zda má být povoleno mazání záznamu vlastníkovi nebo spoluvlastníkovi záznamu bez ohledu na existenci dalších ovládacích prvků ve formuláři, na které vlastník nebo spoluvlastník záznamu nemá právo.

2.3.3. OnBeforeDelete

  • Skript, který se provede před smazáním záznamu z databáze.
  • Skript „OnBeforeDelete“ a vlastní smazání záznamu probíhají v jedné databázové transakci. Chyba skriptu zabrání smazání záznamu a vrátí zpět také databázové změny provedené tímto skriptem.
  • Funkce „SKIPDELETE()“ se chová jinak než chyba: přeskočí vlastní smazání záznamu a následně se spustí „OnAfterDelete“. Změny zapsané příkazy skriptu („Uložit hodnotu do databáze“, „Nový záznam“, „Smazat záznam“ a další zapisující příkazy) se přitom neprovedou; provedou se jen ty z nich, které skript potvrdil funkcí „COMMIT()“.
  • Přesměrování po smazání se plánuje ve skriptu „OnAfterDelete“. Z navigace naplánované v tomto skriptu se provedou jen funkce SCHEDULEBACK a SCHEDULEURL, a to jen tehdy, když je spouštění skriptu „OnAfterDelete“ zakázané.

2.3.4. OnAfterDelete

  • Skript, který se provede po smazání záznamu z databáze.
  • Spustí se pouze po úspěšném potvrzení transakce, která obsahuje skript „OnBeforeDelete“ a vlastní smazání záznamu.
  • Skript „OnAfterDelete“ běží v nové databázové transakci. Jeho chyba vrátí zpět databázové změny provedené tímto skriptem, ale již smazaný záznam neobnoví.

2.4. Záložka „Zpět“

2.4.1. JavaScript

  • Volání funkce (nebo jiný javascriptový výraz) bez středníku na konci, například „beforeBack()“, které se vyhodnotí po stisknutí tlačítka „Zpět“. Samotný název funkce bez závorek funkci nezavolá.
  • Je-li návratová hodnota funkce hodnota „true“, dojde k přesměrování uživatele zpět na místo, odkud byl editační formulář s aktuálně otevřeným záznamem vyvolán.
  • Je-li návratová hodnota funkce hodnota „false“, nedojde k přesměrování uživatele zpět.

2.5. Tlačítka „Uložit“ a „Zavřít“

  • Tlačítko „Uložit“ – Uložení změn v nastavení ovládacího prvku.
  • Tlačítko „Zavřít“ – Zavření dialogu s nastavením ovládacího prvku bez uložení změn.

3. Příklady

3.1. Javascriptové funkce

  • attachEvent2(window, 'load', function() { var o = el('btSave'); if (o != null) o.style.display = 'none'; });
  • attachEvent2(window, 'load', function() { var o = el('btDelete'); if (o != null) o.style.display = 'none'; });
  • attachEvent2(window, 'load', function() { var o = el('btBack'); if (o != null) o.style.display = 'none'; });