x

Glavna poglavlja

  1. LimeSurvey Cloud u usporedbi s LimeSurvey CE
  2. Vodič za brzi početak - LimeSurvey 3.0+
  3. Instalacija - LimeSurvey CE
  4. Kako izraditi dobar upitnik (vodič)
  5. Početak rada
  6. Administriranje LimeSurveya
  7. Upitnici - uvod
  8. Postavke upitnika
  9. Izbornik upitnika
  10. Struktura upitnika
  11. Pitanja - uvod
  12. Skupine pitanja - uvod
  13. Upitnici - upravljanje
  14. Opcije alatne trake upitnika
  15. Višejezični upitnik
  16. ExpressionScript Engine - Vodič za brzi početak
  17. Nekategorizirane i napredne značajke
  18. Opći FAQ
  19. Rješavanje problema
  20. Zaobilazna rješenja
  21. Licenca
  22. Popis izmjena po verzijama
  23. Dodaci
 Actions

ExpressionScript - Prezentacija

From LimeSurvey Manual

Ova je stranica možda strojno prevedena i može sadržavati pogreške. Prikaži engleski izvornik · Poboljšaj ovaj prijevod
This page is a translated version of the page ExpressionScript - Presentation and the translation is 100% complete.


Uvod

LimeSurvey koristi Skriptu izraza (Expression Script), koja LimeSurveyu omogućuje podršku za složenije grananje, procjene, provjeru i prilagodbu sadržaja. Ona zamjenjuje način na koji LimeSurvey u pozadini upravlja zamjenama, uvjetima i procjenama. Također znatno ubrzava obradu jer uklanja većinu čitanja iz baze podataka tijekom izvođenja. Skriptu izraza razvio je dr. Thomas White (TMSWhite).


Ključne definicije

  1. Izraz: Sve što je okruženo vitičastim zagradama:
    • Pod uvjetom da nema razmaka odmah nakon otvorene zagrade ili prije zatvorene vitičaste zagrade.
    • Sadržaj izraza evaluira EM, pa može sadržavati matematičke formule, funkcije te složenu obradu nizova znakova i datuma.
  2. Prilagodba (Tailoring): Katkad se naziva i „piping”. To je postupak uvjetnog mijenjanja teksta:
    • Imate pristup svim „poljima za zamjenu”, podacima o sudionicima i podacima odgovora.
    • Također imate lakši pristup pitanjima, odgovorima i njihovim svojstvima.
  3. Jednadžba relevantnosti: Novi atribut pitanja koji kontrolira vidljivost pitanja:
    • Ako postoji jednadžba relevantnosti, pitanje se prikazuje samo ako se relevantnost evaluira kao istinita.
    • Interno sve naredbe array_filter i array_filter_exclude postaju relevantnost na razini potpitanja.
  4. SGQA (kako su se varijable nazivale u prošlosti):
    • Označava Survey-Group-Question-Answer (upitnik-grupa-pitanje-odgovor)
    • Nazivi SGQA varijabli izgledaju poput 123X5X382X971 i mogu imati sufikse potpitanja.
    • Ti su nazivi varijabli specifični za temeljne S/Q/G/A kodove u bazi podataka, pa ih je često potrebno mijenjati
  5. Jednadžba kao vrsta pitanja: Nova vrsta pitanja koja u bazu podataka sprema izračune ili izvješća:
    • Slična je pitanju Boilerplate, ali se njezin sadržaj sprema u bazu podataka čak i ako postavite „Uvijek sakrij ovo pitanje”.
  6. Kôd pitanja: Ovo je preferirani naziv varijable za EM:
    • To može biti opisni naziv koji označava svrhu pitanja, što olakšava čitanje složene logike.
    • Ispravni kodovi pitanja NE smiju počinjati brojem, pa za numeriranje pitanja pomoću koda pitanja jednostavno koristite „q1”, „q1a” ili „g1q2”.
    • To postaje naziv varijable ako izvezete podatke u SPSS ili R. Stoga, ako radite statističku analizu, trebate stvoriti samo jedinstvene kodove pitanja.


Moram li koristiti Skriptu izraza?

Kratak odgovor je „ne”. Međutim, to uvelike ovisi o složenosti upitnika koji želite izraditi.

Na primjer, uređivač uvjeta pokriva neke osnovne izraze koji se mogu primijeniti na pitanja vašeg upitnika. Međutim, uređivač uvjeta je ograničen. Zato se koristi Skripta izraza - ona proširuje mogućnosti prilagodbe.


Mogu li kombinirati uvjete i jednadžbe relevantnosti?

Da. Za neka pitanja možete koristiti uređivač uvjeta, a za druga jednadžbe relevantnosti.

Ne možete imati i uvjete i izraze postavljene u istom pitanju! Kad se postavi uvjet, on zamjenjuje bilo koji izraz upisan u polje jednadžbe relevantnosti. Štoviše, polje jednadžbe relevantnosti više se ne može ručno uređivati.

Ipak, postoji način da unutar pitanja koristite i izraze i uvjete. Kao što je gore navedeno, uvjet zamjenjuje polje jednadžbe relevantnosti. Kad to učinite, provjerite koja je jednadžba novostvorena i kopirajte je u uređivač teksta. Izbrišite novostvoreni uvjet iz uređivača uvjeta, a zatim uredite pitanje dodavanjem izraza temeljenih na uvjetu iz datoteke u uređivaču teksta uz ostale izraze koje želite koristiti.


Kako odabrati između uvjeta i relevantnosti?

Evo popisa prednosti i nedostataka svakog pristupa:

Pristup Prednosti Nedostaci
Uvjeti 1. Praktično grafičko sučelje za izradu jednostavnih uvjeta.
2. Grafičko sučelje je dobro dokumentirano i poznato timu za podršku
1. Podržava samo jednostavne usporedbe i slabo radi s uvjetima „I” i „ILI”.
2. Kaskadni uvjeti rade nepouzdano
3. Sporo - opterećuje bazu podataka - može usporiti dugačke upitnike.
4. Prijavljeni su neki problemi s ponovnim učitavanjem uvjeta.
5. Grafičko sučelje se loše skalira kad postoje desetci, stotine ili tisuće pitanja.
6. Pretvorba papirnatih upitnika može biti spora jer se moraju koristiti SGQA nazivi.
7. Često je potreban programer za prilagođeno kodiranje logike potrebne za složeno grananje.
Relevantnost 1. Podržava vrlo složenu logiku, uključujući više od 80 funkcija te matematičke operatore i operatore za nizove znakova.
2. Savršena podrška za kaskadnu logiku.
3. Brzo - nema dodatnih poziva bazi podataka, podržava upitnike s više od 1000 pitanja.
4. Nema problema s ponovnim učitavanjem logike jer ne zahtijeva SGQA kodove.
5. Isticanje sintakse skalira se na upitnike s više od 1000 pitanja.
6. Jednostavno i brzo za korištenje skupinama koje žele digitalizirati postojeće papirnate upitnike.
7. Lako podržava polustrukturirane intervjue i epidemiološke upitnike bez potrebe za programerom.
1. Nema grafičkog sučelja za jednostavne uvjete - umjesto toga koristi isticanje sintakse.


