7.8 XForms

MISP2 portaal kasutab sisemiselt X-tee andmeteenuste kasutajaliideste loomiseks ja käivitamiseks XForms tehnoloogiat. XForms on W3C poolt standardiseeritud uue põlvkonna vormikirjelduskeel.

XForms on XML-il põhinev standard, mis võimaldab kirjeldada teenuse kasutajaliidese vorme, samuti teenuse SOAP formaadis sisendeid/väljundeid ja nende koostoimimise loogikat.

Lisaks MISP2 rakendusele on XForms tehnoloogia kasutusel ka eesti.ee portaalis päringute esitluskihi (PEPE) komponendina, kus selle tehnoloogia baasil on samuti loodud mitmed X-tee teenuste liidesed.

XForms on mõeldud kasutamiseks mingi teise XML-keele sees, enamasti on selleks keeleks XHTML. See tähendab, et tüüpiline XForms fail sisaldab segamini XHTML ja XForms märgendeid.

XForms on üles ehitatud MVC (model-view-controller) põhimõttel. See tähendab, et andmed ja nende valideerimisreeglid on kirjeldatud mudelis, mis tavaliselt asetseb <xhtml:head> sektsioonis, aga  andmete kuvamine ja sisestamine on pikitud muude märgendite vahele <xhtml:body> sektsioonis.

Edasiseks tutvumiseks XForms tehnoloogiaga: lühijuhend MISP2 rakenduses genereeritud XForms-ide baasil uue XForms-kompleksteenuse loomiseks: http://x-road.ee/misp2/docs/est/misp2_kompleksteenuste_koostamine.pdf

Lisainfot XForms standardi kohta vaata aadressilt: https://www.w3.org/MarkUp/Forms/

XForms toe realiseerimiseks on MISP2 rakenduses integreeritud Orbeon XForms Forms Runner komponent. Lisainfot Orbeon XForms kohta vaata aadressilt: https://doc.orbeon.com/xforms/tutorial/introduction.html

Selleks, et alustada uue kompleksteenuse koostamist MISP2 rakenduses peab kõigepealt lisama uue komplekskogu. Seda saab teha portaali halduri või teenuste halduri rollis kasutaja menüüvaliku „Teenused“ alt:

1

Komplekskogu haldamise lehel peab sisestama komplekskogu nime ja kirjelduse ning vajutama nupule „Salvesta“.

2

Kui komplekskogu on juba lisatud, siis peab see olema nähtav komplekskogude nimekirjas:

 3

Vajutades komplekskogu nimele saame vaadata antud andmekogu kompleksteenuste nimekirja. Uue komplekskogu puhul on nimekiri tühi:

4

Nupp „Lisa uus“ viib uue kompleksteenuse metaandmete lehele, kus saab sisestada uue teenuse süsteemse nime, kirjelduse ja XForms URL-i.

5

XFormsi URL on kasulik juhul, kui teenuse XForms kirjeldus on juba olemas ja seda saab laadida sisestatud URL-lt.

Süsteemne nimi peab olema formaadis teenusenimi.vX, kus X on versiooni number.

 Kui uus teenus on salvestatud, ilmub see nähtavale komplekskogu teenuste nimekirjas:

6

 Vajutades teenuse nimele ilmub ekraanivorm teenuse XForms kirjeldusega. See on üks võimalus, kus teenuse vormi saab arendada. Teine variant on kasutada oma lemmik tekstiredaktorit ja pärast kasutades XForms URL-i laadida loodud kirjeldus rakendusse.

Kopeerime esimese lihtteenuse XForms kirjelduse (aktorstest-db01.personList.v1) uue kompleksteenuse aktorstest-complex.person-complex vormile. Saadud dokument näeb välja nagu tavaline XML/HTML markup-ga dokument, kus on sees <xforms:model> ja teised XForms-spetsiifilised elemendid.

7

Joonis 6 XForms kirjeldus tekstiredaktoris

Lühiülevaade failist:

Fail algab XML faili deklaratsiooniga.

·         Sellele järgneb <xhtml:html> märgend. Selle märgendi juures defineeritakse ära kõikide failis kasutatavate nimeruumide prefiksid.

·         <xhtml:head> sektsioon algab nagu tavaliselt <xhtml:title> märgendiga, mis määrab vormi pealkirja. See on genereeritud sinna WSDL failis oleva teenuse <xtee:title> märgendi põhjal. Pealkirjale järgneb <xforms:model>, kus defineeritakse kolm põhilist asja: andmestruktuurid, (<xforms:instance>), valideerimisreeglid (<xforms:bind>), päringud (<xforms:submission>).

