XPRESS language v Sun IdM (Oracle Waveset)

V tomto článku vám představím XPRESS language. Nejdřív si zde ukážeme, jaký typ programovacího jazyka XPRESS je a jakou má syntaxi. Dále si jazyk popíšeme a ukážeme, k čemu se používá. V textu je také připraveno několik ukázek základních příkazů a úryvky z kódu.

Co to je?

XPRESS language je funkcionální programovací jazyk se syntaxí založenou na XML. Jelikož je XPRESS funkcionální, tak se řadí do třídy neprocedurálních (deklarativních) jazyků. Všechny akce jsou tedy definovány jako funkce se vstupními argumenty a s výstupem. Každá funkce buď vrací hodnotu, nebo provede operaci nad jedním z argumentů.

XPRESS se používá v Oracle Wavesetu (či v Sun Identity Manageru) ve formulářích, pravidlech a workflow. Většinou se v něm píší jednoduché výpočty či logické podmínky, ale je zde možné volat i funkce z Javy či Javascriptu.

Pro tyto operace by bylo možné použít i například Javu. Ale je zde několik důvodů proč byl použit XPRESS:

Prefixová notace

Jak jsem zmínil v předchozí kapitole, všechny akce jsou v XPRESSu definovány jako funkce. Není zde tedy rozdíl mezi voláním funkce a tím, co se např. v jazyku C nazývá výrazovým operátorem („+“,“-“). Tím pádem zde vzniká způsob zápisu zvaný prefixová notace. Například jednoduchý výraz zapsaný v jazyce C (používajícím infixovou notaci) vypadá takto:

x == 5

Pokud bychom ovšem použili prefixovou notaci, vypadal by takto:

== x 5

A pokud by byly možné pouze funkce, vypadalo by to takto:

equals(x, 5)

XML syntaxe

K zápisu je využívána XML syntaxe. Názvy XML tagů jsou jednotlivé funkce, které mají být zavolány. Vložené prvky jsou pak argumenty dané funkce. Pro každý prvek je zde otevírací a uzavírací tag (např. ). Pokud nejsou ve funkci žádné argumenty, lze použít i tento zápis: .

Příklad zápisu

<add> 
  <ref>counter</ref> 
  <i>10</i> 
</add>

V tomto příkladu tedy tag znázorňuje, že voláme funkci pojmenovanou add, používanou pro sčítání. Této funkci jsou předány dva argumenty:

Hodnota vrácená funkcí add je tedy hodnota 10, zvětšená o hodnotu proměnné counter.

Základní funkce

Zde ukáži několik příkladů základních funkcí z XPRESS jazyku.

Funkce list

<list>
   <s>apples</s>
   <s>oranges</s>
   <s>wiper blades</s>
</list>

Touto funkcí vytvoříme list. Jako argumenty bere funkce prvky, které v daném listu budou. To jsou v tomto případě Stringy, definované funkcí s.

Zde je pár příkladů funkcí pro práci s listem:

Aritmetické funkce – add, sub, mult, div, mod

V XPRESSu je samozřejmě možné provádět základní matematické operace jako sčítání (add), odčítání (sub), násobení (mult) a dělení (div). Je zde i funkce pro modulo (mod). Všechny tyto funkce přijímají libovolný počet argumentů a provádějí danou operaci nad nimi. Všechny argumenty, které nejsou typu integer, jsou na integer převedeny.

<mult> 
  <i>7</i> 
  <i>3</i> 
  <i>2</i> 
</mult>

Tato funkce provede násobení s čísly 7,3 a 2, výsledek je tedy 42.

Logické výrazy

Jsou zde samozřejmě i funkce pro logické výrazy. Zastoupeno je hodně klasických výrazů, s jakými se setkáte v ostatních programovacích jazycích.

Několik příkladů:

Většina těchto funkcí vrací 1 či 0, tedy true nebo false. Výjimkou jsou funkce cmp, ncmp, and a or.

V případě cmp a ncmp vrací pozitivní integer, pokud je hodnota prvního argumentu lexikograficky menší než druhého argumentu, negativní integer v opačném případě a 0, pokud jsou si argumenty rovny.

Pokud se and vyhodnotí jako true, je vrácena hodnota posledního argumentu, jinak je vrácena nula.  Pokud se or vyhodnotí jako true, je vrácena hodnota prvního argumentu, který byl vyhodnocen jako true. Jinak je také vrácena nula.

Funkce pro manipulaci se stringem

I pro manipulaci se stringy je zde připraveno pár základních funkcí. Zde je pár příkladů:

 Podmínka, iterační funkce a block

Funkce block

Slouží k seskupení více příkazů do bloku. Hodnota tohoto bloku je hodnota jeho posledního argumentu.

<block>
    <s>Hello there!</s>
    <add> <i>100</i> <i>2</i> </add>
    <i>42</i>
</block>

Hodnota vrácená touto funkcí je 42.

Podmínka

Velmi podobná if funkcím z Javy či C. Název funkce je cond.

<cond>
     <gt>
      <ref>age</ref>
       <i>40</i>
     </gt>
   <s>old</s>
   <s>young</s>
</cond>

Iterační funkce

Funkce se nazývá dolist. Iteruje přes prvky v listu. Hodnota proměnné zadané v atributu name je hodnota, kterou lze referovat prvek z listu ve smyčce. Hodnota prvního argumentu je list, přes který se iteruje, zbytek jsou výrazy, které se mají provést.

<dolist name=’el’>
  <ref>someList</list>
  <cond>
    <gt>
      <ref>el</ref>
      <i>10</i>
    </gt>
    <ref>el</ref>
  </cond>
</dolist>

Funkce pro práci s Javou a Javascriptem

Invoke

Zavolá metodu na Java objektu či třídě.

Statická metoda

<invoke class=’class name’ name=’method name’>
   <!--method argument 0 -->
   <!--method argument n-->
</invoke>

V atributu class je předáno jméno třídy, v atributu name jméno metody. Argumenty funkce jsou pak jednotlivé argumenty pro metodu.

Instanční metoda

<invoke class=’method name’>
   <!--the object to invoke the method on -->
   <!--method argument 0 -->
   <!--method argument n-->
</invoke>

V atributu name je předáno jméno metody (v dokumentaci Oracle je špatně napsáno, že se jméno dává do atributu class). První argument je jméno objektu a další argumenty funkce jsou argumenty posílané do metody.

New

Vytvoří instanci Java třídy. Jméno třídy je předáno v atributu class a musí být zapsáno s úplnou cestou (např. java.util.ArrayList).

<new class=’classname’/>
  <!--constructor argument 0-->
  <!--constructor argument n-->
</new>

Script

Do této funkce lze vložit fragment JavaScriptu. Hodnota této funkce je hodnota posledního výrazu v JavaScriptu. Uvnitř skriptu lze použít objekt env k přistupování k proměnným v hostitelské aplikaci.

<script>
   var arg1 = env.get(’arg1’);
   arg1 + 100;
</script>

Závěr

V článku byl představen jazyk XPRESS a ukázany základní funkce. Pokud budete potřebovat další informace či funkce, doporučuji se podívat do dokumentace od Oraclu (http://docs.oracle.com/cd/E19225-01/821-0378/bvbps/index.html), ze které jsem ostatně vycházel i já. Případně můžete kontaktovat i mě na adrese adam.lenger@bcvsolutions.eu.

Like this:

Další témata