Napomena:
  • Preporučujemo da koristite ono što bolje odgovara vašim potrebama.
  • Za detaljnije objašnjenje značajki EM-a kliknite na sljedeću poveznicu.

Početak rada

Najbolji način za početak rada s EM-om je:

  • Instalirajte najnoviju stabilnu verziju s https://www.limesurvey.org/en/download.
  • Uvezite i istražite neke primjere upitnika.
  • Istražite slučajeve korištenja i upute te primjere korak po korak.
  • Istražite dokumentaciju o EM-u (ova stranica)
    • Jedinični testovi izoliranih izraza (napredno)
      • prikazuje primjere korištenja svih EM funkcija i operatora te PHP i JavaScript rezultate;
      • imajte na umu da postoji nekoliko funkcija koje daju različite rezultate u PHP i JavaScript verzijama, pa vam ova stranica omogućuje da svoju EM logiku planirate u skladu s tim.

Terminologija

Ovi se pojmovi često koriste za opis mogućnosti EM-a:

  • Grananje temeljeno na relevantnosti - ako je pitanje relevantno, postavite ga, a u suprotnom nemojte (npr. učinite ga nevidljivim i označite kao NULL u bazi podataka). Polja relevantnosti možete pronaći u ploči za uređivanje pitanja, kao i u ploči za uređivanje skupine pitanja. Potonje se koristi za primjenu skupa uvjeta na cijelu skupinu bez kopiranja istog uvjeta u svako pitanje i/ili za kombiniranje uvjetne logike na razini skupine i pitanja).
  • Prilagodba (Tailoring) - Kad znate koja pitanja treba postaviti, prilagodba (katkad nazvana piping) određuje kako pitanje treba postaviti. To omogućuje ne samo jednostavnu zamjenu (poput {TOKEN:FIRSTNAME}), nego i konjugaciju glagola i deklinaciju imenica prema spolu ili broju vaših ispitanika. Također vam omogućuje da promijenite poruku koju upućujete ispitaniku upitnika ovisno o tome jesu li odgovorili na druga pitanja (ili kako su odgovorili).
  • Jednadžbe - EM dodaje novu vrstu pitanja pod nazivom Jednadžba koja pohranjuje rezultat izraza. Rezultati jednadžbi izračunavaju se i zapisuju u bazu podataka, čak i ako ih sakrijete na stranici. Stoga se koriste za skrivene izračune bodova, navigaciju temeljenu na složenim jednadžbama, procjene i izvješća koja će se generirati i pohraniti u bazi podataka.


Relevantnost i kaskadna relevantnost

Svaka vrsta pitanja sada ima opciju relevantnosti koja kontrolira hoće li se pitanje prikazati ili ne. EM obrađuje svaku jednadžbu relevantnosti redoslijedom kojim se pojavljuju u upitniku. Ako je izraz istinit (ili nedostaje - radi podrške starijim upitnicima), pitanje će se prikazati. Ako nije relevantno, pitanje će biti skriveno, a vrijednost će se u bazi podataka postaviti na NULL. Ako u skupini nema relevantnih pitanja, cijela će skupina biti preskočena.

Štoviše, ako je bilo koja varijabla unutar izraza nerelevantna, izraz se uvijek evaluira kao neistinit. To omogućuje kaskadnu relevantnost tako da ne morate pisati vrlo duge jednadžbe relevantnosti za svako pitanje.

Recimo da imate pet pitanja Q1-Q5 i želite prikazati Q2 samo ako je odgovoreno na Q1, Q3 ako je odgovoreno na Q2 itd. Jednadžbe relevantnosti mogle bi biti:

Kôd pitanja Relevantnost Pitanje
Q1 1 Kako se zovete?
Q2 Q1 {Q1}, koliko imate godina?
Q3 Q2 Dakle, imate {Q2} godina. Jeste li u braku?
Q4 Q3 == "Y" {Q1}, koliko dugo ste u braku?
Q5 Q4 Koliko djece imate, {Q1}?


Relevantnost na razini skupine

ExpressionScript također podržava relevantnost na razini skupine. To olakšava implementaciju petlji. Recimo da želite prikupiti informacije o do 10 entiteta (poput proizvoda ili osoba iz kućanstva), pri čemu prvo utvrdite za koliko je entiteta potrebno nastavno ispitivanje (npr. pitanjem koliko osoba živi u kućanstvu ili tako da ispitanici označe koji im se proizvodi sviđaju s dugog popisa). Nakon što znate za koliko je entiteta potrebno nastavno ispitivanje, možete koristiti relevantnost na razini skupine poput {count >= 1}, {count >=2}, ... {count >= 10} za svaku od 10 skupina nastavnih pitanja. Unutar svake skupine možete imati uvjetnu logiku na razini pitanja (npr. nastavna pitanja specifična za spol ili dob svakog subjekta). Jednadžbe relevantnosti na razini pitanja i skupine povezuju se operatorom I kako bi se odredilo što treba prikazati.

Da biste provjerili takav primjer, uvezite sljedeći upitnik: primjer upitnika popisa stanovništva.

Na donjoj snimci zaslona može se vidjeti da je skupina Osoba 1 prikazana (ili relevantna) ako ispitanik živi s barem još jednim supanikom:



Prilagodba/Piping

Sve unutar vitičastih zagrada sada se tretira kao izraz (uz jednu iznimku opisanu u nastavku). Izrazi imaju pristup svim LimeReplacementFields poljima i varijablama (putem nekoliko aliasa), svim uobičajenim operatorima jednadžbi (matematičkim, logičkim i operatorima usporedbe) te desecima funkcija (koje čak rade dinamički na strani klijenta).

