ExpressionScript Engine - Gabay sa mabilis na pagsisimula
From LimeSurvey Manual
Gabay sa mabilis na pagsisimula
Sa LimeSurvey, maaari mo pang i-customize ang iyong mga survey sa pamamagitan ng paggamit ng ExpressionScript (daglat: ES). Paalala: "Ang ExpressionScript ay tinawag na Expression Manager (EM) sa mga naunang bersyon. Kung makakita ka ng Expression Manager saanman, ito lamang ang lumang pangalan ng ES."
Magagamit ang ES upang tukuyin ang mga sumusunod:
- Navigation/Branching - pinapayagan ang mga sagot ng respondent na baguhin ang pagkakasunud-sunod ng pagpapakita ng mga tanong;
- Tailoring/Piping - tumutulong sa iyong bumuo ng pananalita ng tanong (tulad ng pagtukoy sa mga naunang sagot, o pag-aangkop ng mga pangungusap batay sa edad o kasarian ng iyong mga subject) o kung paano gumawa ng mga custom na ulat (tulad ng mga assessment score o iniangkop na payo);
- Pag-validate - tinitiyak na pumapasa ang mga sagot sa ilang pamantayan, tulad ng min at max na mga value o isang partikular na input pattern.
Nagbibigay ang ES ng madaling paraan upang tukuyin ang lohika para sa bawat isa sa mga tampok na iyon. Halos anumang maisusulat mo bilang karaniwang mathematical equation ay isang wastong expression.
Sa kasalukuyan, nagbibigay ang ES ng access sa 70 function at madali itong palawakin para suportahan ang higit pa. Pinapayagan ka rin nitong i-access ang iyong mga variable gamit ang mga pangalan ng variable na madaling basahin ng tao (sa halip na mga pangalan ng SGQA).
Ipinapakita ng mga susunod na seksyon ang mga pangunahing lugar kung saan ginagamit ang ES.
Gumagamit ang ilang survey ng "Goto Logic", kung saan kapag sinagot mo ang Question1 ng option C, ire-redirect ka sa Question5. Limitado ang pamamaraang ito dahil mahirap itong i-validate. Bukod pa rito, madali itong masira kapag kailangan mong i-reorder ang mga tanong. Sa kabilang banda, gumagamit ang ES ng Boolean relevance equation upang tukuyin ang lahat ng kondisyon kung saan maaaring maging wasto ang isang tanong. Kung relevant ang tanong, ipapakita ito; kung hindi, hindi ito naaangkop, at ang value na "NULL" ay iniimbak sa database.
Para mas maunawaan ang konsepto ng relevance, tumuon tayo sa sumusunod na survey na kumukuwenta ng Body Mass Index (BMI) ng mga respondent ng survey. Para i-download ito, i-click ang sumusunod na link: Halimbawa ng survey ng Body Mass Index.
Ipinapakita sa ibaba ang relevance equation sa column na Relevance pagkatapos ng pangalan ng variable. Ang mga relevance value ng weight, weight_units, height, at height_units ay pawang 1 (default na value), na nangangahulugang palaging ipinapakita ang mga tanong na iyon. Gayunpaman, ang relevance para sa BMI ay {!is_empty(height) and !is_empty(weight)}, na nangangahulugang makukuwenta lamang ang BMI kung maglalagay ang subject ng value para sa parehong height at weight (kaya naiiwasan ang panganib ng zero error). Gayundin, ang tanong na "Report" ay ipinapakita lamang kung sasagutin ng respondent ang lahat ng apat na pangunahing tanong (height, heightunits, weight, weightunits).

Ipinapakita at maaaring i-edit ang relevance kapag:
- nais mong tingnan/i-edit ang relevance sa antas ng tanong
- nais mong tingnan/i-edit ang relevance sa antas ng pangkat
Pagtingin / Pag-edit ng Relevance sa Antas ng Tanong
Kinukuwenta ng equation na ito ang Body Mass Index (BMI). Itinatanong lamang ito kung ilalagay ng tao ang kanyang height at weight.

Ito ang edit screen para sa tanong na "BMI".

Tandaan na hindi ka gumagamit ng mga curly brace kapag naglalagay ka ng relevance equation.
Pagtingin / Pag-edit ng Relevance sa Antas ng Pangkat
Tumuon naman tayo ngayon sa isa pang halimbawa - isang simpleng census survey. Para i-download ito, i-click ang sumusunod na link: Halimbawa ng census survey.
Itinatanong ng unang pahina kung ilang tao ang kasama mong nakatira at iniimbak iyon sa variable na "cohabs". Ipinapakita lamang ang pahinang ito kung mayroon kang higit sa isang kasamang nakatira (ipinapakita ito para sa pangalawang taong kasama mong nakatira). Gayundin, ipinapakita lamang ang p2name, p2age, p2sum kung may tugon ang tanong bago ang bawat isa sa kanila.

Kaya, may mga pamantayan din ng relevance sa antas ng tanong ang pangkat, kung saan lumilitaw lamang ang ilang tanong kung sinagot mo ang ilang tanong bago ang mga ito (hal., ipinapakita ang p2age kung sinagot ang p2name). Pinagsasama ng ES para sa iyo ang relevance sa antas ng pangkat at antas ng tanong. Itinatanong lamang ang mga tanong sa isang pangkat kung relevant ang pangkat sa kabuuan. Pagkatapos, ang subset lamang ng mga tanong sa loob ng pangkat na relevant ang itatanong.
Narito ang screenshot para sa pag-edit ng relevance sa antas ng pangkat ng Cohabitant 2:

