Actiuni

La sfarsitul analizei mesajului, daca aceasta s-a incheiat cu un rezultat pozitiv, serverul incepe sa deruleze diferitele actiuni specificate in limbaj.

Un atribut optional al nodurilor action este lang_skip. Daca se doreste ca serverul sa sara peste o actiune, se foloseste acest atribut cu valoarea true.

MySQL

<action>
 <actionType>MySQL</actionType>
 <MySQLquery>CALL app_UsersColumns_setDefault($/id$,'$/panelName$',$/userId$,'$/prefix$',$/cid$, '');</MySQLquery>
</action>

Actiunea realizeaza o interogare de tip update in baza de date. Interogarea derulata este cea din nodul MySQLquery. Acest tip de actiune trimite un raspuns  care contine numarul de randuri afectate de interogarea sql in nodul /x/r. Nodul /x/opid contine date din nodul opid din mesajul analizat, iar atributup op contine numele cuvantului din care s-a realizat actiunea.

<x t='Reply' op='UpdateUserColumns'>
   <opid>upd_01</opid>
   <r>54</r>
</x>

MySQLInsert

Aceasta actiune are un nod MySQLquery in care se afla o interogare de tip insert care se presupune ca nu va returna nici un set de rezultate.

<preaction>
  <actionType>MySQLquery</actionType>
  <MySQLquery>INSERT INTO table1(col1, col2) VALUES('v1','v2')</MySQLquery>
  <LastInsertId>oid</LastInsertId>
</preaction>

Acest tip de actiune trimite un raspuns  care contine numarul de randuri afectate de interogarea sql in nodul /x/r. Nodul /x/opid contine date din nodul opid din mesajul analizat, iar atributup op contine numele cuvantului din care s-a realizat actiunea.Din baza de date se va retrage automat ultimul id inserat care va fi transmis inapoi in raspuns in nodul li.

<x t='Reply' op='insertRow' >
   <opid>ins_01</opid>
   <r>1</r>
   <li>2455</li>
</x>

 MySQLreply

Actiunea are rolul de a realiza o interogare de selectie (SELECT FROM WHERE) in baza de date, de a formata rezultatul si-l trimite ca raspuns catre aplicatia-client.

<action>
  <actionType>MySQLreply</actionType>
  <MySQLreply>
    <header></header>
    <footer></footer>
    <query>
      <fieldNo>6</fieldNo>
      <fields> cls,vol,date_format(uti,"%Y-%m-%d"),hig,low,opn</fields>
      <table> import_TradesSummary</table>
      <where> true</where>
      <where> and sym='$/sym$' </where>
      <where> order by `uti` asc </where>
    </query>
    <result>
      <format>xml</format>
      <fieldList>
        <parentNode><name>x</name><attr>t='List' p='$/p$' o='$/o$'</attr></parentNode>

        <nodes><name>data</name><attr></attr></nodes>

        <field><name>close</name><attr></attr></field>
        <field><name>volume</name><attr></attr></field>
        <field><name>date</name><attr></attr></field>
        <field><name>high</name><attr></attr></field>
        <field><name>low</name><attr></attr></field>
        <field><name>open</name><attr></attr></field>

      </fieldList>
    </result>
  </MySQLreply>
</action>

In nodul /action/MySQLreply/query se afla informatiile necesare pentru interogarea SQL.

SELECT cls,vol,date_format(uti,"%Y-%m-%d"),hig,low,opn FROM import_TradesSummary WHERE true and sym='DEROU' order by `uti` asc

Mesajul de raspuns este formatat conform nodului /action/MySQLreply/result. Nodul format determina o formatare de tip xml.

Nodul /fieldList/parentNode/name contine numele nodului de baza, iar /fieldList/parentNode/attr atributele continute de acel nod.

Nodurile care reprezinta randurile din setul de rezultate sunt organizate au numele definit in /fieldList/nodes/name iar atributele acestui nod sunt specificate in /fieldList/nodes/attr.

Nodul /fieldList/field este repetabil si defineste numele si atributele nodurilor care contin datele din fiecare coloana a setului de rezultate.

