Pravidla pro tvorbu editačních pohledů
Pravidlo editačního pohledu s jednou editovanou tabulkou
Dotaz v syntaxi jazyka SQL musí splňovat následující pravidla:
Na prvním místě pohledu musí být identifikační sloupec editované tabulky (IDTABLE). V pohledu nesmí být identifikační sloupce jiných tabulek. V pohledu musí být každý sloupec pod unikátním názvem. Editační pohled nesmí obsahovat vnořený příkaz SELECT (subselect) a alias na vniřek tohoto subselectu.
Příklad:
SELECT HDOK.* UCTOBD.UCET_OBD, UCTOSN_MD.KOD_UCTU, UCTOSN_MD.NAZEV_UCTU, UCTOSN_DAL.KOD_UCTU, UCTOSN_DAL.NAZEV_UCTU FROM HDOK LEFT JOIN UCTOBD ON HDOK.IDUCTOBD=UCTOBD.IDUCTOBD LEFT JOIN UCTOSN UCTOSN_MD ON HDOK.IDUCTOSN_MD=UCTOSN_MD.IDUCTOSN LEFT JOIN UCTOSN UCTOSN_DAL ON HDOK.IDUCTOSN_DAL=UCTOSN_DAL.IDUCTOSN
Pravidlo editačního pohledu s více editovanými tabulkami
Dotaz v syntaxi jazyka SQL musí splňovat, kromě pravidel pro jednu editovanou tabulku, také následující pravidla:
V pohledu na jiném než prvním místě musí být identifikační sloupec další editované tabulky s předponou BT. Vazební sloupec mezi hlavní editační tabulkou a další editační tabulkou musí mít předponu R. Tyto dva sloupce musí být uvedeny jako první sloupce z další editační tabulky v definici pohledu. Platí především pro ADD tabulky.
Příklad:
SELECT HDOK.*, UCTOBD.UCET_OBD, UCTOSN_MD.KOD_UCTU, UCTOSN_MD.NAZEV_UCTU, UCTOSN_DAL.KOD_UCTU, UCTOSN_DAL.NAZEV_UCTU, HDOKADD.IDHDOKADD AS BTHDOKADD, HDOKADD.IDHDOK AS RIDHDOK_BTHDOKADD, HDOKADD.DOD_HODADD, HDOKADD.DOD_MINADD FROM HDOK LEFT JOIN UCTOBD ON HDOK.IDUCTOBD=UCTOBD.IDUCTOBD LEFT JOIN UCTOSN UCTOSN_MD ON HDOK.IDUCTOSN_MD=UCTOSN_MD.IDUCTOSN LEFT JOIN UCTOSN UCTOSN_DAL ON HDOK.IDUCTOSN_DAL=UCTOSN_DAL.IDUCTOSN LEFT JOIN HDOKADD ON HDOK.IDHDOK=HDOKADD.IDHDOK
Postup při uživatelském doplnění sloupců ADD tabulky
V uživatelských objektech bude uložena procedura s nastaveným parametrem okamžitého spuštění. Názvy přidaných sloupců musí být unikátní v rámci celé databáze. Je nutné uvádět na konci názvů sloupců příponu ADD, aby nedošlo k porušení podmínky unikátnosti ani po dalším rozšíření základních tabulek.
Příklad:
CREATE PROCEDURE SPADDCOL_HDOKADD AS SET NOCOUNT ON IF NOT EXISTS (SELECT * FROM SYSCOLUMNS WHERE (ID = OBJECT_ID('HDOKADD')) AND (NAME = 'DOD_HODADD')) ALTER TABLE HDOKADD ADD DOD_HODADD SMALLINT NULL DEFAULT 0 IF NOT EXISTS (SELECT * FROM SYSCOLUMNS WHERE (ID = OBJECT_ID('HDOKADD')) AND (NAME = 'DOD_MINADD')) ALTER TABLE HDOKADD ADD DOD_MINADD SMALLINT NULL DEFAULT 0 RETURN 0
Postup při definici uživatelského pravidla pohledu pro operaci s řádkem
V uživatelských objektech bude uložena procedura s názvem splňujícím pravidla pro obchodní pravidla pohledu (SPVIEWNAME_BRNAME). Vstupní parametry budou sloupce odpovídajícího pohledu, závěrečný SELECT vrací výstupní parametry. Chybové hlášení lze rozlišit na dvě úrovně na upozornění a na chybu. Při upozornění se akceptují vrácené hodnoty a lze pokračovat v další činnosti. Při chybě je nutné hodnoty řádku opravit a nelze pokračovat v další činnosti. Upozornění musí být vypsáno před závěrečným příkazem SELECT.
Příklad:
CREATE PROCEDURE SPQHDOK_US_CALREC @IDSUBJEKT INTEGER AS SET NOCOUNT ON IF 1=1 --PODMÍNKA, KTERÁ INDIKUJE CHYBU BEGIN RAISERROR('POZOR CHYBA!',16,1) RETURN 50000 END IF 1=1 --PODMÍNKA, KTERÁ INDIKUJE UPOZORNĚNÍ BEGIN RAISERROR('UPOZORNĚNÍ!',1,1) END SELECT -10 AS MNPROCPRIRAZKA RETURN 0
Postup při definici uživatelského FCHANGE pohledu
V uživatelských objektech bude uložena procedura která zapíše řádek do tabulky FCHANGE.
Příklad:
CREATE PROCEDURE SPFCHANGE_QHDOK_US_KOD_SUBJEKTU AS SET NOCOUNT ON IF NOT EXISTS(SELECT * FROM FCHANGE WHERE TABLENAME='QHDOK_US' AND FIELDNAME='KOD_SUBJEKTU') BEGIN INSERT INTO FCHANGE (TABLENAME, FIELDNAME, BASE_LOOK, ACTIONORDER, SPNAME) VALUES ('QHDOK_US', 'KOD_SUBJEKTU', 1, 1, 'KS_FCHANGE') END RETURN 0
V uživatelských objektech bude uložena procedura s názvem splňujícím pravidla pro obchodní pravidla. Vnitřní struktura odpovídá pravidlům pro obchodní pravidla řádku.
Příklad:
CREATE PROCEDURE SPQHDOK_US_KS_FCHANGE @KOD_SUBJEKTU INTEGER AS SET NOCOUNT ON IF 1=1 --PODMÍNKA, KTERÁ INDIKUJE CHYBU BEGIN RAISERROR('POZOR CHYBA!',16,1) RETURN 50000 END IF 1=1 --PODMÍNKA, KTERÁ INDIKUJE UPOZORNĚNÍ BEGIN RAISERROR('UPOZORNĚNÍ!',1,1) END SELECT -10 AS MNPROCPRIRAZKA RETURN 0
Speciální datové položky
V datovém zdroji mohou být definovány položky (sloupce) s definovanými jmény, které neslouží primárně k editaci dat. Jedná se o položky:
- MF_ROWSTYLE - definuje barvu pozadí každého řáku v browse/tabulce. Fyzicky se obarví stavový sloupec (1.zleva). Barva se zadává ve tvaru '#RRGGBB', kde položky RR/GG/BB jsou R/G/B složky barvy v hexadecimálním formátu.
SELECT CASE WHEN vlChyba = 2 then '#FF0000' /* červená */ WHEN vlChyba = 1 then '#FF6600' /* oranžová */ WHEN vlRucniZapis = 1 then '#0000FF' /* modrá */ END AS MF_ROWSTYLE
- MF_ROWSTYLE_COLOR - umožňuje pro barvy z předchozího bodu doplnit legendu. Legenda obsahuje použitou barvu a její popis/význam. Barva se zadává ve tvaru '#RRGGBB', následuje oddělující mezera a textový popis významu použité barvy.
SELECT '#FF0000 Červená barva;#00FF00 Zelená barva;#0000FF Modrá barva' as MF_ROWSTYLE_COLOR
- SLOUPEC_ROWSTYLE - definuje barvu pozadí jedné buňky v browse/tabulce. Sloupec je jméno existujícího sloupce z datového
zdroje, tj. existuje-li k datovému sloupci sloupec se stejným jménem a příponou _ROWSTYLE, obarví se daná buňka dle zadané hodnoty. Barva se zadává stejným způsobem, jako v případě parametru MF_ROWSTYLE, tj. po R/G/B složkách v hexadecimálním formátu.
SELECT CASE WHEN DATEDIFF(dd, getdate() , dtSplatno) <= -2 then '#FF0033' WHEN DATEDIFF(dd, getdate() , dtSplatno) = -1 then '#FF3333' WHEN DATEDIFF(dd, getdate() , dtSplatno) = 0 then '#FF6633' WHEN DATEDIFF(dd, getdate() , dtSplatno) = 1 then '#FF9933' WHEN DATEDIFF(dd, getdate() , dtSplatno) = 2 then '#FFCC33' WHEN DATEDIFF(dd, getdate() , dtSplatno) = 3 then '#FFFF33' ELSE '' END AS DTSPLATNO_ROWSTYLE
Vložení sloupce tlačítek do tabulky
Do ESO9 přichází možnost vložit do tabulky sloupec, který místo textových hodnot zobrazuje tlačítka pro vykonání akce na daném řádku. Tento tlačítkový sloupec umožňuje přehlednější práci s daty a urychluje práci. Tlačítko se chová jako běžná akce na tlačítko v editoru.
Syntaxe Tlačítko se vkládá do HTML předlohy na několika místech s tím, že žádný nelze vynechat. 1. Nejdříve je nutné vložit tlačítko do datového zdroje, tím říkáme, že tlačítko bude součástí dat a je to jediné místo, kde ovlivníme hodnotu a chování tlačítka.
Syntaxe je hodnota tlačítka;akce na tlačítko AS MF_BRWCMD1
Datový název sloupce je MF_BRWCMD1 (případně 2,3,4…pokud jich chceme více) Hodnota se skládá ze dvou částí. První je to co bude napsané na tlačítku a za středníkem samotná akce jako známe z akcí v editoru
př.
SELECT *, '' AS MF_KOD_UZIV, 'Kopie1;spUzivatel_btCopyALL;URL_ACTION=http://www.google.com' as MF_BRWCMD1 FROM QUZIVATEL ORDER BY KOD_UZIV
Tlačítek může být i více:
SELECT *, '' AS MF_KOD_UZIV, 'Kopie1;spUzivatel_btCopyALL;URL_ACTION=http://www.google.com' as MF_BRWCMD1, 'Kopie2;spUzivatel_btCopyALL;URL_ACTION=http://www.seznam.cz' as MF_BRWCMD2 FROM QUZIVATEL ORDER BY KOD_UZIV
2. V datovém zdroji tlačítko máme, ale server jej ještě nepovažuje za sloupec. On ale nemá žádnou interpretanci v inputech v html předloze. Proto musí být vyjmenován v hiddenfields. Pro příkald dvou tlačítek:
<input type="hidden" name="hiddenfields" value="MF_BRWCMD1;MF_BRWCMD2">
3. No jo, jenže teď je to schované a nezobrazí se to v browse. Abychom si zobrazení vynutili, musíme použít parametr BROWSEFIELDS a vyjmenovat přesné pořadí sloupců, v jakém chceme tabulku poskládat. S tím, že tlačítka si umístíme, kam potřebujeme.
<input type="hidden" name="BROWSEFIELDS" value="MF_KOD_UZIV;UZIV_FUNKCE;MF_BRWCMD1;MF_BRWCMD2;JMENO_UZIV">