<record tablename="JMENOTABULKY" logdescription="Popis pro zapis do logu" name="jmeno promenne"> <recordfield name="JMENOPOLE1" format="FORMAT_POLE1" size="DELKA_TEXTOVEHO_POLE" readonly="0" updatelog="0" value="HODNOTA">JINAK_ZADANA_HODNOTA</recordfield> ... <recordwhere>SQL podminka pro SELECT a UPDATE</recordwhere> <insertrecord /> <updaterecord /> <updateorinsertrecord /> <deleterecord /> <loadrecord name="JMENO_PROMENNE" /> </record>
Slouží k editaci, vkládání a mazání záznamů v databázi. Kromě samotného zápisu do databáze provede podrobný zápis do logu.
Musí obsahovat definici alespoň jednoho databázového pole (tag <recordfield>) a dále jednu akci, která se má se záznamem provést (jeden z tagů <updaterecord>, <insertrecord>, <updateorinsertrecord>, <loadrecord>, <deleterecord>). V případě editace nebo mazání záznamů by měl obsahovat také podmínku pro vyhledání konkrétního záznamu zadanou v tagu <recordwhere>.
Atributy:
tablename
- (nepovinný) Jméno databázové tabulky.logdescription
- (nepovinný) Popis zdroje události pro zápis do logu. Pokud není zadán, použije se text "XML <id sablony>".name
- (nepovinný) Jméno proměnné, do které se uloží vytvořený záznam. K jednotlivým prvkům záznamu pak lze přistupovat jako k položkám pole.
Pokud není zadáno jméno tabulky (atribut tablename
), musí být zadán atribut name
. Použije se pak hodnota zadané proměnné.
To lze využít v událostech (např. ..._BEFORE_POST, ..._AFTER_POST), ve kterých je obvykle aktuálně zpracovávaný záznam v proměnné record.
Definuje pole v databázové tabulce.
Atributy:
name
- (povinný) Jméno pole v databázové tabulce.format
- (nepovinný) Formát pole v databázi.size
- (nepovinný) Maximální délka textového pole. Pro jiné datové typy nemá žádný význam. V případě, že má hodnota větší délku, bude při editaci a vkládání oříznuta.readonly
- (nepovinný) Příznak určuje, jestli je pole pouze pro čtení. Pokud je nastaven na 1, tak se u pole neprovede update. Při insert se tento příznak ignoruje - pole bude naplněno.updatelog
- (nepovinný) Příznak, že je pole pouze "logovací" (například pole Update_UserName
).value
- (nepovinný) Nová hodnota pro zápis do databáze. V případě, že není zadána, načte se hodnota z těla tagu.udpateexistingfield
- (nepovinný) Pokud už pole se stejným názvem existuje, tak jej nepřidává, ale aktualizuje jej podle zadaných hodnot atributů.int, integer
float, double
date
- datum. Pokud zadaná hodnota obsahuje i čas, tak se čas ořeže.datetime, timestamp
- Datum a čas. Zadaná hodnota musí být timestamp.time
- čas bez datumudatestr
- datum zadaný textověsqltimestamp, sqldate
- čas nebo datum načtený z databáze (například pomocí forsql)memo
- text bez omezení délkyblob
- blob pole. Zapsaná hodnota se normálně loguje, takže je to vhodné použít pouze pro textová data.binary
- binární data. Zapsaná hodnota se neloguje.serial
- sériové číslo záznamu - při vkládání se automaticky nastaví na novou hodnotu zjištěnou pomocí SELECT MAX ...sequence
- ID záznamu automaticky číslované pomocí SQL sekvence
Nastavení příznaku updatelog="1"
způsobí, že se u pole nekontroluje změna hodnoty. Pokud nebude změněno žádné jiné pole,
které nemá updatelog="0", tak se update vůbec neprovede. Lze použít například pro pole "Update_TimeStamp", "Update_UserName" a podobně.
Definuje SQL podmínku pro vyhledání konkrétního záznamu. Podmínka se zadává v těle tagu. Zadává se jen výraz bez klíčového slova WHERE. Podmínka musí vybrat jeden maximálně jeden záznam.
Provede zápis nového záznamu do databáze.
Provede editaci (UPDATE) záznamu v databázi.
Editace se provede pouze v případě, že došlo ke změně hodnoty alespoň jednoho datového pole - (pole, která mají nastaveno updatelog="1"
se při kontrole změny ignorují).
Nejdříve se pokusí načíst záznam z databáze. V případě, že existuje, provede editaci (UPDATE). V případě, že neexistuje, provede vložení nového záznamu.
Toto je pouze alias pro <updaterecord>.
Načte do proměnných JMENO_PROMENNE_JMENOPOLE
hodnoty jednotlivých polí záznamu.
Jména proměnných začínají jménem zadaným v atributu name, následuje podtržítko a jméno příslušného pole.
<record tablename="PuvodniDochazka"> <recordfield name="DatumCasOperace" format="timestamp" value="{$NOW}" /> <recordfield name="RC" value="{$pp_rc}" /> <recordfield name="OsobniCislo" value="{$pp_osobnicislo}" /> <recordfield name="DatumNastupu" format="sqldate" value="{$pp_datumnastupu}" /> <recordfield name="KodOperace" value="01" /> <recordfield name="Karta">XML {$XML_IDSABLONY}</recordfield> <recordfield name="VlozenoManualne" format="int" value="1" /> <recordfield name="VlozenoOnLine" format="int" value="1" /> <insertrecord/> </record>
Vloží záznam se zadanými hodnotami do tabulky PuvodniDochazka.
<record tablename="Osoba"> <recordfield name="RC" readonly="1" /> <recordfield name="Jmeno" readonly="1" /> <recordfield name="Titul" readonly="1" /> <recordfield name="Uzivatelska9" size="50" updatelog="1">Posledni editace v XML: {$NOWSTR} ({$USER_LOGIN})</recordfield> <recordfield name="Uzivatelska12" size="100">{$uzivatelska12}</recordfield> <recordwhere>RC = {$USER_RC}</recordwhere> <updaterecord /> </record>
Aktualizuje záznam v tabulce osoba - nastaví hodnotu pole Uzivatelska12
. V případě změny nastaví také pole Uzivatelska9
.
Pokud nedojde ke změně pole Uzivatelska12
, tak UPDATE neprovede, protože ostatní pole jsou readonly (RC, Jmeno, Titul)
nebo mají nastaven příznak updatelog (Uzivatelska9).
<record tablename="JMENOTABULKY"> <recordfield name="JMENOPOLE1" format="FORMAT_POLE1" size="DELKA_TEXTOVEHO_POLE">HODNOTA1</recordfield> <recordfield name="JMENOPOLE2" format="FORMAT_POLE2">HODNOTA2</recordfield> ... <recordwhere> ... podmínka, která se vloží do SQL výrazu SELECT (při načítání původní hodnoty) </recordwhere> <loadrecord name="JMENO_PROMENNE"/> </record>
Načte do proměnných JMENO_PROMENNE_JMENOPOLE... hodnoty jednotlivých polí záznamu.
<record name="record"> <recordfield name="NEJAKE_DALSI_POLE" updateexistingfield="1">HODNOTA</recordfield> </record>
Doplní do proměnné record další pole, které v ní nemusí existovat. Pokud by existovalo, tak jej aktualizuje.