Výrazy pro filtry

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:

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

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

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

Zde je využíváno tzv. propojovacích instrukcí, 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 (dle konkré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:

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

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ěry propojení:

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

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

Nejlépe ukážeme použití na příkladu. Uvažujme dokumenty kontakt, smlouva a faktura. Dokumenty smlouva a faktura mají každý (mimo jiné) 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-filter je 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ž v samotné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 atributu filter-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 dokumentem je 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á o platby 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řebujeme př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ínka použ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í odkaz na 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:

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

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

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)

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

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

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

CurrentUser - zpřístupňuje údaje o aktuá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ů;

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ů.


Kmen definiceSpecifikace skupin dokumentůDefinice šablon prvkůDefinice šablon oblastíSyntaxe odkazů na segmentyPodmíněnost segmentůVýrazy pro filtrySlužby - propojování dokumentů