Tandaan na hindi ka gumagamit ng curly braces kapag inilalagay mo ang relevance equation.
Tailoring/Piping
Pinapadali ng ES ang simple at kumplikadong conditional tailoring. Minsan kailangan mo lang ng simpleng pagpapalit, tulad ng "Sinabi mong bumili ka ng [Produkto]. Ano ang pinakagusto mo rito?". Minsan naman kailangan mo ng conditional na pagpapalit tulad ng "[G./Gng.] [Apelyido], handa po ba kayong sagutan ang aming survey?". Sa kasong ito, gusto mong gamitin ang "G. o Gng." batay sa kasarian ng tao. Sa ibang pagkakataon, kailangan mo ng mas kumplikadong pagpapalit (halimbawa, batay sa isang mathematical computation). Sinusuportahan ng ES ang bawat isa sa mga uri ng tailoring/piping na ito.
Mga Conditional Equation
Ipinapakita ng halimbawa ng Body Mass Index ang kakayahang kalkulahin ang BMI ng isang tao, kahit na hinahayaan silang ilagay ang kanilang taas at timbang sa dalawang magkaibang yunit (cm vs pulgada at kg vs lbs):

Sa kasong ito, ang weightkg ay {if(weightunits == "kg", weight, weight * 0.453592)}. Ang function na "if()" na ito ay nangangahulugang kung inilagay ng paksa ang timbang sa kilogram, gamitin ang halagang iyon; kung hindi, i-multiply ang inilagay na halaga (pound ang alternatibo) sa 0.453592 upang gawin itong kilogram. Gumagamit ang variable na heightm ng katulad na paraan upang kalkulahin ang taas ng tao sa metro (taas sa cm/100), kahit na inilagay niya ang kanyang taas sa pulgada (1 metro=3.28084 pulgada).
Kinakalkula ang BMI bilang: {weightkg / (heightm * heightm)}.
Panghuli, ang report ay conditional na nag-aangkop ng mensahe para sa paksa, na nagsasabi kung ano ang inilagay niya. (hal., "Sinabi mong 2 metro ang taas mo at 70 kg ang timbang mo.")
Sa larawan sa ibaba, gumagamit ang weightstatus ng nested na "if()" statement upang ikategorya ang tao mula underweight hanggang severely obese. Makikita mo ang equation nito sa pamamagitan ng pagsuri sa logic nito:

Mula sa edit window ng tanong na ito, makikita mo ang dalawang bagay:
- Dapat paligiran ng curly braces ang mga expression sa tailoring
- Maaaring umabot sa maraming linya ang mga expression kung, tulad sa kasong ito, nais mong gawing mas madaling basahin ang nested na conditional logic.

Mga Tailored na Tanong, Sagot, at Report
Ganito ang hitsura ng BMI report:

Narito ang edit window para sa parehong tanong.

Anumang nasa loob ng curly braces ay itinuturing na expression, na may syntax highlighting (may kulay) sa naunang larawan. Kung may mga typo ka (tulad ng maling baybay o hindi natukoy na pangalan ng variable o function), magpapakita ang ES ng error. Sa halimbawa namin sa ibaba:
- ang heightunit.shown ay isang hindi natukoy na pangalan ng variable (ang tama ay heightunits.shown) at
- ang "rnd()" ay isang hindi natukoy na function (ang tamang pangalan ng function ay "round()").
Sa parehong kaso, nasa loob ng pulang kahon ang mga error upang mas madali itong makita at maayos.

Makikita mo rin na mabilis kang makakagawa ng mga kumplikadong report, tulad ng talahanayan ng mga inilagay na halaga o tailored na payo.
Tandaan na dapat paligiran ng curly braces ang lahat ng expression sa tailoring upang malaman ng LimeSurvey kung aling mga bahagi ng tanong ang free text at alin ang dapat i-parse ng ExpressionScript engine.
Pag-validate
Kinokontrol ng ES kung paano gumagana ang karamihan sa mga advanced na opsyon ng tanong. Kinokontrol nito ang mga aspeto tulad ng min/max na bilang ng mga sagot, min/max na indibidwal na halaga, min/max na kabuuang halaga, at pagsuri na tumutugma ang mga inilagay na halaga sa tinukoy na string pattern. Ang anumang halaga sa isa sa mga field na iyon ay itinuturing na expression, kaya maaari kang magkaroon ng min/max na pamantayan na may kumplikadong conditional na ugnayan sa iba pang tanong.
Sa lahat ng kasong ito, dahil ang advanced na attribute ng tanong ay laging itinuturing na expression, hindi ka gumagamit ng curly braces kapag tinutukoy ito.
Ipinapakita ng pahina ng mga sample na survey ang maraming gumaganang halimbawa na naglalaman ng iba't ibang validation expression.
ExpressionScript - paglalahad
Para matuto pa tungkol sa ExpressionScript at kung paano mo magagamit ang iba't ibang expression upang mapahusay ang iyong survey, paki-click ang sumusunod na link.