Daca raspunsul trebuie sa aiba un header si/sau un footer, aceste date se gasesc in nodurile /action/MySQLreply/header respectiv /action/MySQLreply/footer.

<x t='List' p='tradePannel' o='tradeTable'>
  <data>
    <close>13.5</close>
    <volume>1254</volume>
    <date>12.05.2016</date>
    <high>14.1</high>
    <low>13.3</low>
    <open>13.3</open>
  </data>
  <data>
   <close>13.3</close>
   <volume>344</volume>
   <date>13.05.2016</date>
   <high>14.3</high>
   <low>13.0</low>
   <open>13.8</open>
  </data>
  ...
</x>

MySQLMultilevel

Functionarea este asemanatoare cu cea din actiunea MySQLreply de mai sus. diferenta consta in formatarea rezultatului. In timp de actiunea precedenta ofera un rezultat organizat intr-un format tabelar, aceasta este capabila sa organizeze rezultatul intr-o forma arborescenta dictata de definitiile aflate in fisierul MultilevelFormatConfig.xml. Pentru mai multe informatii vezi Formatarea arborescenta a datelor.

<action>
  <actionType>MySQLMultilevel</actionType>
  <MySQLreply>
    <query>
      <fieldNo>11</fieldNo>
      <fields>b.`Record_id`,cln_Record_category(b.`Record_id`), b.`id`, b.`field`, b.`ind1`, b.`ind2`, bi.`id`, bi.`subfield`, bi.`value`,b.`lang`,bi.`ath_id`</fields>
      <fieldNames>id_object,cat_object,id_field,tag_field,ind1_field,ind2_field,id_subfield,name_subfield,value_subfield,lang_field,aut_subfield</fieldNames>
      <table>`cln_RecordField` As b, `cln_RecordSubfield` as bi</table>
      <where>bi.`RecordField_id`=b.`id`</where>
      <where> AND b.`Record_id`='$/id$'</where>
      <where> ORDER BY b.`id`</where>
    </query>
    <result>
      <parentNode>
        <name>x</name>
        <attr>t='SetMLForm' p='$/p$' o='$/o$'</attr>
      </parentNode>
      <row>Unimarc</row>
    </result>
  </MySQLreply>
</action>

MySQLProc

Nodul MySQLProc contine un apel de procedura MySQL, mai putin cuvantul cheie CALL.

Nodul save este optional si repetabil. Prin intermediul acestui nod se pot salva valori din pozitii fixe din setul de rezultate in memoria privata.

Nodul save are patru posibile atribute:

  • to – este obligatoriu si specifica sub ce cheie sa se salveze valoarea in memoria privata.
  • rsi – optional, este indexul de set de rezultate. Valoarea implicita este 0 (zero)
  • ri – optional, este indexul de rand. Valoarea implicita este 0 (zero)
  • ci – optional, este indexul de coloana. Valoarea implicita este 0 (zero)
<preaction>
  <actionType>MySQLProc</actionType>
  <MySQLProc>marc_Record_insert('cln','I','$/cat$','$/rlb$')</MySQLProc>
  <save rsi="0" ri="0" ci="0" to="rlb"/>
</preaction>

ResultSetExtract

Functionarea acestei preactiuni este similara MySQLProc, diferenta fiind ca datele se salveaza dintr-un set de rezultate (salvat de obicei in memoria privata).
Acest set de rezultate este un obiect de tipul Vector<Vector<Vector<String>>>.

<preaction>
  <actionType>ResultSetExtract</actionType>
  <resultsets>$MEM[ressets]$</resultsets>
  <save rsi="0" ri="0" ci="0" to="rlb"/>
</preaction>

Reply

Este una din cele mai simple actiuni. Aceasta trimite un raspuns catre aplicatia client. Acest raspuns este complet continut in nodul msgContent.

 <action>
   <actionType>Reply</actionType>
   <msgContent>
     <x t="run">$/opid$</x>
   </msgContent>
 </action>

callMethod

Actiunea permite apelarea metodelor statice din clasele java incarcate/incluse in server. Pentru interpretarea parametrilor vezi Constantele si memoria privata. Nodul paramsType serveste cast-ului necesar parametrilor care trebuie convertiti la tipurile de date de care are nevoie metoda apelata.