Korištenjem ovih jednadžbi možete, primjerice:

  1. Uvjetno prikazati prilagođene poruke ispitanicima na temelju prethodnih odgovora;
  2. Izraditi procjene i prikazati rezultate procjene (ili uvjetno grananje ili prikaz poruka) na temelju tih rezultata, sve bez korištenja samog modula za procjene;
  3. Konjugirati glagole i deklinirati imenice unutar pitanja, odgovora i izvješća;
  4. Prikazati sažetke odgovora prije stranice "Prikaži svoje odgovore" na kraju upitnika.


Jednadžbe

Postoji nova vrsta pitanja pod nazivom Jednadžba. Zamislite je kao vrstu pitanja Prikaz teksta, osim što pohranjuje vrijednost onoga što se prikazuje u bazu podataka. Dakle, ako tekst pitanja Jednadžba sadrži izračun procjene, ta će se vrijednost pohraniti u bazu podataka u varijablu koja se može prikazati u javnoj ili privatnoj statistici.


Sintaksa

Sve što se nalazi unutar vitičastih zagrada sada se smatra izrazom (uz jednu iznimku: ne smije biti razmaka na početku ni na kraju - to je potrebno kako bi se osiguralo da ExpressionScript ne pokušava obraditi ugrađeni JavaScript).

Imajte na umu da izrazi smiju obuhvaćati više redaka, sve dok nema razmaka nakon otvorene vitičaste zagrade ili prije zatvorene vitičaste zagrade. To je osobito korisno za ugniježđene naredbe "if()", kao u ovom primjeru:

{if(is_empty(PFTotals),
 '',
 if(PFTotals >= -5 && PFTotals <= -4,
   'Very Soft',
   if(PFTotals >= -3 && PFTotals <= -2,
     'Soft',
     if(PFTotals == -1,
       'Somewhat Soft',
       if(PFTotals == 0,
         'Moderate',
         if(PFTotals == 1,
           'Somewhat Hard',
           if(PFTotals >= 2 && PFTotals <= 3,
             'Hard',
             if(PFTotals >= 4 && PFTotals <= 5,
               'Very Hard',
               ''
             )
           )
         )
       )
     )
   )
 )
)}

ExpressionScript podržava sljedeću sintaksu:

  • Sve standardne matematičke operatore (npr. +,-,*,/,!);
  • Sve standardne operatore usporedbe (npr. <,<=,==,!=,>,>=, te njihove ekvivalente: lt, le, eq, ne, gt, ge);
  • Zagrade (kako biste mogli grupirati podizraze);
  • Uvjetne operatore (npr. &&,| | i njihove ekvivalente: and, or);
  • Nizove znakova u jednostrukim i dvostrukim navodnicima (u svakom se mogu ugraditi nizovi s drugom vrstom navodnika);
  • Operator zareza (tako možete imati popis izraza i vratiti samo završni rezultat);
  • Operator dodjele (=);
  • Unaprijed definirane varijable (za upućivanje na pitanja, atribute pitanja i odgovore) - npr. SGQA kodovi;
  • Unaprijed definirane funkcije (već ih ima 80+, a lako je dodati nove).


Operatori

Sintaksa EM-a slijedi uobičajeni prioritet operatora:

Razina Operator(i) Opis
1 () zagrade za grupiranje ili pozivanje funkcija
2 ! - + unarni operatori: negacija (not), promjena predznaka, unarni plus
3 * / množenje, dijeljenje
4 + - zbrajanje, oduzimanje
5 < <= > >= lt le gt ge relativne usporedbe
6 == != eq ne usporedbe jednakosti
7 and logički I
8 or logički ILI
9 = operator dodjele
10 , operator zareza
Radi dosljednosti između JavaScripta i PHP-a, operator plus (+) zbraja ako su oba operanda numerička, a spaja (konkatenira) ako su oba dijela nenumerički nizovi znakova. Međutim, za spajanje preporučujemo korištenje funkcije "join()" jer jasnije izražava vašu namjeru. Time se također izbjegavaju neočekivani rezultati ako ste očekivali nizove znakova, a dobili ste brojeve (ili obrnuto).

Upozorenje o neusklađenosti broja i niza znakova te abecednoj/numeričkoj usporedbi

Kada vrijednosti uspoređujete relativnim usporedbama ili usporedbama jednakosti, pazite na neusklađenosti. Vrijednost koju je unio korisnik (ili je dobivena putem kôda odgovora) može se koristiti kao broj ako je jasno da je broj. Ako jednu od vrijednosti stavite u ", provest će se usporedba teksta/niza znakova. Ako želite usporedbu kao brojeva, nikada ne stavljajte broj u ".

Na primjer, Q0.NAOK > "50" je istina ako je Q0.NAOK numeričko pitanje s vrijednošću 9. To je zato što će operator > pretpostaviti da se radi o abecednoj, a ne numeričkoj usporedbi.

Kako biste bili sigurni da uspoređujete cjelobrojne vrijednosti, možete koristiti intval(Q0.NAOK) > 50. Samo zapamtite: ako Q0.NAOK nije broj (prazno je ili je niz znakova), tada je intval(Q0.NAOK) === 0. Za usporedbu nizova znakova ("A" < "B") izravno koristite strcmp: strcmp(Q0.NAOK,"B") ili strcmp(Q0.NAOK,"A5").

Oprez pri korištenju operatora dodjele (=)

Operatore dodjele trebali biste izbjegavati osim ako je to apsolutno nužno jer mogu uzrokovati neočekivane nuspojave. Na primjer, ako promijenite vrijednost prethodnog odgovora, kaskadna relevantnost i logika provjere između tog pitanja i trenutnog pitanja ne izračunavaju se ponovno, pa možete dobiti interno nedosljedne podatke (npr. pitanja koja ostaju odgovorena, a trebala su biti postavljena na NULL, ili pitanja koja su preskočena, a trebala su biti odgovorena). Općenito, ako želite dodijeliti vrijednost varijabli, trebali biste izraditi pitanje vrste Jednadžba i pomoću izraza postaviti njegovu vrijednost. Međutim, ponekad ljudima ovaj operator doista treba, pa smo ga učinili dostupnim.

Kako bismo vas upozorili na ovaj operator, on se unutar sintakse jednadžbi prikazuje crvenom bojom (da ga ne biste pomiješali s "==").



Korištenje operatora dodjele

