Automatický identifikátor autoidentity

Možnost nastavit prvek jako automaticky generovaný číselník - číselnou řadu - pro nově ukládané položky (dokumenty a opakovatelné segmenty).

[start-at: #startNo; ] [step-size:#stepSizeNo; ] [gappy: true | false | yes | no ; ] [ condition-ref: {relative-reference}; ] [ condition-value: {value}; ]

Tato vlastnost nastavuje daný prvek jako automatický číselný identifikátor. Je doporučováno používat ve spojení data typu nkey, ale není to podmínka. Nutností ale samozřejmě je celočíselný datový typ, tedy např. data="type:number;total-digits:10;". Nastavením této vlastnosti určíme, že prvek, kde je vlastnost uvedena, bude plněn automaticky se zvyšující číselnou řadou. Dá se toho například využít u číslování účetních dokladů, jakým jsou faktury a jiné doklady a nebo prostě jen jako nastavitelný pomocný identifikátor.

Jde o skládanou vlastnost s následujícím významem jednotlivých částí:

start-at - celé číslo udávající první (výchozí) hodnotu pro nová číslování; při číslování nových položek nebude nikdy použito nižšího čísla; Je-li již řada obsazena je použito dalšího volného vyššího čísla nebo dalšího nejvyššího čísla v závislosti na nastavení v čáati gappy; Uvedení je povinné;

step-size - velikost kroku při číslování; výchozí hodnota při neuvedení je 1; jde o celé číslo, které je přičítáno jako inkrement pro získání dalšího číla nové položky; Uvedení je nepovinné;

gappy - vlastnost s logickou hodnotou true | false, která říká, zda jsou povoleny mezery v číselné řadě či nikoli; nastavení gappy: true; umožňuje "děravou" číselnou řadu (viz též nastavení parametru gappy u definice dokumentu;

condition-ref - umožňuje, v kombinaci s částí condition-value, podmínit vložení hodnoty, inkrement; při uvedení částí condition-... je hodnota generována pouze v případě splnění podmínky {condition-ref} = {condition-value}; Přičemž condition-ref obsahuje relativní odkaz na prvek v daném dokumentu;

condition-value - umožňuje, v kombinaci s částí condition-ref, podmínit vložení hodnoty, inkrement; při uvedení částí condition-... je hodnota generována pouze v případě splnění podmínky {condition-ref} = {condition-value}; Přičemž condition-value obsahuje srovnávací hodnotu v podobě zápisu konstanty a pokud odkazovaný prvek v condition-ref tuto hodnotu odkazuje, inkrement se při uložení nového dokumentu provede;

Můžeme tedy například uvést následující zápis ve vlastnosti autoidentity:

start-at: 5000; step-size: 2; gappy: false; condition-ref: ../typ_dokladu; condition-value: A;

Nastavení způsobí, že se v daném číselném prvku při uložení první instance daného dokumentu přiřadí číslo 5000. Druhému dokumentu pak 5002 atd. (v praxi to samozřejmě smysl příliš nemá, ale zde je demonstrován důsledek nastavení step-size:2;). Vyskytne-li se z důvodů současného přístupu dvou uživatelů v řadě mezera např. na pozici 5004, bude dalším uložením zaplněna, protože je nastaveno gappy: false;. Prvek bude po uložení nové instance dokumentu zachován na defaultní hodnotě (většinou nula) v případě, že typ dokladu není 'A'. Teprve až při uložení dalšího dokumentu s dokladem typu A dojde k dalšímu inkrementu. Dá se to s výhodou použít tam, kde potřebujeme držet dvě číselné řady, kdy uděláme další prvek s nastavením autoidentity, kde ovšem nastavíme například "osmičkovou řadu":

start-at: 8000; step-size: 2; gappy: false; condition-ref: ../typ_dokladu; condition-value: B;

Pak již stačí jen zajistit, že na dokladech typu B bude zobrazován obsah tohoto nového prvku a nikoli původního; Opět platí, že step-size většinou není uváděn a zde je pouze demonstrativně nastaven na hodnotu 2.

Obecně platí, že nové instance opakování v rámci dokumentu s uvedeným prvkem s nastavením autoidentity má stejné chování jako celá instance nového dokumentu.

V průběhu existence databáze je pak možné, například při přechodu na nový rok, navýšit výchozí číselnou hodnotu a zajistit tak nový počátek číslování nad již existujícími položkami. Vzniknuvší mezera pak není zaplňována ani při nastavení gappy:false;. Toto nastavení mezeru hlídá počínaje počátečním číslem ve vlastnosti start-at .

Číslování v rámci dokumentu není otázkou pro autoidentity. Toto číslování je prováděno automaticky v každém dokumentu a přesunem v pořadí se čísla u jednotlivých položek mění. Obsah prvku nastaveného jako autoidentity zůstává po uložení stejný i po změně v pořadí opakování, kde se identifikátor objevuje.

Pozor ještě na jednu věc. Vlastnost autoidentity automaticky nezajišťuje rovněž i unikátnost hodnoty (i když je často jejím důsledkem). Může se totiž stát, že pokud na to má uživatel dostatečné oprávnění, může do prvku s automatickou identitou "natvrdo" napsat i hodnotu, která již jinde v jiné instanci dokumentu téhož typu existuje nebo tuto hodnotu může (i omylem) naimportovat z externích dat. Pokud je třeba jedinečnost zajistit, je třeba nastavit ještě vlastnost unique.

Potenciální vlastnické uzly

Vlastnost autoidentity je možné uvést u následujících uzlů:

ElementDef - šablona prvku (kmenová definice) - jako parametr;

element - prvek (segment uvnitř definice);