Aceasta actiune este depreciata, ea fiind pastrata strict pentru motive de compatibilitate. Actiunea a fost inlocuita cu mult mai versatila actiune callMethod+.

<preaction>
  <actionType>callMethod</actionType>
  <class>com.package.CustomClass</class>
  <method>customMethod</method>
  <params>param1,param2,param3,param4</params>
  <paramsType>String,String,int,long</paramsType>
</preaction>

callMethod+

Actiunea ofera posibilitatea apelarii metodelor din clasele java incarcate/incluse in server. Pentru apelarea metodelor statice nodul instance are valoarea static. Singura instanta de obiect suportata este instanta clasei nts.EngineExt, fiind instanta furului de executie responsabil de conexiunea curenta cu aplicatia-client. Pentru a utiliza aceasta instanta, nodul instance trebuie sa aiba valoarea this.engine.

Lista de parametri care va fi folosita in apelul de procedura se afla in nodul /params. In acest nod, pentru fiecare parametru exista un nod param. Valoarea acestui nod este interpretata conform regulilor pentru constante si memoria privata. Atributele nodurilor param sunt name, care este optional si ofera doar informatii despre parametru, si type, care permite, daca datele sunt de tip String, cast-ul in alt tip de date, tip utilizat de apelul de metoda.

Nodul /saveTo este optional si specifica cheia sub care obiectul rezultat din rularea metodei va fi stocat in memoria privata.

<action>
  <actionType>callMethod+</actionType>
  <class>scream.jreports.ReportExporter</class>
  <method>runReport</method>
  <instance>static</instance>
  <params>
    <param name="data sets" type="Vector">$MEM[queryRes]$</param>
    <param name="data set index" type="int">0</param>
    <param name="column names" type="String">inv,bco,tit,sit,loc,reg,cot,prt,mon,rmf,not</param>
    <param name="library info" type="Vector">$MEM[libRes]$</param>
    <param name="domain name" type="String">$DOMAIN$</param>
    <param name="report name" type="String">raportprocesinventar</param>
    <param name="output dir" type="String">$PDF_DIR$</param>
    <param name="user id" type="String">$UID$</param>
    <param name="message id" type="String">$MID$</param>
    <param name="output format" type="String">$/fmt$</param>
    <param name="param names csv" type="String">INVENTAR_INCEPUT,INVENTAR_SFARSIT,TOTAL_COUNT,MAIN_TITLE</param>
    <param name="param values csv" type="String">$MEM[inin]$,$MEM[insf]$,$MEM[total_count]$,Proces verbal de Predare-Primire</param>
    <param name="param csv separator" type="String">,</param>
    <param name="parameter map" type="HashMap">$MEM[params]$</param>
  </params>
  <saveTo>errorCode</saveTo>
</action>

MemStore

Este una dintre metodele specializate de manipulare a memoriei private de analiza a mesajelor. Prin intermediul acestei metode se pot stoca diverse valori in aceasta zona de memorie, cu intentia de a folosi aceste valori in alte zone de analiza a mesajelor. Astfel valoarea din nodul value este stocata sub cheia specificata in nodul key.

<preaction>
  <actionType>MemStore</actionType>
  <key>pre</key>
  <value>$/pre$</value>
</preaction>

MemDispose

Este o alta metoda specializata de manipulare a memoriei private de analiza a mesajelor. Prin intermediul acesteia se pot sterge valori in functie de cheia secificata in nodul key.

<preaction>
  <actionType>MemDispose</actionType>
  <key>pre</key>
</preaction>

 svn

Actiunea realizarea unui commit intr-un repository svn pentru un fisier insotit de un mesaj.

<action>
  <actionType>svn</actionType>
  <file>$MEM[marcoutput]$</file>
  <msg>delete subfield:$/id$ uid:$UID$</msg>
</action>

SystemCall

Actiunea permite rularea de comenzi de sistem.

<action>
  <actionType>SystemCall</actionType>
  <cmd>svn commit -m "delete subfield:$/id$ uid:$UID$" "$MEM[marcoutput]$"</cmd>
</action>
Sidebar