·         <xhtml:body> sektsioon algab samuti pealkirjaga, mis seekord on pandud <xhtml:h1> märgendi sisse. See genereeritakse samuti <xtee:title> põhjal. Sellele järgneb teenuse lühitutvustus <xhtml:h1> märgendi sees. <xforms:switch> tähistab päringuvormide algust.

Kui nüüd salvestame teenuse vormi seda muutmata, siis saame tavalise lihtteenuse.

Kompleksteenuse saamiseks tuleb kopeerida aktorstest.personDetails.v1 teenuse XForms-st järgmised elemendid:

·         <xforms:instance> (välja arvatud id-ga temp, kuna see on juba olemas)

·         <xforms:bind>

·         <xforms:submission>

o   Kõik eelnevad peab kopeerima teenuse aktorstest-complex.isikuandmed.v1 XForms-i <xforms:model> alla. Järjekord ei ole oluline.

·         <xforms:case id="personDetails.response">

·         See läheb teenuse XFormsi <xforms:switch> alla.

Niimoodi saame XForms-kirjelduse, mis sisaldab kahe teenuse käivitamiseks vajalikke sisuelemente.

Nüüd tuleb luua trigger (e. nupp) <xforms:repeat nodeset="person"> elemendi alla, millega saaks esimese teenuse väljundist käivitada järgmise teenuse. See tuleb luua elemendi:

 <xforms:case id="personList.response"> alla.

 Enne seda võib muuta <xforms:repeat nodeset="person"> genereeritud id väärtust, mis kasutatakse edaspidi triggeri kirjelduses. Selles näites on see person_index(<xforms:repeat nodeset="person" id="person_index">).

 Triggeri kood:

<xforms:trigger appearance="minimal">

  <xforms:label xml:lang="et">Detailid</xforms:label>

  <xforms:label xml:lang="en">Details</xforms:label>

  <xforms:action events:event="DOMActivate">

    <xforms:setvalue ref="instance('personDetails.input')/SOAP-ENV:Body/tns:personDetails/request/ssn" value="context()/ssn"/>

    <xforms:send submission="personDetails.submission"/>

  </xforms:action>

</xforms:trigger>

Triggeri alamosad:

·         appearance="minimal" – määrab, et trigger näeb välja lingina, mitte nupuna

·         <xforms:label> – määrab kasutajaliideses näidatava teksti. Defineeritud on kaks teksti: eesti (xml:lang=“et“) ja inglise (xml:lang=“en“) keele jaoks.

 ·         <xforms:setvalue> omistab personDetails teenuse SOAP-sõnumi sisendi (personDetails.input), väljale ssn väärtuse käesolevalt realt (st. realt, mille kasutaja valib), väljalt „ssn“ (ehk value atribuudi väärtus) nupu vajutamise evendiga (event DOMActivate).

 

·         <xforms:send> – saadab SOAP-päringu kasutades xforms:submission-it

 Teise teenuse vastusest oleks hea minna tagasi eelmise nimekirja juurde. Selleks muudame

 <xforms:case id="personDetails.response"> all „Tagasi“ nupu selliseks, et ta suunaks

 tagasi eelmisele <xforms:case>-le.

 Muudame triggerit <xforms:group class=“actions“> elemendi all järgmiselt:

 ·         <xforms:toggle> case atribuudi väärtuseks paneme personList.response

 ·         Muudame <xforms:label> tekstid vastavateks.

 Tulemuseks on selline kood:

<xforms:group class="actions">

  <xforms:trigger>

    <xforms:label xml:lang="et">Tagasi</xforms:label>

    <xforms:label xml:lang="en">Back</xforms:label>

    <xforms:toggle events:event="DOMActivate" case="personList.response"/>

  </xforms:trigger>

</xforms:group>

 

8

Tulemuseks on kompleksteenus, millega saab isiku nime siestades (vorm 1) vaadata isikute nimekirja leitud nimedega (vorm 2) ja sealt lingiga „Detailid“ edasi minna vormile 3, kus näidatakse valitud isiku detailandmed.


Vaata eraldi juhendit: Lisa 1 XForms-kompleksteenuse koostamise lühijuhend


Last modified: Tuesday, 24 April 2018, 2:16 PM