1. Základní informace
- Skript je programový kód, který se spouští na straně serveru.
- Skript se může spouštět:
- v serverových událostech editačních formulářů,
- OnBeforeOpen – provádí se před otevřením editačního formuláře po kliknutí na tlačítko „Uložit a nový“,
- OnAfterOpen – provádí se po otevření editačního formuláře,
- OnBeforeSave – provádí se před uložením záznamu do databáze,
- OnAfterSave – provádí se po uložení záznamu do databáze,
- OnBeforeDelete – provádí se před smazáním záznamu z databáze,
- OnAfterDelete – provádí se po smazání záznamu z databáze,
- po stisknutí tlačítka v editačním formuláři,
- po stisknutí tlačítka na nahlížecí stránce,
- při pokusu o vytvoření nového záznamu z ovládacích prvků „TimeTable“ a „Planner“,
- při vytvoření dokumentu položkou „Nový ze šablony“ ovládacího prvku „File“, je-li na záložce „Tisk do šablony“ zaškrtnuté pole „Spustit skript“ – skript je společný s tlačítkem prvku. Detailní popis je uveden v samostatné příručce Editační formulář – File.
- Odkaz na skript je vždy součástí dialogu nastavení ovládacího prvku.
- Nejčastěji jde o ovládací prvek „ActionButtons“ (serverové události editačního formuláře) nebo „Button“ (tlačítka v editačních formulářích a na nahlížecích stránkách).
- Odkaz je označen jako „Upravit skript (počet řádek skriptu)“ a otevírá grafický návrhář skriptů.
- Skript se skládá z číslovaných řádků, které jsou vyhodnocovány sekvenčně shora dolů.
- Každý řádek skriptu obsahuje jednu instrukci určující provedení konkrétního příkazu.
- NET Genium vyhodnocuje skript řádek po řádce. Obecné programové bloky nepodporuje; příkaz „Cyklus“ však používá blok ohraničený příkazem „Další...“.
1.1. Základní skriptové příkazy
- Deklarace proměnné
- Definuje datový typ skriptové proměnné.
- Pokud již proměnná existuje nebo obsahuje hodnotu, dojde ke změně jejího datového typu a nastavení hodnoty na databázovou hodnotu „null“.
- Načtení hodnoty z databázového dotazu
- Načte hodnotu z databázového dotazu a uloží ji do proměnné nebo do databázového ovládacího prvku.
- Pokud již proměnná existuje, její datový typ i hodnota jsou přepsány.
- Načítá-li se do databázového ovládacího prvku typu Date sloupec ovládacího prvku „AutoSum“, převede se hodnota z binární reprezentace data na datum; nulová nebo záporná hodnota se uloží jako databázová hodnota „null“. Proměnná přebírá datový typ sloupce, takže v ní hodnota prvku „AutoSum“ zůstane číslem.
- Uložení proměnné zpět do databáze
- Uloží hodnoty proměnné zpět do databáze na místo, odkud byly načteny.
- Proměnná nesmí změnit počet svých hodnot (např. seskupením pomocí „GROUP(#A#)“).
- Načtení více hodnot z databázového dotazu
- Načte více sloupců z databázového dotazu a uloží je do proměnných nebo ovládacích prvků.
- Pro sloupec ovládacího prvku „AutoSum“ platí totéž co u příkazu „Načtení hodnoty z databázového dotazu“ – do ovládacího prvku typu Date se hodnota převede na datum, ale jen bez aritmetického operátoru; s ním skončí přiřazení chybou neshody datových typů.
- Cyklus
- Provede opakování bloku skriptu ohraničeného příkazem „Další...“ pro každý prvek řídící proměnné.
- Skript, ve kterém příkaz „Cyklus“ nemá párový příkaz „Další...“ nebo příkaz „Další...“ nemá svůj příkaz „Cyklus“, se vůbec nespustí – neprovede se ani žádný řádek před cyklem – a skončí chybou.
- Pokud proměnná neobsahuje žádné prvky, cyklus se neprovede.
- Během cyklu se jako jednoprvková chová řídící proměnná, a byla-li načtena z databázového dotazu, také proměnné načtené týmž příkazem jako ona. Ostatní proměnné s polem hodnot zůstávají i v cyklu polem hodnot. Detailní popis chování proměnných v cyklu je uveden v samostatné příručce Práce s proměnnými ve skriptu.
- Hodnoty „null“ jsou v cyklu automaticky přeskočeny.
- Jako řídící proměnná se doporučuje primární klíč „id“.
- Přiřazení hodnot
- Přiřazuje jednu hodnotu nebo matematický výraz do proměnné nebo ovládacího prvku.
- U polí hodnot se operace provádí nad všemi prvky.
- Přiřazuje-li se do ovládacího prvku nebo proměnné typu Date hodnota ovládacího prvku „AutoSum“, převede se z binární reprezentace data na datum; nulová nebo záporná hodnota se přiřadí jako databázová hodnota „null“. Platí to jen bez aritmetického operátoru – s ním skončí přiřazení chybou neshody datových typů.
- Porovnání hodnot
- Porovnává hodnoty proměnných nebo hodnoty zadané uživatelem.
- Podmínky testující (ne)vyplněnost hodnoty musí u textových hodnot počítat s oběma podobami prázdné hodnoty – s prázdným řetězcem i s databázovou hodnotou „null“ (složená podmínka: hodnota rovná se „“ nebo hodnota není definováno). Detailní popis testu na (ne)vyplněnou hodnotu je uveden v samostatné příručce Práce s proměnnými ve skriptu.
- Další příkazy
- Skok na řádek
- Vyvolání přerušení
- Vedle textu přerušení lze vybrat databázový ovládací prvek editačního formuláře. Zobrazí-li se po přerušení editační formulář s tímto prvkem a je-li prvek vidět, posune se formulář na něj a do prvku „TextBox“ nebo „TextArea“ vloží kurzor. Leží-li prvek na jiné záložce nebo je skrytý, zůstane formulář na původní pozici.
- Odeslání e-mailu
- Smazání záznamů z databáze podle dotazu – smažou se všechny záznamy, které dotaz vrátí, kromě systémových záznamů; ty se vynechají bez chybového hlášení
- Přesměrování uživatele do editačního formuláře (dostupné pouze v OnBeforeOpen, OnAfterSave, OnAfterDelete) – příkaz ukončí běh skriptu a řádky za ním se neprovedou; patří proto na konec skriptu. Ve skriptu „OnBeforeOpen“ už uživatel nový záznam otevírá, takže tam příkaz jen ukončí skript. Ve skriptu „OnAfterSave“ se přesměrování provede jen po uložení tlačítkem „Uložit“ nebo „Uložit a pokračovat v editaci“; po uložení jinou cestou (tisk do šablony, skript tlačítka, „Uložit a nový“) se neprovede
- Vytvoření nových záznamů v databázi
- Příkaz může mít jako zdroj dat databázový dotaz. Čte-li aspoň jedno přiřazení sloupec tohoto dotazu, založí se jeden nový záznam za každý záznam, který dotaz vrátí; nevrátí-li dotaz žádný záznam, nezaloží se nic. Jinak se dotaz nespustí a založí se jediný záznam. Příkaz bez jediného přiřazení nezaloží žádný záznam.
- Vlastníkem nového záznamu je uživatel, který skript spustil. Nepřiřadí-li příkaz hodnoty „pid“ a „pform“, zůstane záznam bez vazby na rodičovský záznam.
- Výchozí hodnoty ovládacích prvků se nedoplňují. Jedinou výjimkou je textové pole typu Integer nebo Long s výchozí hodnotou „Max + 1“, „Max + 1 (lokální)“, „Max + 1: jednotná řada“ nebo „Max + 1: jednotná řada (lokální)“, kterému příkaz hodnotu nepřiřadí nebo přiřadí prázdnou hodnotu – to dostane další číslo řady. Všechny ostatní hodnoty je nutné přiřadit v příkazu.
- Prázdná hodnota přiřazená do sloupce jiného datového typu než String se uloží jako databázová hodnota „null“.
- Přiřadí-li příkaz do sloupce typu Date hodnotu ovládacího prvku „AutoSum“ (z editačního formuláře nebo ze sloupce zdrojového dotazu), převede ji z binární reprezentace data na datum; nulová nebo záporná hodnota se uloží jako databázová hodnota „null“. Smysl to má jen u prvku „AutoSum“, který ze sloupce s datumem počítá funkci Průměr, MAX nebo MIN, a jen bez aritmetického operátoru.
- Uložení jedné nebo více hodnot do databáze
- Komentář (včetně volání externích funkcí)
- Serverové a externí funkce zapsané do pole pro komentář vykoná jen příkaz „33. Komentář“. Pole pro komentář, které mají i příkazy 1., 2., 4., 9. a 27.–32., je jen popisná poznámka – funkce zapsané do něj se neprovedou.
1.2. Charakter skriptovacího jazyka
- Skript NET Genium je deklarativní, řádkově vyhodnocovaný jazyk.
- Podporuje deklarativní cyklus a řízené podmíněné větvení pomocí podmíněných variant příkazů a příkazu „Skok na řádek“.
- Skok smí vést pouze na kterýkoli z následujících (pozdějších) řádků nebo na konec skriptu; zpětné skoky nejsou povoleny. Skok zevnitř cyklu ven, i z několika vnořených cyklů najednou, je povolený; skok do těla jiného cyklu (za jeho příkaz „Cyklus“) podporovaný není. Logiku, kterou nelze vyjádřit dostupnými příkazy, je nutné realizovat pomocí externích funkcí v jazyce C#.
1.3. Spouštění skriptu mimo webové rozhraní
- Skript přiřazený tlačítku na nahlížecí stránce lze spustit i externě pomocí programu „RunScript.exe“.
- Program je umístěn v adresáři „NETGenium\bin“ na serveru.
- Program „RunScript.exe“ není dostupný v cloudové variantě NET Genium Online — k adresářům cloudového serveru nemá zákazník přístup.
1.4. Chyby a přerušení skriptu
- Během provádění skriptu může dojít k chybě nebo k přerušení.
- Ve všech případech dojde k ukončení skriptu, návratu do původního kontextu a zobrazení chybového hlášení uživateli.
- U skriptů „OnBeforeSave“ a „OnBeforeDelete“ přerušení znamená zamezení uložení nebo smazání záznamu.
- Přerušení vrátí zpět jen databázové změny, které skript dosud nepotvrdil. V databázi zůstanou změny potvrzené funkcí „COMMIT()“, zápisy externích funkcí přes vlastní databázový příkaz a zápisy serverových funkcí, které do databáze zapisují samy – například „OBSOAS“, „DELETEDATA“, „DELETEHISTORY“, „UPDATEAUTOSUM“, „COPYATTACHMENT“, „CREATEATTACHMENT“, „RENAMEATTACHMENT“, „RESETUSERPASSWORD“, „SENDUSERPASSWORD“ a „SENDCHATMESSAGE“.
- Přerušení nevrací hodnoty, které skript před přerušením přiřadil do ovládacích prvků aktuálního záznamu. Zobrazí-li se po přerušení editační formulář, obsahuje tyto hodnoty a další uložení záznamu je uloží.
- Příkaz „Odeslat e-mail“ ve skriptech „OnBeforeSave“ a „OnAfterSave“ zařadí zprávu k odeslání, které proběhne až po uložení záznamu. V ostatních skriptech se zpráva odešle okamžitě, takže ji pozdější přerušení skriptu nevrátí.
- V cloudové variantě NET Genium Online je délka běhu skriptu omezena na 10 vteřin. Po překročení limitu se skript ukončí chybou „Časový limit vypršel! Maximální délka trvání skriptu je 10 vteřin.“ Limit se ověřuje před zahájením každého dalšího řádku skriptu – rozběhnutý řádek se dokončí a chyba nastane až před následujícím řádkem; přesáhne-li limit poslední řádek skriptu, chyba nenastane.
1.5. Vymezení skriptovacího jazyka
- Skriptovací jazyk NET Genium je uzavřený a omezený jazyk určený výhradně k řízení aplikační logiky na straně serveru. Skript může používat pouze výše uvedené typy proměnných, příkazy, operátory, serverové funkce a externí funkce. Jakékoliv jiné konstrukce, funkce, operátory, datové typy, návratové hodnoty, programové bloky nebo jazykové prvky nejsou ve skriptu podporovány a nelze je použít. Pokud požadovanou funkcionalitu není možné realizovat kombinací dostupných skriptových příkazů, proměnných a serverových funkcí, musí být implementována formou externí funkce napsané v jazyce C#.
1.6. Příkaz „Odeslat e-mail“
- Je-li zadáno více příjemců nebo proměnná se seznamem hodnot, odejde zpráva všem příjemcům ve skrytých kopiích; volba „Zakázat odesílání ve skrytých kopiích“ je ponechá v poli příjemce.
- Prázdný příjemce zadaný proměnnou nebo ovládacím prvkem skript přeruší hláškou „Zpráva musí obsahovat příjemce.“. Vyprázdní-li se až dosazením hodnot příjemce zapsaný textem a nezbude ani kopie, odešle se zpráva na servisní e-mailovou adresu z Nastavení NET Genia a do předmětu se vloží „NG NO-RCPT:“.
- Neplatné adresy příjemců a kopie (například jméno místo e-mailové adresy) se vynechají. Jsou-li neplatné všechny zadané adresy, zpráva se na servisní e-mailovou adresu nepřesměruje a neodešle se – uloží se do adresáře „SMTP“ a program „ResendEmlFiles.exe“ ji neodešle ani později (chyba „No recipients“).
- Prázdný odesílatel skript přeruší hláškou „Zpráva musí obsahovat odesílatele.“; je-li odesílatel zapsaný textem a po dosazení hodnot prázdný, použije se výchozí odesílatel všech zpráv.
- Volba „Odeslat pouze při změně dat“ se uplatní jen ve skriptech „OnBeforeSave“ a „OnAfterSave“: zpráva se neodešle, nezměnila-li se žádná hodnota záznamu. Za změnu se nepovažuje hodnota vyplněná výchozí hodnotou před každým uložením ani změna prázdné hodnoty na prázdný text.
- Volba „Vložit odkaz na záznam“ vloží odkaz jen u uloženého záznamu.
- Zpráva se překládá do jazyka příjemců včetně kopií a skrytých kopií; jazyk příjemce se dohledá v uživatelském účtu podle e-mailové adresy a příjemci bez účtu se nepočítají.
- Mají-li všichni příjemci s účtem stejný jazyk, přeloží se do něj předmět, text nad a pod tělem zprávy, názvy vypsaných ovládacích prvků i jejich hodnoty.
- Nemá-li účet žádný z příjemců, přeloží se zpráva do jazyka uživatele, jehož akce e-mail odeslala — obvykle toho, jehož akce skript spustila.
- Mají-li příjemci s účtem různé jazyky, obsahují předmět, text nad a pod tělem zprávy a názvy vypsaných ovládacích prvků jen verze těchto jazyků oddělené „ / “; chybí-li některému z nich vlastní verze, obsahují i výchozí text. Hodnoty ovládacích prvků se přeloží do jazyka uživatele, jehož akce e-mail odeslala; jednotka za hodnotou se řídí jazyky příjemců stejně jako názvy prvků.
- Má-li některý příjemce účet bez nastaveného jazyka, obsahují předmět, text nad a pod tělem zprávy a názvy vypsaných ovládacích prvků všechny jazykové verze oddělené „ / “; hodnoty ovládacích prvků se přeloží do jazyka uživatele, jehož akce e-mail odeslala, jednotka za hodnotou se řídí jazyky příjemců stejně jako názvy prvků.
- Texty, které do zprávy doplňuje NET Genium, se podle jazyka příjemců nepřekládají: odkaz na záznam a označení přiloženého souboru jsou v jazyce uživatele, jehož akce e-mail odeslala, odkaz na záznam v propojené instalaci v jazyce nastaveném u propojení.
- Obsahuje-li předmět po dosazení hodnot zalomení řádku (typicky z víceřádkového textového pole), odejde zpráva s prázdným předmětem.
- Začíná-li předmět po dosazení hodnot vykřičníkem, za kterým následuje jiný znak než další vykřičník, vykřičník se z předmětu odstraní a zpráva vyžádá potvrzení o přečtení na adresu pro odpověď, a není-li zadaná, na adresu odesílatele.
- Ve skriptech „OnBeforeSave“ a „OnAfterSave“ odchází zprávy až po potvrzení transakce. Skončí-li skript „OnAfterSave“ chybou, zprávy, které zařadil k odeslání, neodejdou – kromě zpráv zařazených před voláním funkce „COMMIT()“; zprávy ze skriptu „OnBeforeSave“ ano. Skončí-li chybou skript „OnBeforeSave“ nebo samotné uložení záznamu, záznam se neuloží a neodejde žádná zpráva z tohoto skriptu, ani zpráva zařazená před voláním funkce „COMMIT()“.
2. Dialog návrháře skriptů
- Textová pole na řádcích skriptu určená pro hodnotu, sloupec a komentář je možné otevřít v prostorném víceřádkovém zadávacím poli na nové záložce. Po dvojitém kliknutí na vyplněné textové pole se pod ním zobrazí odkaz „Otevřít ... na nové záložce (v novém okně)...“, který otevře samostatné okno s víceřádkovým polem; hodnota uložená v tomto okně se přenese zpět do textového pole na řádku skriptu.
2.1. Rozbalovací seznam „Zadejte příkaz...“
- Rozbalovací seznam s výběrem typu příkazu, který bude vložen do skriptu na označené místo.
- 1. Deklarovat proměnnou
- 2. Přiřadit hodnotu z dotazu
- 3. Uložit proměnnou zpět do databáze
- 4. Přiřadit více hodnot z dotazu
- 5. Cyklus
- 6. Přiřadit hodnotu
- 7. Jestliže (výraz) přiřadit hodnotu
- 8. Jestliže (složený výraz) přiřadit hodnotu
- 9. Přejít na řádek
- 10. Jestliže (výraz) přejít na řádek
- 11. Jestliže (složený výraz) přejít na řádek
- 12. Vyvolat výjimku (přerušení)
- 13. Jestliže (výraz) vyvolat výjimku (přerušení)
- 14. Jestliže (složený výraz) vyvolat výjimku (přerušení)
- 15. Odeslat e-mail
- 16. Jestliže (výraz) odeslat e-mail
- 17. Jestliže (složený výraz) odeslat e-mail
- 18. Smazat záznam
- 19. Jestliže (výraz) smazat záznam
- 20. Jestliže (složený výraz) smazat záznam
- 21. Přesměrovat na nový záznam
- 22. Jestliže (výraz) přesměrovat na nový záznam
- 23. Jestliže (složený výraz) přesměrovat na nový záznam
- 24. Nový záznam
- 25. Jestliže (výraz) nový záznam
- 26. Jestliže (složený výraz) nový záznam
- 27. Uložit hodnotu do databáze
- 28. Jestliže (výraz) uložit hodnotu ...
- 29. Jestliže (složený výraz) uložit hodnotu ...
- 30. Uložit více hodnot do databáze
- 31. Jestliže (výraz) uložit více ...
- 32. Jestliže (složený výraz) uložit více ...
- 33. Komentář
- Příkazy 21.–23. nabízí návrhář jen ve skriptech „OnBeforeOpen“, „OnAfterSave“ a „OnAfterDelete“. V ostatních skriptech v seznamu chybí a čísla ostatních příkazů zůstávají stejná.
- Pod rozbalovacími seznamy je řada tlačítek s čísly příkazů. Kliknutí na tlačítko vloží příkaz s tímto číslem na označené místo stejně jako jeho výběr v seznamu „Zadejte příkaz...“.
2.2. Rozbalovací seznam rozsahu proměnných
- Rozbalovací seznam s výběrem rozsahu proměnných, které návrhář nabízí na jednotlivých řádcích skriptu pro ukládání hodnot.
- Rozsah určuje jen nabídku proměnných v návrháři skriptů – za běhu má skript k dispozici všechny proměnné. Rozsah nelze zúžit pod nejvyšší proměnnou, kterou skript používá – návrhář ho v takovém případě automaticky rozšíří. Zápis skriptu přes MCP server nebo utilitu ai-model rozsah nemění; návrhář ho srovná při nejbližším otevření skriptu.
- Nad seznamem je popisek „Proměnné a funkce“, společný se seznamem popsaným v kapitole 2.3. Po najetí myší na popisek se zobrazí proměnné zvoleného rozsahu, které skript dosud nepoužívá („Volné proměnné“).
- Detailní popis proměnných je uveden v samostatné příručce Proměnné.
2.3. Rozbalovací seznam „Proměnné a funkce“
- Rozbalovací seznam s výběrem proměnných a funkcí, které je možné používat na jednotlivých řádcích skriptu – skriptových proměnných zvoleného rozsahu, systémových proměnných, externích funkcí, funkcí pro vytvoření hodnoty nebo pole hodnot daného datového typu (například „String(...)“ nebo „IntegerArray(...)“), agregačních funkcí a serverových funkcí.
- Detailní popis serverových funkcí je uveden v samostatné příručce Serverové funkce.
2.4. Rozbalovací seznam „Hodnoty“
- Rozbalovací seznam s výběrem identifikátorů databázových ovládacích prvků, které je možné používat na jednotlivých řádcích skriptu.
2.5. Odkaz „Slovník...“
- Slovník zobrazuje seznam komentářů a přerušení použitých napříč všemi skripty v celé aplikaci, které se vztahují k následujícím typům příkazů:
- Parametr „message“ serverové funkce „SCHEDULEBACK“ v komentáři skriptu
- Parametr „message“ serverové funkce „TEFUIG“ v komentáři skriptu
- Parametr „message“ serverové funkce „TESUIG“ v komentáři skriptu
- Parametr „message“ serverové funkce „THROWEXCEPTION“ v komentáři skriptu
- Parametr „message“ serverové funkce „WRITEMESSAGE“ v komentáři skriptu
- Přerušení skriptu
- Vyhledávání ve slovníku slouží k navržení správného tvaru uživatelských hlášek a k udržení konzistence názvosloví v celé aplikaci.
2.6. Odkaz „Sledování změn...“
- Sledování změn zobrazuje detailní report se změnami skriptu provedenými jednotlivými uživateli. Report ve výchozím stavu zobrazí posledních 10 změn; tento počet je možné změnit parametrem „maxrows“ v URL reportu. Po sobě jdoucí uložení téhož uživatele v jednom dni a uložení, které obsah nezměnilo, report sloučí do jedné změny; sloučení vypne parametr „full=true“ v URL reportu.
2.7. Odkaz „Statistika...“
- Statistika zobrazuje agregovanou informaci o využívání ovládacího prvku spojeného s tímto skriptem napříč celou aplikací.
- Odkaz se zobrazuje jen u skriptů ovládacích prvků; u skriptů serverových událostí editačního formuláře chybí.
- Pomocí odkazu „Statistika“ se zobrazí detailní report všech míst, kde je ovládací prvek použitý nebo referencovaný, včetně možnosti otevření nastavení takového místa či ovládacího prvku.
2.8. Odkaz „Logování...“
- Pomocí odkazu „Logování“ se zobrazí detailní report se záznamy o spuštění skriptu. Report obsahuje informace o:
- datu a času spuštění skriptu,
- uživateli, který skript spustil,
- době zpracování skriptu,
- datu a času zahájení zpracování a
- datu a času dokončení zpracování.
- 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í skriptu je ve výchozím nastavení stanoven na 0 milisekund, zobrazují se tedy všechny záznamy spuštění skriptů 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.9. Tlačítko „Spustit skript“
- Tlačítko „Spustit skript“ slouží ke spuštění skriptu v testovacím režimu.
- Před spuštěním se aktuální podoba skriptu uloží.
- Spuštění skriptu simuluje průběh zpracování skriptu, neukládá však žádné hodnoty do databáze, ani nemaže žádné záznamy z databáze.
- Databázové dotazy skriptu čtou aktuální data z databáze. Příkaz „Odeslat e-mail“ se v testovacím režimu přeskočí a funkce „COMMIT()“ a „OBSOAS“ se neprovedou; přerušení skriptu se naopak vyvolá stejně jako při skutečném běhu.
- Skript editačního formuláře (událost formuláře nebo skript ovládacího prvku editačního formuláře) se v testovacím režimu vyhodnotí nad hodnotami záznamu, ze kterého byl dialog nastavení ovládacího prvku otevřen. Byl-li dialog otevřen u nového záznamu nebo mimo editační formulář (například z reportů), běží skript nad prázdným záznamem.
- Po dokončení se zobrazí hodnoty všech proměnných skriptu a u každého příkazu „Přiřadit hodnotu z dotazu“ a „Přiřadit více hodnot z dotazu“, jehož dotaz nevrátil právě jeden záznam, upozornění s číslem řádku a počtem vrácených záznamů. Skončí-li skript chybou, zobrazí se jen text chyby.
- Externí funkce se v testovacím režimu volají s hodnotou „true“ v parametru „test“ a s hodnotou „null“ v parametru „cmd“. Zda funkce v testovacím režimu nic nezapíše, zajišťuje sama – proto má začínat podmínkou na parametr „test“:
using System;
namespace NETGenium
{
public class ExternalFunctions
{
public static string ngef(string id, string[] args, bool test, DbCommand cmd, DbConnection conn)
{
if (test) return "";
switch (id)
{
// case "MyFirstFunction": return MyFirstFunction();
default: return conn == null ? "" : conn.ExternalFunctionNotFound(id, cmd);
}
}
}
}
2.10. Tlačítko „Uložit“
2.11. Tlačítko „Uložit a pokračovat v editaci“
- Uložení změn ve skriptu a ponechání skriptu otevřeného pro další úpravy.