Glavni razlozi zbog kojih biste mogli htjeti koristiti operator dodjele su:

  • Trebate postaviti zadanu vrijednost putem jednadžbe za pitanje koje ne prihvaća zadane vrijednosti (kao što je popis s izborom jednog odgovora (radio), gdje vam korisničko sučelje omogućuje odabir jedne od opcija odgovora, ali ne i unos jednadžbe). Međutim, budite oprezni jer LimeSurvey neće moći provjeriti generira li vaša jednadžba jedan od dopuštenih odgovora za to pitanje;
  • Trebate prisilno promijeniti odgovor na prethodno pitanje na temelju kasnijeg odgovora;
  • itd...


  Pažnja : Dodjela se obavlja samo u PHP-u. To znači da se vrijednost ne ažurira na istoj stranici, nego tek kada korisnik prijeđe na sljedeću stranicu. Stoga budite oprezni kada se operator dodjele koristi na istoj stranici s drugim izrazima.



U tu svrhu možete koristiti cijeli sustav Expression Managera. Bolje je u tu svrhu koristiti Jednadžbu.

Neki primjeri:

  • Postavljanje odgovora na pitanje kratkog teksta malim slovima: {QCODE=strtolower(QCODE.NAOK)};
  • Postavljanje zadanog odgovora na pitanje vrste niz na početku upitnika: {Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)};
  • Postavljanje zadanog odgovora na pitanje vrste niz tekstova na početku upitnika: {Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)};
  • Postavljanje odgovora s uvjetom: {QCODE=if(YesNo="Y","A1","")}.

XSS sigurnost

Kada je XSS omogućen, neki dijelovi sustava Expression Managera ne mogu se koristiti:

  • započinjanje HTML oznake u jednom izrazu, a njezino završavanje u drugom izrazu;
  • korištenje složenog izraza unutar URL-a.


Imajte na umu da je XSS prema zadanim postavkama omogućen u svakoj instalaciji LimeSurveya.


Primjeri i zaobilazna rješenja:

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} ne radi uz XSS zaštitu, umjesto toga možete koristiti {if(1,"<strong>information</strong>","information")};
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, ovdje možete koristiti pitanje vrste jednadžba jer je korištenje cjelovitog kôda pitanja u redu: <a href="/script.php?value={EQUATION.NAOK}">next</a>.


Pristup varijablama

ExpressionScript omogućuje pristup samo za čitanje svim varijablama koje bi vam mogle zatrebati. Radi povratne kompatibilnosti omogućuje pristup sljedećem:

Osim toga, ExpressionScript omogućuje da se na varijable pozivate pomoću kôda pitanja (stupac 'title' u tablici pitanja u bazi podataka). To je ujedno oznaka varijable koja se koristi pri izvozu podataka u SPSS, R ili SAS. Na primjer, ako imate pitanja o imenu, dobi i spolu, te varijable možete nazvati name, age i gender umjesto 12345X13X22, 12345X13X23 i 12345X13X24. Tako su jednadžbe svima lakše za čitanje i provjeru logike, a pitanja je moguće premještati bez praćenja brojeva grupa ili pitanja.

Važno: Sigurnije je pozivati se na varijable koje se nalaze na prethodnim stranicama ili u prethodnim pitanjima.

Nadalje, ExpressionScript omogućuje pristup mnogim svojstvima pitanja:


Sintaksa Značenje Primjer Rezultat primjera
Qcode alias za Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code odabrani kôd odgovora za pitanje ako je relevantno (inače prazno) ili tekstualna vrijednost ako pitanje nije kodirano {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK isto kao Qcode - pogledajte raspravu o NAOK-u {gender.NAOK} 'M'
Qcode.value vrijednost procjene za pitanje ako je relevantno (inače prazno) ili tekstualna vrijednost ako pitanje nije kodirano {gender.value} '1'
Qcode.valueNAOK isto kao Qcode.value - pogledajte raspravu o NAOK-u {gender.valueNAOK} '1'
Qcode.shown prikazana vrijednost za pitanje {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question tekst pitanja {gender.question} 'What is your gender?'
Qcode.mandatory je li pitanje obavezno (Y/N) {gender.mandatory} 'N'
Qcode.qid interni broj pitanja (ne redni broj) {gender.qid} 337
Qcode.type vrsta pitanja {gender.type} 'G'
Qcode.jsName ispravan javascript naziv pitanja, bez obzira je li deklarirano na ovoj stranici ili ne {gender.jsName} 'java1827X3X337'
Qcode.gid interni broj grupe (ne redni broj) {gender.gid} 3
Qcode.qseq redni broj pitanja, počevši od 0 {gender.qseq} 5
Qcode.gseq redni broj grupe, počevši od 0 {gender.gseq} 1
Qcode.relevanceStatus je li pitanje trenutačno relevantno (0 ili 1) {gender.relevanceStatus} 1
Qcode.relevance jednadžba relevantnosti na razini pitanja {gender.relevance} '!is_empty(name)'
Qcode.grelevance jednadžba relevantnosti na razini grupe {gender.grelevance} 'num_children >= 5'
Qcode.sgqa SGQA vrijednost za ovo pitanje {gender.sgqa} '1827X3X337'


Problem s HTML uređivačem

Ako koristite HTML uređivač, neki znakovi zamjenjuju se HTML entitetima.

  • & s &amp;
  • < s &lt;
  • > s &gt;

Ako koristite HTML uređivač, morate koristiti:

  • and za &
  • lt za <
  • le za <=
  • gt za >
  • ge za >=


Preporučuje se iz izraza ukloniti HTML koji se pojavljuje unutar njega. Ako koristite LimeSurvey HTML uređivač, kliknite gumb "Source" (nalazi se u gornjem lijevom dijelu uređivača) i izbrišite sve znakove koji nisu povezani s vašim izrazom (npr.

,
i tako dalje).

Imenovanje varijabli Qcode

Ovdje su detalji o tome kako se konstruira Qcode (i pristupa nekim svojstvima) prema vrsti pitanja. Općenito, Qcode se konstruira kao:

 QuestionCode . '_' . SubQuestionID . '_' . ScaleId

Za komentar i ostalo, odgovarajući kôdovi pitanja su QuestionCode_comment i QuestionCode_other.

Vrsta Opis Kôd Potpitanja Opcije odgovora Skale Kôd odgovora Prikazani odgovor Relevantnost
5 Izbor 5 opcija, izborni gumbi Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Niz (izbor u 10 opcija), izborni gumbi Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Niz (izbor u 5 opcija), izborni gumbi Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Niz (fleksibilne oznake), dvostruka skala Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Niz (fleksibilni) - format stupaca Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Niz (fleksibilni) - format redaka Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Niz (Povećaj/Isto/Smanji), izborni gumbi Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Niz (višestruki fleksibilni) od 1 do 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Niz (višestruki fleksibilni) tekst Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Niz (Da/Nesigurno/Ne), izborni gumbi Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Pitanje s unaprijed definiranim tekstom Q11 {Q11.shown}
D Datum Q12 {Q12} {Q12.shown}
* Jednadžba Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Učitavanje datoteka (bilježi broj učitanih datoteka) Q14 {Q14} {Q14>0}
G Padajući izbornik za spol Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Slobodan tekst (dugačak) Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Pitanje o jeziku Q17 {Q17} {Q17.shown} {Q17=='en'}
! Popis - padajući izbornik Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Popis, padajući izbornik/izborni gumbi Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Popis s komentarom, padajući izbornik/izborni gumbi + tekstualno područje Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Slobodan dugačak tekst Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Višestruki izbor, potvrdni okviri Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Višestruki izbor s komentarima, potvrdni okviri + tekst Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Pitanje s više numeričkih unosa Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Više kraćih tekstova Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Numeričko pitanje Q26 {Q26} {Q26.shown} {Q26 > 30}
R Rangiranje Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Slobodan tekst (kratak) Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Da/Ne, izborni gumbi Q29 {Q29} {Q29.shown} {Q29=='Y'}


Korištenje NAOK-a

NAOK --> "Not Applicable" (NA) is alright (OK), tj. "Nije primjenjivo" je u redu


Korištenje NAOK-a znači da su sve ili neke varijable nerelevantne (tj. "Not Applicable" (NA) je u redu (OK)).

Na primjer: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) uvijek daje prazan niz znakova ako je jedno potpitanje pitanja Q1 filtrirano. Za brojanje označenih potpitanja u takvom pitanju može se koristiti count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Ako je potpitanje skriveno, EM vraća prazan niz znakova.

Bez NAOK-a, ako je jedno pitanje ili jedno potpitanje skriveno, EM uvijek vraća prazan niz znakova (isto kao vraćanje vrijednosti false).

Sufiks .shown uvijek koristi NAOK sustav (prazan niz znakova ako je skriveno), ali ako vam je potreban kôd odgovora, uvijek je dobra ideja dodati .NAOK iza kôda pitanja (osim ako vam to nije potrebno i znate što radite).

Više informacija nalazi se u odjeljku Nadjačavanje kaskadnih uvjeta.


Rezervirane varijable "this", "self" i "that"

Često želite procijeniti sve dijelove pitanja, na primjer prebrojiti koliko je potpitanja odgovoreno ili zbrojiti bodove. Ponekad želite obraditi samo određene retke ili stupce pitanja (na primjer dobiti zbrojeve redaka ili stupaca i pohraniti ih u bazu podataka). Ove rezervirane varijable taj postupak čine relativno jednostavnim.


Varijabla "this"

Varijabla "this" koristi se isključivo unutar opcija "Jednadžba validacije pitanja" i "Jednadžba validacije potpitanja" (potonja nije moguća iz grafičkog sučelja). Proširuje se u nazive varijabli svake od ćelija unutar tih pitanja. Dakle, ako želite osigurati da je svaki unos veći od tri, "Jednadžbu validacije potpitanja" postavili biste na (this > 3).


Varijabla "self"

Varijable "self" i "that" su moćnije i služe kao makroi koji se proširuju prije obrade jednadžbi. Mogućnosti sintakse za varijablu "self" su:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix
  1. sufiks je bilo koji od uobičajenih sufiksa za qcode (npr. NAOK, value, shown)
  1. podselektor može biti jedan od sljedećih:
  • comments - samo potpitanja koja su komentari (npr. višestruki izbor s komentarima i popis s komentarom);
  • nocomments - samo potpitanja koja nisu komentari;
  • sq_X - gdje je X identifikator retka ili stupca. Odabiru se samo potpitanja koja odgovaraju uzorku X. Imajte na umu da se pretraživanje provodi na cjelovitom identifikatoru koda, a zatim sq_X odgovara potpitanjima nX, X, Xn i uključuje ih (npr. ako koristite sq_1, bit će uključena potpitanja a1, 1a, 1, 11 ili 001). Obratite pozornost na vrstu pitanja s dvostrukom skalom, gdje su kodovi potpitanja QCODE_SQCODE_1 i QCODE_SQCODE_1, te na vrstu pitanja rangiranja, gdje su kodovi potpitanja QCODE_1, QCODE_2 ....

Primjeri:

  • Je li na neki dio pitanja odgovoreno? -> {count(self.NAOK)>0}
  • Kolika je procjena (bodovi) za ovo pitanje? -> {sum(self.value)}

Ove varijable možete koristiti i za dobivanje zbrojeva redaka i stupaca. Recimo da imate niz brojeva s recima A-E i stupcima 1-5.

  • Koliko je sveukupno? -> {sum(self.NAOK)}
  • Koliki je zbroj retka B? -> {sum(self.sq_B.NAOK)}
  • Koliki je zbroj stupca 3? -> {sum(self.sq_3.NAOK)}


Varijabla "that"

Varijabla "that" slična je varijabli "self", ali omogućuje pozivanje na druga pitanja. Njezina sintaksa je:

  • that.qname
  • that.qname.sufiks
  • that.qname.podselektor
  • that.qname.podselektor.sufiks

qname je naziv pitanja bez ikakvih nastavaka potpitanja. Dakle, kreirajmo pitanje 'q1', pri čemu 'q' ujedno predstavlja njegov qname.

Primjeri:

  • Je li na neki dio pitanja q1 odgovoreno? -> {count(that.q1.NAOK)>0}
  • Kolika je procjena za q2? -> {sum(that.q2.NAOK)}
  • Koliko je sveukupno za q3? -> {sum(that.q3.NAOK)}
  • Koliki je zbroj retka C u q4? -> {sum(that.q4.sq_C.NAOK)}
  • Koliki je zbroj stupca 2 u q4? -> {sum(that.q4.sq_2.NAOK)}

Varijable "self" i "that" mogu se koristiti u bilo kojoj relevantnosti, provjeri ili prilagodbi (tailoring).

Jedino upozorenje je da će vam funkcija Show logic file prikazati proširenu vrijednost varijabli "self" i "that". Tako možete vidjeti stvarnu jednadžbu koja će biti generirana kako biste vi (i EM) mogli provjeriti postoje li varijable ili ne. To može djelovati zbunjujuće jer možete vidjeti prilično duge jednadžbe. Međutim, ako uredite pitanje, vidjet ćete izvornu jednadžbu s varijablama "self" i/ili "that".

Ove varijable ne biste trebali koristiti ako
  • želite izričito imenovati svaku varijablu korištenu u jednadžbi ili
  • koristite varijable koje nemaju potpitanja (npr. pitanja s jednim odgovorom). U tim je slučajevima dodavanje prefiksa "that" varijabli suvišno i riskirate dobiti neočekivane rezultate.

Pristup funkcijama

ExpressionScript omogućuje pristup matematičkim funkcijama, funkcijama za rad s nizovima znakova i korisnički definiranim funkcijama, kao što je prikazano u nastavku. Za te funkcije postoje PHP i JavaScript ekvivalenti, tako da jednako rade na strani poslužitelja (PHP) i na strani klijenta (JavaScript). Nove je funkcije lako dodati.


Implementirane funkcije

Trenutno su dostupne sljedeće funkcije:

Funkcija Značenje Sintaksa
abs Apsolutna vrijednost number abs(number)
acos Arkus kosinus number acos(number)
addslashes Citira znakovni niz kosim crtama string addslashes(string)
asin Arkus sinus number asin(number)
atan Arc tangenta number atan(number)
atan2 Tangenta luka dvije varijable number atan2(number, number)
ceil Zaokruži decimalne brojeve number ceil(number)
checkdate Vraća istinito (1) ako je datum valjan u gregorijanskom kalendaru bool checkdate(month,day,year)
convert_value Pretvara brojčanu vrijednost pomoću ulazne i izlazne tablice brojčanih vrijednosti number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosinus number cos(number)
count Broji odgovorena (neprazna) pitanja na popisu number count(arg1, arg12, ..., argN)
countif Broji odgovorena pitanja na popisu koja su jednaka prvom argumentu number countif(matches, arg1, arg2, ... argN)
countifop Broji odgovorena pitanja na popisu koja zadovoljavaju kriterij (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Format za lokalni datum/vrijeme string date(format [, timestamp=time()])
exp Izračunava eksponent od e number exp(number)
fixnum Prikazuje brojeve sa zarezom kao decimalnim separatorom, ako je potrebno string fixnum(number)
floor Zaokruži razlomke prema dolje number floor(number)
gmdate Format za GMT datum/vrijeme string gmdate(format [, timestamp=time()])
html_entity_decode Pretvara sve HTML entitete u odgovarajuće znakove (uvijek koristi ENT_QUOTES i UTF-8) string html_entity_decode(string)
htmlentities Pretvara sve odgovarajuće znakove u HTML entitete (uvijek koristi ENT_QUOTES i UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Pretvara posebne znakove u HTML entitete (uvijek koristi ENT_QUOTES i UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Pretvara posebne HTML entitete natrag u znakove (uvijek koristi ENT_QUOTES i UTF-8) string htmlspecialchars_decode(string)
idate Oblikovati lokalno vrijeme / datum kao cijeli broj string idate(string [, timestamp=time()])
if if(test,result_if_true,result_if_false) u stilu programa Excel if(test,result_if_true,result_if_false)
implode Spojite elemente u znakovni niz string implode(glue,arg1,arg2,...,argN)
intval Dobijte cjelobrojnu vrijednost varijable int intval(number [, base=10])
is_empty Utvrđuje smatra li se varijabla praznom bool is_empty(var)
is_float Utvrđuje je li tip varijable float bool is_float(var)
is_int Utvrđuje je li tip varijable cijeli broj bool is_int(var)
is_nan Pronalazi je li vrijednost „nije broj” (NaN) bool is_nan(var)
is_null Otkriva je li varijabla NULL bool is_null(var)
is_numeric Utvrđuje je li varijabla broj ili numerički znakovni niz bool is_numeric(var)
is_string Utvrđuje je li tip varijable znakovni niz bool is_string(var)
join (New in 2.0 build 130129) Spaja elemente u novi znakovni niz join(arg1, arg2, ... argN)
list Vraća popis vrijednosti koje nisu prazne, odvojenih zarezom string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Vraća popis odvojen znakom 'glue' navedenog svojstva pitanja (retProp) za pitanja s popisa koja zadovoljavaju kriterij (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
ltrim Uklanja razmake (ili druge znakove) s početka znakovnog niza string ltrim(string [, charlist])
max Nađi najvišu vrijednost number max(arg1, arg2, ... argN)
min Nađi najnižu vrijednost number min(arg1, arg2, ... argN)
mktime Dohvaća UNIX vremensku oznaku za datum (svih 6 argumenata je opcionalno) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Funkcija modulo još nije podržana. Umjesto nje možete koristiti funkciju floor() floor(x/y)==(x/y)
nl2br Umeće HTML prijelome retka ispred svih novih redaka u znakovnom nizu string nl2br(string)
number_format Oblikujte broj s grupiranim tisućama string number_format(number)
pi Dobij vrijednost broja pi number pi()
pow Eksponencijalni izraz number pow(base, exp)
quoted_printable_decode Pretvara quoted-printable znakovni niz u 8-bitni znakovni niz string quoted_printable_decode(string)
quoted_printable_encode Pretvara 8-bitni znakovni niz u quoted-printable znakovni niz string quoted_printable_encode(string)
quotemeta Citiraj meta znakove string quotemeta(string)
rand Generirajte slučajni cijeli broj, pogledajte ovaj primjer int rand() OR int rand(min, max)
regexMatch uspoređuje znakovni niz s regularnim izrazom bool regexMatch(pattern,input)
round Zaokružuje broj na opcionalnu preciznost number round(val [, precision])
rtrim Uklanja razmake (ili druge znakove) s kraja znakovnog niza string rtrim(string [, charlist])
sin Sinus number sin(arg)
sprintf Vratite oblikovani niz string sprintf(format, arg1, arg2, ... argN)
sqrt Kvadratni korijen number sqrt(arg)
stddev Izračunava standardnu devijaciju uzorka za popis brojeva number stddev(arg1, arg2, ... argN)
str_pad Dopunjava znakovni niz do određene duljine drugim znakovnim nizom string str_pad(input, pad_length [, pad_string])
str_repeat Ponovite niz string str_repeat(input, multiplier)
str_replace Zamjenjuje sva pojavljivanja traženog znakovnog niza zamjenskim znakovnim nizom string str_replace(search, replace, subject)
strcasecmp Usporedba binarno sigurnog znakovnog niza neovisnog na veličinu znakova int strcasecmp(str1, str2)
strcmp Usporedba binarno sigurnih znakovnih nizova int strcmp(str1, str2)
strip_tags Uklonite HTML i PHP oznake iz znakovnog niza string strip_tags(str, allowable_tags)
stripos Pronalazi položaj prvog pojavljivanja unicode znakovnog niza neovisno o veličini znakova (počevši od 0, vraća false ako nije pronađen) int stripos(haystack, needle [, offset=0])
stripslashes Uklanja navodnike iz citiranog znakovnog niza string stripslashes(string)
stristr Strstr neosjetljivo na veličinu znakova string stristr(haystack, needle [, before_needle=false])
strlen Dobij duljinu znakovnog niza int strlen(string)
strpos Pronalazi položaj prvog pojavljivanja unicode znakovnog niza (počevši od 0, vraća false ako nije pronađen) int strpos(haystack, needle [ offset=0])
strrev Obrni string string strrev(string)
strstr Pronađi prvu pojavu znakovnog niza string strstr(haystack, needle[, before_needle=false])
strtolower Pretvara znakovni niz u mala slova string strtolower(string)
strtotime Pretvara gotovo bilo koji engleski tekstualni opis datuma i vremena u Unix vremensku oznaku int strtotime(string)
strtoupper Pretvara znakovni niz u velika slova string strtoupper(string)
substr Vraća dio unicode znakovnog niza string substr(string, start [, length])
sum Izračunajte zbroj vrijednosti u nizu number sum(arg1, arg2, ... argN)
sumifop Zbraja vrijednosti odgovorenih pitanja na popisu koja zadovoljavaju kriterij (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangens number tan(arg)
time Vrati trenutne UNIX vremenske oznake number time()
trim Uklanja razmake (ili druge znakove) s početka i kraja znakovnog niza string trim(string [, charlist])
ucwords Pretvara prvo slovo svake riječi u znakovnom nizu u veliko string ucwords(string)
unique Vraća istinito ako su svi ne prazni odgovori jedinstveni boolean unique(arg1, ..., argN)
Kliknite ovdje ako želite saznati više o planiranim (ili razmatranim) funkcijama.

<span id="Create_new_expression_functions_with_plugin_ (New in 4.0.0 )">

Izrada novih funkcija izraza pomoću dodatka (New in 4.0.0 )

Ako trebate novu funkciju koja ne postoji u jezgri, možete je izraditi pomoću dodatka. Takva se nova funkcija izrađuje pomoću događaja expressionManagerStart.

ExpressionScript zna koje su varijable lokalne

Kako bi ispravno izgradio JavaScript za stranicu, EM mora znati koje su varijable postavljene na stranici i koji je njihov JavaScript ID (npr. za document.getElementById(x)). Također mora znati koje su varijable postavljene na drugim stranicama (kako bi osigurao da su potrebna polja <input type='hidden' value='x'> prisutna i popunjena).


Kaskadni uvjeti

Ako je bilo koja od varijabli nerelevantna, cijela će jednadžba biti nerelevantna (false). Na primjer, u sljedećoj tablici N/A znači da jedna od varijabli nije bila relevantna:


Operator Primjer a b Rezultat
+ (unary) +a N/A false
! !a N/A false
== (or eq) a == b N/A 5 false
== (or eq) a == b N/A 0 false
== (or eq) a == b N/A N/A false
!= (or ne) a != b N/A 5 false
!= (or ne) a != b N/A N/A false
!= (or ne) a != b N/A 0 false
> (or gt) a > b N/A 5 false
>= (or ge) a >= b N/A 5 false
< (or lt) a < b N/A 5 false
<= (or le) a <= b N/A 5 false
and a and b N/A 5 false
and a and b N/A N/A false
or a or b N/A N/A false
or a or b N/A 5 false
+ a + b N/A 5 false
* a * b N/A 5 false
/ a / b 5 N/A false
() (a) N/A false
(exp) (a && b) N/A 5 false
(exp) op (exp) (b + b) > (a && b) N/A 5 false
function sum(a,b,b) N/A 5 false
function max(a,b) N/A 5 false
function min(a,b) N/A 5 false
function implode(', ',a,b,a,b) N/A 5 false
function if(a,a,b) N/A 5 false
function is_empty(a) N/A false
function is_empty(a) 0 (or blank) true
function !is_empty(a) N/A false


Nadjačavanje kaskadnih uvjeta

Recimo da želite prikazati tekući zbroj svih relevantnih odgovora. Mogli biste pokušati upotrijebiti jednadžbu {sum(q1,q2,q3,...,qN)}. Međutim, ona se interno prevodi u LEMif(LEManyNA("q1","q2","q3",...,"qN"),"",sum(LEMval("q1"),LEMval("q2"),LEMval("q3"),...,LEMval("qN"))). Dakle, ako je bilo koja od vrijednosti q1-qN nerelevantna, jednadžba će uvijek vratiti false. U tom će slučaju sum() prikazivati "0" dok se ne odgovori na sva pitanja.

Kako biste to zaobišli, svakoj varijabli možete dodati sufiks ".NAOK" (što znači da je Not Applicable u redu). U tom slučaju događa se sljedeće. Recimo da imate varijablu q1.NAOK:

  1. q1 se ne dodaje u klauzulu LEManyNA()
  2. LEMval('q1') će i dalje provjeravati je li odgovor relevantan i vratit će "" ako nije (tako da će se pojedinačni nerelevantni odgovori zanemariti, ali neće poništiti cijeli izraz).

Dakle, rješenje problema tekućeg zbroja je upotreba jednadžbe sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Upotreba sufiksa .NAOK također autorima omogućuje izradu upitnika koji imaju nekoliko mogućih putanja, a kasnije se ponovno spajaju u zajedničke putanje. Na primjer, recimo da ispitanici odgovore na upitnik na način koji je izvan uobičajenog raspona odgovora. Autor bi mogao upozoriti ispitanike da možda neće dobiti valjane rezultate i pitati ih žele li doista nastaviti s upitnikom. Ako odgovore "Da", prikazat će se ostala pitanja. Uvjet za "ostala pitanja" provjeravao bi jesu li početni odgovori bili unutar uobičajenog raspona ILI je li ispitanik odgovorio "Da" na pitanje koje je relevantno samo ako su odgovorili izvan uobičajenog raspona.

Kako ExpressionScript podržava uvjetno mikro-prilagođavanje?

Evo primjera mikro-prilagođavanja (gdje Vrsta pitanja=='expr' označava jednadžbu):


Kôd pitanja Relevantnost Vrsta pitanja Pitanje
name 1 text Kako se zovete?
age 1 text Koliko imate godina?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Žao nam je, {name}, preste ste {if( (age<16),'mladi',if( (age>80),'stari','srednjih godina') ) } za ovaj test.
kids !badage yesno Imate li djece?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Koliko djece imate?
kid1 parents && numKids >= 1 text Koliko godina ima vaše prvo dijete?
kid2 parents && numKids >= 2 text Koliko godina ima vaše drugo dijete?
kid3 parents && numKids >= 3 text Koliko godina ima vaše treće dijete?
kid4 parents && numKids >= 4 text Koliko godina ima vaše četvrto dijete?
kid5 parents && numKids >= 5 text Koliko godina ima vaše peto dijete?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents text {name}, rekli ste da imate {age} godina i da imate {numKids} djece. Zbroj godina vaše prvo(g) {min(numKids,5)} djece je {sumage}


Za preuzimanje gornjeg primjera upitnika kliknite na sljedeću poveznicu: Primjer upitnika o broju djece.

Sva ova pitanja mogu biti na jednoj stranici (npr. u istoj grupi), a prikazat će se samo relevantna pitanja. Štoviše, kako unosite godine djece, izraz sum() u zadnjem pitanju dinamički će se ažurirati.

ExpressionScript pruža ovu funkcionalnost tako da svaki izraz okruži imenovanim elementom <span>. Svaki put kada se vrijednost promijeni, ponovno izračunava izraz koji bi se trebao pojaviti u tom elementu <span> i ponovno generira prikaz. Na istoj stranici možete imati desetke ili čak stotine takvih prilagođenih izraza.


Isticanje sintakse

Kako bi pomogao pri unosu i provjeri izraza, EM nudi isticanje sintakse sa sljedećim značajkama:

Vrste i značenja isticanja sintakse

Boja Uzorak Značenje Opis alata (tooltip) Komentari
tan background Sample cijela jednadžba nema Sve unutar vitičastih zagrada što je prepoznato kao jednadžba (npr. nema razmaka na početku ili kraju) bit će označeno tan pozadinom kako bi se razlikovalo od okolnog teksta
bold red text Sample Pogreška Objašnjenje pogreške Može biti nepoznata varijabla ili pogreška u funkciji. Upitnik je neispravan, a pitanja koja ovise o tom izrazu neće se prikazati ispitanicima.
blue text Sample naziv funkcije značenje i dopuštena sintaksa Odnosi se na nazive funkcija ili stvari koje bi trebale biti funkcije jer iza njih slijedi otvorena zagrada. Prikazuju se podebljanim plavim tekstom. Opisi alata prikazuju značenje i dopuštenu sintaksu funkcije.
grey text Sample niz znakova (string) nema Nizovi znakova u jednostrukim i dvostrukim navodnicima prikazuju se sivim tekstom.
cyan text Sample varijabla postavljena na istoj stranici, [name]: pitanje; vrijednost; answerList s kôdovima za svaku vrijednost Svaka varijabla postavljena na istoj stranici kao pitanje koje trenutno uređujete prikazuje se cijan tekstom (može se ažurirati u JavaScriptu). Opis alata prikazuje njezin naziv, stvarno pitanje i trenutnu vrijednost (ili prazno ako nije postavljena). Ako vrsta pitanja očekuje odgovore iz skupa nabrojenih vrijednosti, prikazuje se mapiranje kôdova u prikazane vrijednosti.
green text Sample varijabla postavljena na prethodnoj stranici [name]: pitanje; vrijednost; answerList s kôdovima za svaku vrijednost Svaka varijabla postavljena na prethodnoj stranici prikazuje se podebljanim zelenim tekstom. Opis alata prikazuje njezin naziv, stvarno pitanje i trenutnu vrijednost (ili prazno ako nije postavljena). Ako vrsta pitanja očekuje odgovore iz skupa nabrojenih vrijednosti, prikazuje se mapiranje kôdova u prikazane vrijednosti.
bold pink text Sample varijabla postavljena na kasnijoj stranici općenito: prazna na početku upitnika, ali može biti popunjena putem indeksa ili povratka na prethodno [name ili SGQA kôd]: pitanje; vrijednost; answerList s kôdovima za svaku vrijednost Svaka varijabla postavljena na kasnijoj stranici prikazuje se podebljanim ružičastim tekstom. Opis alata prikazuje njezin naziv, stvarno pitanje i trenutnu vrijednost (ili prazno ako nije postavljena). Ako vrsta pitanja očekuje odgovore iz skupa nabrojenih vrijednosti, prikazuje se mapiranje kôdova u prikazane vrijednosti.
bold tan text Sample Lime zamjenska vrijednost vrijednost Lime zamjenski nizovi (poput {TOKEN:xxx}, {PRIVACY_MESSAGE}) prikazuju se podebljanim tan tekstom.
red text Sample operator dodjele (=) poruka upozorenja Ako koristite operator dodjele (=), taj će se operator prikazati crvenim tekstom. To je namijenjeno sprječavanju slučajne ponovne dodjele vrijednosti kada ste zapravo htjeli provjeriti je li a == b umjesto postavljanja vrijednosti a = b.
normal black text Sample interpunkcija nema Svi ostali interpunkcijski znakovi unutar izraza prikazuju se običnim crnim tekstom.
red-boxed text podebljana crvena linija okružuje pogrešku sintaksna pogreška opis pogreške Sve otkrivene sintaksne pogreške prikazuju se unutar crvenih okvira. Opis alata prikazuje pogrešku. Primjeri uključuju neusklađene zagrade, upotrebu nedefiniranih funkcija, prosljeđivanje pogrešnog broja argumenata funkcijama, loše strukturirane izraze (npr. nedostajući operatori između varijabli), pokušaj dodjele nove vrijednosti varijabli samo za čitanje, pokušaj dodjele vrijednosti elementima koji nisu varijable ili upotrebu nepodržane sintakse. Imajte na umu da sustav za otkrivanje sintaksnih pogrešaka može prijaviti samo jednu pogrešku u izrazu čak i ako ih ima više; međutim, ako se otkrije ijedna pogreška, prikazat će se barem jedna.


Opisima alata (tooltip) nazivamo skočnu poruku koja se prikazuje kada pređete mišem preko određenih funkcija i varijabli.


Dodatna literatura

Primjeri upitnika za ExpressionScript

Slučajevi upotrebe i upute

Primjeri korak po korak

Referenca za programere

Plan razvoja, status, popis zadataka