==== 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:
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.