Toto je starší verze dokumentu!
Obsah
UPDATE nyní je možné volat uživatelské scripty z browse
Pokud si nepřejete, aby se váš skript spouštěl v browse (i když to „nic“ nedělá, tak to může zpomalovat stránku), tak na začátek funkce přidejte:
if(!browse){ return false; }
Možnosti rozšiřování funkčnosti obecného klienta
V obecném klientovi lze upravovat jeho chování pomocí uživatelských Javascriptů. Skripty mohou reagovat na změnu vybraných položek a na základě jejich hodnoty pak mohou buď vykonat nějakou operativu (přehrát zvukový soubor, zobrazit hlášku, …) nebo modifikovat formulář. V tomto článku najdete praktické příklady, které můžete jednoduše zkopírovat do své aplikace (resp. přímo do aplikace ESO9Start).
Syntaxe: k libovolnému datovému elementu ve formuláři přidáme atribut data-JSfunction:
data-JSfunction="MyScript.js:MyFunction"
Hodnotou atributu data-JSfunction je název souboru s Javascriptem (dvojtečka) název funkce. Jednotlivé volané funkce jsou uloženy v souborech (zde s příponou .js) ve složce SCRIPT v aplikačním webu. Jeden soubor může obsahovat více funkcí. Pokud nebude jméno souboru uvedeno (tj. data-JSfunction=„:MyFunction“), bude se předpokládat, že je daná funkce implementována přímo v HTML formuláři, ve verzovém skriptu ESO9, v jQuery nebo kdekoli jinde.
Při každé změně hodnoty položky (posun ve formě, synchronizace závislé formy, volání obchodního pravidla, akce na tlačítko atd.) se pak zavolá uvedená funkce.
Příklad použití u položky KOD_SUBJEKTU:
<input type="text" size="5" name="KOD_SUBJEKTU" title="Kód subjektu" id="fp1" data-JSfunction="MyScript.js:MyFunction">
Argumenty každé takto volané funkce jsou:
- sender - HTML element, nad kterým se funkce volá
- rowState - stav datové věty
- 0 = browse (věta není rozeditovaná)
- 1 = insert (věta je nově založena, dosud není uložena v databázi)
- 2 = edit (existující věta je rozeditovaná)
- rowData - dvourozměrné pole s hodnotami všech položek v datovém řádku, nad nímž se funkce volá. Prvním rozměrem je jméno položky, druhým pak její hodnota.
- browse - true / false. Zda je script volaný z browse
Kromě uvedených parametrů je samozřejmě v každé funkci k dispozici kompletní DOM model stránky. Při manipulaci s ním lze využívat i framework jQuery (http://jquery.com/).
Práce s argumenty funkce
sender
V prvním argumentu jsou obsažena data elementu, na který je funkce navázána. Je třeba si dát pozor, že pro input obdržíte jiné parametry než pro select nebo span. Přístup k jednotlivým parametrům elementu provádíme přes tečku.
Zde příklady těch nejdůležitějších společných pro všechny
sender.className //css třída elementu sender.id // id elementu sender.innerHTML // HTML uvnitř elementu. V případě select volby <option>..</option> u textarea a inputu jen vnitřní text sender.name //jméno (parametr name v html) elementu sender.outerHTML // HTML celého elementu <select name"test"><option>......</select> nebo <input type="text" value="test"... sender.style // zde lze ovlivnit všechny css styly elementu sender.style.backgroundColor: silver; //nastavení stříbrné barvy pozadí elementu sender.style.paddingBottom: 3px; //nastaví odsazení uvnitř elementu na 3 pixely **Nové parametry** sender.dataset.prevRow //předchozí řádek ze kterého uživatel přišel, pokud žádný není, je hodnoty -1 (tedy uživatel aplikaci právě spustil) sender.dataset.actualRow // číslo aktuálního řádku formy sender.dataset.prevValue // předchozí hodnota, která byla v poli. Pokud však přicházíme z jiného řádku, tak předchozí hodnota je z toho řádku, při setu nebo update však můžeme kontrolovat zda došlo ke změně hodnoty na stejném řádku
Pro input , textarea a select používáme také:
sender.value //získání hodnoty, u selectu value vybrané položky sender.disabled //zda je element odemčen nebo zamčen pro editaci sender.disabled = true; // zakáže editaci elementu, resp. rozevření select boxu sender.form // objekt formy ve kterém se nachází element (i s jejími vlastnostmi a seznamem dalších formulářových prvků) sender.form.id // id formy ve které se nachází element - v této formě lze hledat jiné elementy
Pro span lze použít
sender.innerText //vybere veškerý obsah tagu očištěný od vnitřních HTML tagů, pokud budeme chtít použít HTML tagy, použijeme innerHTML
Pro select ještě existují speciální atributy:
sender.multiple //zda je v selectboxu možné vybrat více položek zároveň sender.options //seznam všech položek <option> uvnitř v selectboxu, lze k nim přistupovat pomocí indexu jak jsou v HTML př. sender.options[1].value = "text"; //nastavení hodnoty text druhé položce v selectboxu sender.options[1].selected = false; sender.options[0].selected = true; //odznačení druhé položky (index 1) a vybrání první položky v selectboxu sender.selectedIndex //index vybrané položky v selectboxu sender.selectedOptions //seznam vybraných položek
rowState
Stav řádku reprezentovaný číslem 0,1,2 lze použít např. pomocí podmínek:
if(rowState == 1){ sender.style.backgroundColor = "green"; //pokud je řádek ve stavu insert, obarvi tuto položku na zeleno }
Nezapomeňte, že pokud cokoliv v DOM modelu změníte, zůstane to tam, dokud to nezměníte zpět (nebo nezavřete a neotevřete stránku, takže správný kód je:
if(rowState == 1){ sender.style.backgroundColor = "green"; //pokud je řádek ve stavu insert, obarvi tuto položku na zeleno }else{ sender.style.backgroundColor = "inherit"; //jinak ponechej původní barvu }
rowData
Objekt s daty řádku. Přístup k těmto datům je rowData.nazevSloupce př. použití (obarvení elementu podle sloupce VLSTAVHDOK:
if(rowData.VLSTAVHDOK == "1"){ sender.style.backgroundColor = "yellow"; }else if(rowData.VLSTAVHDOK == "2"){ sender.style.backgroundColor = "green"; }else{ sender.style.backgroundColor = "inherit"; }
Takto lze přistupovat i k invisible a readonly sloupcům.
Několik upozornění pro implementaci skriptů
- Snytaxe Javascriptu: https://www.w3schools.com/js/js_syntax.asp
- Syntaxe JQuery: https://www.w3schools.com/jquery/jquery_syntax.asp
- Pracujete s HTML vygenerované stránky, nikoliv s HTML vaší předlohy. Takže např. id readonly položek se mění. Pokud chcete vidět HTML kód, na který budete připojovat svůj java script, tak v Google Chrome klikněte do formy v editoru pravým tlačítkem a vyberte možnost „zobrazit zdrojový kód rámu“.
- Pracujete s celou stránkou a to včetně ovládacích prvků klienta. Váš skript může ovlivnit funkčnost celého klienta jako takového, je třeba to brát v potaz.
- Pokud voláte prvek podle jména, ID, tagu nebo všeho dohromady, buďte si jistí, že v hlavičce, složkách i všem co do stránky includujete máte skutečně jen ten jeden prvek s tím ID, jménem, tagem co opravdu chcete zavolat (opět, zobrazit zdrojový kód rámu).
- Načítání dat do forem probíhá sekvenčně za sebou. Proto nelze měnit obsah hlavičky na základě dat složky, protože v době spuštění vašeho skriptu na základě změny dat v hlavičce, nejsou data ve složce ještě načtena do stránky. Analogicky však lze měnit obsah hlavičky na základě dat ve složkách.
- I refresh složek spouští skript na hlavičce, je to stále jedna stránka
- Všechno co změníte, musíte mít možnost i vrátit do původního stavu. Při přechodu na další řádek změny zůstávají, jen se spustí znova váš skript, ale pokud v něm bude pouze příkaz „zakaž“, ale žádný „povol“, tak prvek zůstane zakázaný.
- Skripty fungují v editoru i v režimu tabulka (browse), nicméně s DOM modelem lze kvalitně pracovat jen v editoru
- DOM model gridu browse neupravujte, může to mít vliv na celou funkčnost. Skripty v browse spouštějte spíše, když chcete spustit nějaký zvuk nebo zobrazit nějakou hlášku, tedy něco co nemá vliv na složení formuláře.
- Pokud dojde k chybě, java script vám často neřekne, kde chyba je, prostě se nic nestane nebo se stane něco úplně jiného. Prohlížeč se také může rozhodnout skript prostě nenačíst. Je třeba počítat s tím, že chyby nejsou snadno odhalitelné. S tím souvisí:
Ladění
Pokud skript nefunguje, je vhodné jej odladit. V Google Chrome to funguje tak, že pravým tlačítkem kliknete na požadovaný prvek a vyberete z nabídky „Prozkoumat“. V novém ladícím dialogu vyberete nahoře sekci „Sources“, pak stisknete CTRL+P a vyhledáte název vašeho javascript souboru. Pokud soubor nenaleznete je třeba ručně znovu načíst rám, aby jej Chrome načetl do ladění. V javascript souboru najdete tu funkci, která vás trápí a na řádek pod jejím začátkem kliknete na číslo toho řádku. Tím tam vložíte tzv. „breakpoint“, tedy místo, kde se běh skriptu zastaví. Následně obnovíte rámec nebo provede znovu akci.
Jakmile se běh skriptu zastaví máte k dispozici několik nástrojů:
- Můžete myší najet na libovolnou proměnnou a pokud má hodnotu, tak vám to ukáže jakou
- V pravém sloupci máte sekci Watch. Do ní můžete psát proměnné co vás zajímají (přidají se malým +) a ukáže vám to jejich hodnoty, také tam můžete zkoušet javascriptové a jquery funkce (např $(„#id1“); nebo sender.value;) a ono vám to ukáže, co se v daný moment vrátí za hodnotu. To co tam budete mít napsané se bude přepočítávat i při dalším posunu skriptem a vy můžete sledovat jestli se proměnné mění správným způsobem.
- V sekci Scope jsou pak vypsané všechny aktuální proměnné
- Klávesou F10 se pohybujete o další krok ve skriptu, můžete takto krokovat dokud nedojde k chybě
- Klávesou F8 skript rozběhnete dál
- Pokud okno ladění/inspektora vypnete, tak breakpointy nebudou zastavovat skript
Praktické příklady
Znepřístupnění položky ve formuláři na základě hodnoty jiné položky
Popis: na základě hodnoty položky Intrastat měnit přístupnost položky Datum INTRASTAT. Pokud bude mít položka Intrastat hodnotu 0 („Ne“), nebude položka Datum INTRASTAT přístupná.
Formulář: prodej/FaV.htm (Faktura vydaná).
Úpravy ve formuláři: přidání atributu data-JSfunction k definici výběrového seznamu (tag SELECT) položky VLINTRASTAT.
<select name="VLINTRASTAT" size="1" id="fp62" data-JSfunction="MyScript.js:MyFunction"> <option selected value="0">ne</option> <option value="1">dovoz</option> <option value="2">vývoz</option> <option value="3">dovoz - dobropis</option> <option value="4">vývoz - dobropis</option> </select>
Úpravy ve skriptu: v aplikačním webu ve složce Script založit soubor MyScript.js a do něj přidat funkci MyFunction:
function MyFunction (sender, rowState, rowData ) { var dtIntrastatElement = document.getElementById("fp61"); if(sender.value == "0"){ dtIntrastatElement.disabled = true; }else{ dtIntrastatElement.disabled = false; } }
Rozbalení skryté sekce na základě hodnoty položky
Zadání: otevřít sekci samovyměření, pokud „pro výkaz DPH“ bude z kódů 4-místných začínajících „4“ (režim přenesené DPH)
Ve FapHlav.htm:
<input type="text" size="3" name="vlDuvod_Osvob" title="Pro výkaz DPH" readonly id="fp45" data-JSfunction="MyScript.js:rozbalVymereni">
Jelikož jde o readonly položku, je třeba počítat s tím, že ji server vygeneruje jako span element Pro rozbalení a zabalení vnitřní sekce používáme funkci
eso9.PackEdBlock("ID ZAVÍRACÍ SEKCE",0 = zavřený / 1 = otevřený);
function rozbalVymereni (sender, rowState, rowData ){ var kod = sender.innerText.replace(/ /g,''); //vymazání všech mezer v čísle kódu if(kod.length == 4 && kod.charAt(0) == "4"){ // pokud je délka kódu 4 a první znak je číslice 4 eso9.PackEdBlock("HDOK_Samovyměření DPH",1); }else{ eso9.PackEdBlock("HDOK_Samovyměření DPH",0); } }
Rozbalení skryté sekce na základě hodnot uvnitř sekce
Jednoduché zadání: Pokud v sekci je něco vyplněné, sekci rozbal, jinak ji zabal. A ty položky ze skryté sekce, které jsou vyplněné vybarvi.
V tomto případě budeme pracovat s proměnnou rowData, takže není příliš podstatné na kterou položku funkci navážeme. Zde je navázaná na položku obec:
<td><label for="fp2">Obec </label></td> <td colspan="2"> <input type="text" size="30" name="OBEC" id="fp2" data-JSfunction="MyScript.js:MyFunction"></td>
Podstatné je pro nás i ID skryté sekce:
<hr class="EsoHiddenBlockStart" id="Skrytá sekce">
K následujícímu kódu jen to, že je lepší si elementy ukládat do proměnné, protože je rychlejší číst z proměnné, než když prohlížeč prohledává celý dokument opakovaně a hledá element s určitým id.
function MyFunction (sender, rowState, rowData ) { var lat = rowData.LATITUDE; var lon = rowData.LONGTITUDE; var latElement = document.getElementById("fp13"); var lonElement = document.getElementById("fp14"); if(lat || lon){ if(lat){ latElement.style.backgroundColor = "#fff000"; } if(lon){ lonElement.style.backgroundColor = "#b2e5ff"; } eso9.PackEdBlock("PSC_Skrytá sekce",1); } else { latElement.style.backgroundColor = ""; lonElement.style.backgroundColor = ""; eso9.PackEdBlock("PSC_Skrytá sekce",0); } };
Zakázání všech položek pokud je doklad v uzavřeném stavu
Funkce je navázaná na selectbox VLSTAVHDOK, který je includovaný do faktury přijaté a vydané. Doklad je uzavřený při hodnotě 20 a vyšší.
Funkce je napojena na selectbox v ComboInc_VLSTAVHDOK.htm :
<select name="VLSTAVHDOK" size="1" data-JSfunction="MyScript.js:disableAll" id="fpVLSTAVHDOK" sql="SELECT VLSTAV AS VLSTAVHDOK, STAV FROM QVLSTAVHDOK1 WHERE (IDTYPDOK=%IDTYPDOK_STAVHDOK%) ORDER BY VLSTAV" selected="0"> </select>
Funkce využívá framework jquery s následujícími selectory:
$(„#id“) - selector pro výběr prvku podle id v dokumentu
$(„selector1 selector2“) - mezera oddělující dva selectory znamená hledání prvků podle selectoru2 uvnitř prvků podle selectoru1 např. $(„#id1 .zluty“) vyhledá všechny prvky s třídou žlutý uvnitř prvku s id = id1
:not() selector, který vybere všechny prvky co neodpovídají selectoru uvnitř závorky
[atribut=hodnota] selector pro všechny prvky jejichž atribut odpovídá nějaké hodnotě <input type='button' value='test' /> $([type=button]);
$(selector1selector2) - dva spojené selectory znamenají logický operátor AND, tedy tvoří jeden selector a musí být splněny všechny podmínky
.prop() - nastaví java scriptový parametr prvkům odpovídajícím podmínce
.css({„parametr“ : „hodnota“}) - nastaví css parametr prvkům odpovídajícím podmínce
Dále je třeba brát v úvahu, že přistupujeme k celé stránce, včetně ovládacích prvků klienta (tlačítka pro ukládání, založení atd.). Proto při zakazování prvků je musíme vynechat. Také je nutné pro ostatní hodnoty prvky opět povolit.
Také musíme dbát na to, aby bylo možné stav měnit a nezakazovat i prvek, na který máme funkci navázanou. Protože jde o select, musíme vynechat i všechny jeho „potomky“ tagy option.
V případě číselníků znemožňujeme klikání myší na odkazy a zároveň skrýváme ikony pro vyvolání číselníku (opačně vše povolíme zpět)
Při nesplnění podmínky je třeba opět vše povolit.
function disableAll (sender, rowState, rowData ) { if(sender.value >= "20"){ $('#' + sender.form.id + ' :not([type=button]):not(#' + sender.id + '):not(#' + sender.id + ' option)').prop('disabled',true); $('#' + sender.form.id + ' a[data-eso9-lookup != ""]').css({"pointer-events" : "none","cursor" : "default"}); $('#' + sender.form.id + ' img[class=img_dtciselnik]').css({"display" : "none"}); }else{ $('#' + sender.form.id + ' :not([type=submit]):not([type=button])').prop('disabled',false); $('#' + sender.form.id + ' a[data-eso9-lookup != ""]').css({"pointer-events" : "inherit","cursor" : "auto"}); $('#' + sender.form.id + ' img[class=img_dtciselnik]').css({"display" : ""}); } }
Pozn. tato funkce ovlivňuje celou formu, musíte si u svého formuláře dát pozor, aby vám nepovolila či nezakázala nějaký prvek, který má být na základě jiných kritérií povolený či zakázaný.
Jednorázové přehrání zvuku
Java Script umožňuje přehrávat zvuk. Lze jej přehrát jednou, stále dokola, lze v něm vytvořit celý hudební přehrávač. Následující příklad ukazuje, jak na základě různých stavů přehrát jednorázový krátký zvuk.
V HTML předloze máme následující select:
<select name="VLSTAVSDOK" size="1" id="fp0" data-JSfunction="MyScript.js:playSound" readonly> <option selected value="0">POŘÍZENO</option> <option value="1">PŘIJATO</option> <option value="2">VYŘEŠENO</option> <option value="3">ZKONTROLOVÁNO</option> <option value="4">ZRUŠENO</option> <option value="5">ODESLÁNO</option> <option value="6">VYHOVUJE</option> <option value="7">NEVYHOVUJE</option> </select></td>
Chceme na základě vybraných stavů přehrát určitý zvuk. Protože stavů je hodně a můžeme časem měnit potřeby, vytvoříme jednoduchý switch pro každý stav. Kde chceme přehrát zvuk, vytvoříme objekt audio s cestou k souboru. Cesta k souboru je vždy brána od esoform.asp
function playSound (sender, rowState, rowData ) { var stav = sender.value; var Sound; switch (stav){ case "0": break; case "1": Sound = new Audio('sound2.mp3'); Sound.loop = false; Sound.play(); break; case "2": Sound = new Audio('sound3.mp3'); Sound.loop = false; Sound.play(); break; case "3": Sound = new Audio('sound1.mp3'); Sound.loop = false; Sound.play(); break; case "4": break; case "5": break; case "6": Sound = new Audio('sound4.mp3'); Sound.loop = false; Sound.play(); break; case "7": break; } }
Přehrávání hudby na pozadí na základě stavu
Pokud chceme přehrávat hudbu či nějaký zvuk opakovaně na pozadí bez ohledu na to co ve formě uživatel dělá, tak nemůžeme použít javascriptový object Audio. Ten object Audio sice spustí zvuk, ale pokud ve stránce něco provádíme, už jej nemůžeme vypnout (ztratíme k němu přístup). Proto je potřeba přidat audio přímo do DOM modelu.
V tomto modelu se bude přehrávat zvuk, když složka úkolů bude ve stavu „insert“ tedy „1“.
V HTML předloze můžeme skript navázat prakticky na jakýkoliv prvek do kterého se bindují data. V příkladu textarea.
<td><label for="fp34">Text</label></td> <td colspan="6"><textarea rows="7" name="TEXT_SLOZ" style="width: 95%" data-JSfunction="MyScript.js:playSound2" style id="fp34"></textarea></td>
V kódu musíme kontrolovat, jestli takový audioelement už ve stránce není (třeba při přechodu na další větu), aby se nevygeneroval podruhé. Jinak jej vytvoříme, tak, aby nebyl viditelný a vložíme do těla stránky.
Následně ověříme, že je stránka v požadovaném stavu a spustíme zvuk, pokud stránka přejde do jiného stavu, zvuk zastavíme.
function playSound2 (sender, rowState, rowData ) { var Sound; if(!document.getElementById("playsound")){ Sound = document.createElement("audio"); Sound.src = 'sound5.mp3'; Sound.id = "playsound"; Sound.style.display = "none"; document.body.appendChild(Sound); }else{ Sound = document.getElementById("playsound"); } if(rowState == 1){ Sound.loop = true; Sound.play(); }else{ Sound.pause(); } }
Úprava samotného HTML stránky na základě hodnoty sloupce
Zadání: Skrýt řádky tabulky i s elementy, která je strukturou stránky u složek cestovního příkazu, pokud jsou pro daný typ cestovního příkazu nevhodné. Příklad: U stravného nepotřebujeme vyplňovat informace o dopravním prostředku.
Kód připojíme do složek na položku „VLTYP_SLOZ“.
<td><select name="VLTYP_SLOZ" size="1" id="fp2" data-JSfunction="MyScript.js:hideRow" readonly> <option value="1020">Cesta</option> <option value="1021">Stravné</option> <option value="1022">Jídlo</option> <option value="1023">Jízdné</option> <option value="1024">Nocležné</option> <option value="1025">Zálohy</option> <option value="1030">Ostatní</option> </select></td>
Z kódu vidíme, že je mnoho možností, kterých Typ složky může nabývat. Pro každou chceme určit, zda se poslední dva řádky zobrazí či nikoliv. Struktura posledních dvou řádků je následující:
<tr> <td><label for="fp20"><a href="esoform.asp?TPage=Nastaveni/ZbozBalinc&RelType=SlaveMaster&WHERE=WHERE IDZBOZI = '%IDZBOZI%'&SetFieldName=KOD_MJ&FormType=Browse&StartFilter=0&ReadOnly=1&SMClose=1">MJ</a></label></td> <td><input type="text" name="KOD_MJ" size="10" id="fp20"></td> <td><label for="fp21">PHM</label></td> <td><input type="text" name="HDCASTKA01" size="20" id="fp21" readonly></td> <td><label for="fp22">Amortizace</label></td> <td colspan="3"><input type="text" name="HDCASTKA02" size="20" id="fp22" readonly></td> </tr> <tr> <td><label for="fp23"><a href="esoform.asp?TPage=doprava/KartaVozidla_cis.htm&RelType=SlaveMaster&SMPlus=_KARTA">Dopravní prostředek</a></label></td> <td colspan="3"> <input type="text" name="CIS_DOK_KARTA" size="10" id="fp23"> <input type="text" name="KOD_KARTA" size="10" title="Název auta" readonly> <input type="text" name="TEXT01_KARTA" size="10" title="Název auta" readonly> </td> <td><label for="fp24">Poznámka</label></td> <td colspan="3"><input type="text" name="TEXTS01" size="60" id="fp24"></td> </tr>
Jsou v ní položky jako „název auta“ nebo „PHM“. Tyto nepotřebujeme třeba pro stravné nebo nocležné.
Cílem je nějak dosáhnout na samotné <tr>, jenže do předlohy mu nemůžeme přiřadit ID, to server vymaže. Jediné přes co můžeme přistupovat jsou pole input uvnitř těch řádků. Proto si pro každý řádek napíšeme následující proměnné v jquery:
var radekMJ = $("#fp20[name='KOD_MJ']").parent().parent("tr"); var radekKarta = $("#fp23[name='CIS_DOK_KARTA']").parent().parent("tr");
Kód u RadekMJ najde element id fp20 se jménem KOD_MJ, pak vyhledá jeho rodičovský element (což je buňka tabulky <td>) a u něj jeho rodičovský element, který upřesníme, že jde o <tr>. Takto do jedné proměnné uložíme celý jeden řádek. Ekvivalentně to provedeme u dalšího řádku.
Následně už podle jenoduchého switche samotné řádky skrýváme nebo zobrazujeme. V proměnných jsou JQuery objekty, tak můžeme použít i JQuery funkce. Celý kód:
function hideRow (sender, rowState, rowData ){ var typ = sender.value; var radekMJ = $("#fp20[name='KOD_MJ']").parent().parent("tr"); var radekKarta = $("#fp23[name='CIS_DOK_KARTA']").parent().parent("tr"); switch (typ){ case "1020": //cesta radekMJ.show(); radekKarta.show(); break; case "1021": //stravné radekMJ.hide(); radekKarta.hide(); break; case "1022": //jídlo radekMJ.hide(); radekKarta.hide(); break; case "1023": //jízdné radekMJ.hide(); radekKarta.show(); break; case "1024": //nocležné radekMJ.hide(); radekKarta.hide(); break; case "1025": //zálohy radekMJ.show(); radekKarta.show(); break; case "1030": //ostatní radekMJ.show(); radekKarta.show(); break; default: radekMJ.show(); radekKarta.show(); } }
Použití vestavěných javascriptových funkcí objektu window alert(),confirm() a prompt()
V uživatelském skriptu, lze využívat vestavěných funkcí Javascriptu: window.alert() - Pop-up okamžitá hláška prohlížeče, kterou lze jen odkliknout. window.confirm() - Pop-up otázka, odpovědi jsou „OK“ a „Storno“ což jsou vlastně Ano,Ne. Pokud je hláška v proměnné, vrátí se true nebo false a pak pokračuje kód dál window.prompt() - Pop-up otázka, kde se odpověď zapisuje do textového pole. To se pak uloží do proměnné, pokud je hláška v proměnné.
Pozor, kontrolovat, zda řádek není ve stavu Browse (RowState je 0), pak se budou hlášky objevovat i při načítání stránky.
Použití: Představte si, že v editoru, na základě číselné hodnoty nějaké datové položky určujete, co se má stát:
Příklad s Alert:
if(sender.value > 6 && rowState != 0){ window.alert("To je moc!"); sender.value = ""; }
Pokud je hodnota vyšší než 6 a tabulka není ve stavu prohlížení, objeví se hláška a potom se hodnota pole vymaže, aby ji uživatel zadal znovu.
Příklad s confirm:
if(sender.value === "3" && rowState != 0){ var otazka = window.confirm("Opravdu?"); if(!otazka){ sender.value = ""; } }
Pokud je hodnota 3 a tabulka není ve stavu prohlížení, objeví se otázka, zda si je uživatel touto hodnotou jistý. Pokud nedá „OK“ vrátí se false a vymažeme tedy hodnotu.
Příklad s prompt:
if(sender.value === "4" && rowState != 0){ var hodnota = window.prompt("Vyber si raději jinou hodnotu",""); if(hodnota != 4){ sender.value = hodnota; } }
Pokud je hodnota 4 a tabulka není ve stavu prohlížení, objeví se otázka, aby uživatel vybral jinou hodnotu. Pokud uživatel vybere jinou hodnotu, bude zapsána do datové položky.
Nastavení focusu na definované pole v browse
Pro přípa že po akci v hlavičce potřebujete nastavit focus na pole ve složce, aby se mohlo rovnou editovat, je možné využít funkci eso9.brwSetFocusTo s parametry:
- formName - název formy
- fieldName - název pole
- row – řádek
var MD_IDHDOK = null function setCell (sender, rowState, rowData, browse){ if (rowState == 0 && MD_IDHDOK != rowData.MD_IDHDOK) { eso9.brwSetFocusTo('SDOK', 'MNPOCETMJ', 1); MD_IDHDOK = rowData.MD_IDHDOK; } }