Výrazy pro filtry

Upravit obsah stránky

Na různých místech v XDS definici je třeba filtrovat seznam dostupných dokumentů pro omezení dostupné množiny. Filtry jsou zadávány ve formě srovnávacích, logických výrazů specifikujících podmínky vyběru. Výrazové filtry jsou používány především ve:

bullet

vlastnosti filter-express v substruktuře admin-filter pro přístupová omezení;

bullet

části filter složené vlastnosti lexicon prvku;

bullet

vlastnosti source-filter pro omezení nabídky zdroje source;

Zde je využíváno tzv. propojovacíchinstrukcí, což je výraz uzavíraný mezi dvojtečkami (s výjimkou admin-filtru, kde místní odkazy jsou chápány v podstatě jako odkazy do filtrovaných položek a propojovací instrukce není zapotřebí). Typ cizího (zdrojového) dokumentu je buď dán kontextem použití výrazu (dlekonkrétní vlastnosti) nebo je možné typ dokumentu vepsat mezi dvojtečky do zmíněné propojovací instrukce.

V syntaxi se tedy vyskytují 2 v zásadě různé odkazy do dokumentu:

bullet

1. odkaz bez propojovací instrukce (odkaz do místního dokumentu -často relativní, pokud jej vlastnost nevylučuje)

bullet

2. odkaz s propojovací instrukcí (vč. příp. jména dokumentu) - propojení na jiný dokument

Odlišení odkazů v jiném dokumentu od "místních" odkazů je provedeno vymezením zmíněné propojovacíinstrukce. Tato instrukce se do výrazu zapíše mezi dvojtečky před samotným odkazem.

Odkazy do cizích dokumentů mohou ovšem být navázány i na výběrové uzly a může tak docházet k propojování dokumentů pomocí provedených výběrů. Existují dva způsoby či směrypropojení:

bullet

klíčové slovo join - využití místních uzlů - výběr ve zdrojových dokumentech

bullet

výraz ve sl. závorkách {...} - použití uzlů cizích dokumentů - výběr v navázanýchdokumentech

Nejlépe ukážeme použití na příkladu. Uvažujme dokumenty kontakt, smlouva a faktura. Dokumenty smlouva a faktura mají každý (mimojiné) jeden výběrový uzel na předchozí dokument formou stejnojmené oblasti. Tj. ve smlouvě je uzel kontakt a na faktuře je uzel smlouva. Dále zvažujme, že chceme například na faktuře vybírat jen ty smlouvy, jejichž klient si faktury přeje vystavovat. Pro jednoduchost uvažujme, že služby ve struktuře services kopírují skladbu obsahu ve struktuře content. Pak ve vlastnosti source-filter zapíšeme následující výraz:

/kontakt join /nastaveni/vystavovat_faktury == true

Ve výrazu source-filterje výchozím dokumentem dokument zdrojový - u faktury je tímto zdrojem smlouva. Uděláme-li tedy odkaz /kontakt odkazujeme na místní výběrový uzel kontakt výchozího dokumentu smlouva. Protože se však kýžená informace o zasílání faktur nalézá až vsamotném dokumentu kontakt (pro náš příklad předpokládáme, že do smlouvy není vyvedena). Proto se pomocí klíčového slova join musíme přesunout až tam a z oblasti obsahující nastavení vybrat logický (ano/ne) prvek o vystavování faktur.

Nyníuvažujme o filtrování přístupnosti kontaktů pro finanční oddělení. Předpokládejme, že chceme zpřístupnit jen ty kontakty, které mají uzavřenou smlouvu. Pak do parametru admin-filter u dokumentu kontakt zapíšeme (do atributufilter-express) následující výraz:

{:smlouva:/kontakt}/sjednani/stav_smlouvy == 'uzavrena'

Je zde použito propojení na návazný dokument - v tomto případě na dokument smlouva. Jak bylo uvedeno, výchozím dokumentemje kontakt. Ten je se smlouvou propojen pomocí jejího výběrového uzlu kontakt. Tato skutečnost se použije uvnitř závorek v prpojovacím výrazu. Dále za závorkou se již nacházíme v dokumentu smlouva a můžeme využívat jejich hodnot. Uvažujme ale dále o možnosti pro finanční oddělení, které se stará oplatby za faktury a předpokládejme potřebu přístupu jen k těm kontaktům, které mají nezaplacenu alespoň jednu fakturu. Zde budeme kombinovat obě syntaxe:

{:faktura:/smlouva join /kontakt}/platba/stav == 'neuhrazena'

Zde se potřebujemepřesunout až do dokumentu faktury. Protože jde o návazný dokument (nikoli tedy zdrojový), uvedeme jej do dvojtečkové instrukce v závorce. V této instrukci musí být jméno toho dokumentu, ke kterému se potřebujeme dostat. Pak musíme popsat celou cestu. Výchozím bodem je tedy faktura. Ta má výběrovýuzel smlouva. Použití join nás přenáší do smlouvy. Smlouva má výběrový uzel kontakt, který nás dovede k cíli. Poslední segment odkazovaný ve složené závorce tedy musí být výběrovým uzlem, který vybírá z typu dokumentu jež je pro daný výraz výchozím. To je zásadní podmínkapoužití odkazu na návazné dokumenty pomocí složené závorky. Za závorkou se již nacházíme v návazném dokumentu faktura a můžeme využít potřebného údaje o stavu zaplacení faktury.

Klíčové slovo join můžeme navázat nejen ve složených závorkách, ale také na relativní odkazna výběrový uzel, pokud filtrovací výraz relativní odkazy vzhledem ke své povaze umožňuje. Například tak můžeme v jiné kmenové oblasti smlouvy provést odkaz na uzel kontakt a přejít dále k údajům v kontaktu:

../kontakt join /nastavení/vystavovat_faktury

Pojďme se podívat na stručný přehled podmínek použití slova join a výrazu složených závorek:

bullet

Složené závorky mohou být pouze na začátku odkazu nikoli uprostřed a nikoli za klíčovým slovem join.

bullet

Obsah složených závorek je vždy uvozen jménem cílového návazného uvedeného ve dvojtečkové instrukci.

bullet

Ve výrazu v závorkách může být použito klíčové slovo join, jde jen o to, aby poslední krok posledního odkazu reprezentoval výběrovýuzel, jehož zdrojovým typem je buď vlastnický dokument výrazu (pokud před závorkou není instrukce) a nebo dokument zdrojový (pokud instrukce uvedená je)

bullet

Po závorkách vždy následuje odkaz na službu výchozího dokumentu

bullet

Odkaz před klíčovým join musí odkazovat na výběrový uzel, který určuje destinaci propojení realizovaného klíčovýmslovem join.

Pro filtrovací výrazy jsou dále k dispozici dále dvě specializované funkce:

bullet

CurrentUser - zpřístupňuje údaje oaktuálně přihlášeném uživateli; jediným argumentem je prostý XPath odkaz do v XDS definované struktury dokumentu sloužícího jako registr uživatelů;

bullet

userId - vrací id aktuálně přihlášeného uživatele, které je použitelné jako číslo autora;

Syntaxe povoluje všechny součásti uvedené v příloze Přehled použitelných operátorů výrazů.