x

Bab utama

  1. LimeSurvey Cloud vs LimeSurvey CE
  2. Panduan permulaan pantas - LimeSurvey 3.0+
  3. Pemasangan - LimeSurvey CE
  4. Cara mereka bentuk tinjauan yang baik (panduan)
  5. Bermula
  6. Mentadbir LimeSurvey
  7. Tinjauan - pengenalan
  8. Tetapan tinjauan
  9. Menu tinjauan
  10. Struktur tinjauan
  11. Soalan - pengenalan
  12. Kumpulan soalan - pengenalan
  13. Tinjauan - pengurusan
  14. Pilihan bar alat tinjauan
  15. Tinjauan berbilang bahasa
  16. Enjin ExpressionScript - Panduan mula pantas
  17. Ciri tidak dikategorikan dan ciri lanjutan
  18. Soalan Lazim Umum
  19. Penyelesaian Masalah
  20. Penyelesaian sementara
  21. Lesen
  22. Tukar log versi
  23. Pemalam
 Actions

ExpressionScript - Penyampaian

From LimeSurvey Manual

Halaman ini mungkin telah diterjemahkan oleh mesin dan mungkin mengandungi ralat. Papar teks asal bahasa Inggeris · Perbaiki terjemahan ini
This page is a translated version of the page ExpressionScript - Presentation and the translation is 100% complete.


Pengenalan

LimeSurvey menggunakan Skrip ungkapan yang membolehkan LimeSurvey menyokong percabangan, penilaian, pengesahan dan penyesuaian yang lebih kompleks. Ia menggantikan cara LimeSurvey menguruskan Penggantian, Kondisi dan Penilaian di bahagian belakang. Ia juga mempercepatkan pemprosesan dengan ketara kerana ia menghapuskan kebanyakan bacaan pangkalan data semasa larian. Skrip ungkapan dibangunkan oleh Dr. Thomas White (TMSWhite).


Definisi utama

  1. Ungkapan: Apa-apa sahaja yang diapit oleh kurungan kerinting:
    • Selagi tiada ruang kosong serta-merta selepas kurungan pembuka atau sebelum kurungan penutup.
    • Kandungan ungkapan dinilai oleh EM, jadi ia boleh mengandungi formula matematik, fungsi, serta pemprosesan rentetan dan tarikh yang kompleks.
  2. Penyesuaian: Kadangkala dipanggil "piping". Ia ialah proses mengubah suai teks secara bersyarat:
    • Anda mempunyai akses kepada semua 'medan penggantian', data peserta dan data jawapan.
    • Anda juga mempunyai akses yang lebih mudah kepada soalan, jawapan dan sifatnya.
  3. Persamaan kaitan: Atribut soalan baharu yang mengawal keterlihatan soalan:
    • Jika terdapat persamaan kaitan, maka soalan hanya dipaparkan jika kaitan dinilai sebagai benar.
    • Secara dalaman, semua arahan array_filter dan array_filter_exclude menjadi kaitan peringkat subsoalan.
  4. SGQA (cara pemboleh ubah dinamakan pada masa lalu):
    • Bermaksud Survey-Group-Question-Answer (Tinjauan-Kumpulan-Soalan-Jawapan)
    • Nama pemboleh ubah SGQA kelihatan seperti 123X5X382X971, dan mungkin mempunyai akhiran subsoalan.
    • Nama pemboleh ubah ini khusus kepada kod pangkalan data S/Q/G/A yang mendasarinya, jadi ia sering perlu diubah.
  5. Persamaan Jenis soalan: Jenis soalan baharu yang menyimpan pengiraan atau laporan ke dalam pangkalan data:
    • Ia seperti soalan Boilerplate, tetapi kandungannya disimpan ke dalam pangkalan data walaupun anda menetapkan "Sentiasa sembunyikan soalan ini".
  6. Kod soalan: Ini ialah nama pemboleh ubah pilihan untuk EM:
    • Ini boleh menjadi nama deskriptif yang menunjukkan tujuan soalan, menjadikan logik yang kompleks lebih mudah dibaca.
    • Kod soalan yang sah TIDAK boleh bermula dengan nombor, jadi apabila menggunakan kod soalan untuk menomborkan soalan anda, gunakan sahaja "q1", atau "q1a" atau "g1q2".
    • Inilah yang menjadi nama pemboleh ubah jika anda mengeksport data ke SPSS atau R. Jadi, jika anda melakukan analisis statistik, anda perlu mencipta kod soalan yang unik sahaja.


Adakah saya perlu menggunakan Skrip ungkapan?

Jawapan ringkasnya ialah "tidak". Namun, ini sangat bergantung pada kerumitan tinjauan yang ingin anda cipta.

Sebagai contoh, editor Kondisi merangkumi beberapa ungkapan asas yang boleh digunakan pada soalan tinjauan anda. Namun, editor Kondisi adalah terhad. Itulah sebabnya Skrip ungkapan digunakan - ia meluaskan skop kemungkinan penyesuaian.


Bolehkah saya menggabungkan Kondisi dan persamaan kaitan?

Ya. Anda boleh menggunakan editor Kondisi untuk sesetengah soalan dan persamaan kaitan untuk soalan lain.

Anda tidak boleh menetapkan kedua-dua syarat dan ungkapan dalam soalan yang sama! Sebaik sahaja syarat ditetapkan, ia menggantikan apa-apa ungkapan yang ditulis dalam medan persamaan kaitan. Selain itu, medan Persamaan kaitan tidak lagi boleh diedit secara manual.

Namun, terdapat cara untuk menggunakan kedua-dua ungkapan dan syarat dalam satu soalan. Seperti yang dinyatakan di atas, syarat menggantikan medan persamaan kaitan. Setelah itu, semak persamaan yang baru dicipta dan salin ke dalam editor teks. Hapus syarat yang baru dicipta daripada editor Kondisi kemudian edit soalan dengan menambah ungkapan berasaskan syarat daripada fail editor teks anda bersama-sama ungkapan lain yang ingin anda gunakan.


Bagaimanakah saya harus memilih antara Kondisi dan Kaitan?

Berikut ialah senarai kelebihan dan kekurangan setiap gaya:

Gaya Kelebihan Kekurangan
Kondisi 1. GUI yang baik untuk mencipta syarat mudah.
2. GUI didokumenkan dengan baik dan difahami oleh pasukan sokongan
1. Hanya menyokong perbandingan mudah dan tidak mengendalikan syarat "AND" dan "OR" dengan baik.
2. Syarat berlata berfungsi secara tidak menentu
3. Perlahan - intensif pangkalan data - ia boleh memperlahankan tinjauan yang panjang.
4. Terdapat beberapa masalah yang dilaporkan dengan pemuatan semula syarat.
5. GUI tidak berskala dengan baik apabila terdapat berpuluh, beratus atau beribu soalan.
6. Penukaran tinjauan berasaskan kertas mungkin perlahan kerana ia mesti menggunakan nama SGQA.
7. Selalunya memerlukan pengaturcara untuk menulis kod logik tersuai bagi percabangan yang kompleks.
Kaitan 1. Menyokong logik yang sangat kompleks, termasuk 80+ fungsi dan operator matematik/rentetan.
2. Sokongan sempurna untuk logik berlata.
3. Pantas - tiada panggilan pangkalan data tambahan, menyokong tinjauan 1000+ soalan.
4. Tiada masalah dengan pemuatan semula logik kerana ia tidak memerlukan kod SGQA.
5. Penyerlahan sintaks berskala kepada tinjauan 1000+ soalan.
6. Mudah dan pantas digunakan bagi kumpulan yang ingin mengkomputerkan tinjauan berasaskan kertas sedia ada.
7. Ia menyokong temu bual separa berstruktur dan tinjauan epidemiologi dengan mudah tanpa memerlukan pengaturcara.
1. Tiada GUI untuk syarat mudah - sebaliknya ia menggunakan penyerlahan sintaks.


Nota:
  • Kami mengesyorkan anda menggunakan mana-mana yang lebih sesuai dengan keperluan anda.
  • Untuk penjelasan lebih terperinci tentang ciri-ciri EM, klik pautan berikut.

Bermula

Cara terbaik untuk bermula dengan EM ialah:

  • Pasang versi stabil terkini daripada https://www.limesurvey.org/en/download.
  • Import dan terokai beberapa tinjauan contoh.
  • Terokai kes penggunaan dan panduan cara, serta contoh langkah demi langkah.
  • Terokai dokumentasi EM (halaman ini)
    • Ujian Unit bagi Ungkapan Terpencil (lanjutan)
      • menunjukkan contoh penggunaan semua fungsi dan operator EM, serta hasil PHP dan JavaScript;
      • perhatikan bahawa terdapat beberapa fungsi yang menghasilkan keputusan berbeza dalam versi PHP dan JavaScript, jadi halaman ini membolehkan anda merancang logik EM anda dengan sewajarnya.

Istilah

Perkataan berikut lazim digunakan untuk menerangkan keupayaan EM:

  • Percabangan berasaskan kaitan - jika sesuatu soalan berkaitan, maka tanyakannya, jika tidak jangan (cth., jadikan ia tidak kelihatan dan tandakannya sebagai NULL dalam pangkalan data). Anda boleh menemui medan Kaitan dalam panel editor soalan dan juga dalam panel editor kumpulan soalan. Yang kedua digunakan untuk menggunakan satu set syarat pada keseluruhan kumpulan tanpa perlu menyalin syarat yang sama pada setiap soalan, dan/atau menggabungkan logik bersyarat peringkat kumpulan dan soalan).
  • Penyesuaian - Setelah anda tahu soalan mana yang perlu ditanya, penyesuaian (kadangkala dipanggil piping) menentukan bagaimana soalan itu harus ditanya. Ini membolehkan anda menyokong bukan sahaja penggantian mudah (seperti {TOKEN:FIRSTNAME}), tetapi juga konjugasi kata kerja dan infleksi kata nama berdasarkan jantina atau bilangan subjek anda. Ia juga membolehkan anda menukar mesej yang anda sampaikan kepada responden tinjauan berdasarkan sama ada mereka menjawab (atau bagaimana mereka menjawab) soalan lain.
  • Persamaan - EM menambah jenis soalan baharu yang dipanggil Persamaan yang menyimpan hasil sesuatu Ungkapan. Hasil persamaan dikira dan ditulis ke dalam pangkalan data, walaupun anda menyembunyikannya pada halaman. Justeru, ia digunakan untuk pengiraan pemarkahan tersembunyi, navigasi berdasarkan persamaan kompleks, penilaian dan laporan yang akan dijana dan disimpan dalam pangkalan data.


Kaitan dan kaitan berlata

Setiap jenis soalan kini mempunyai pilihan Kaitan yang mengawal sama ada soalan dipaparkan atau tidak. EM memproses setiap Persamaan kaitan mengikut susunan ia muncul dalam tinjauan. Jika ungkapan itu benar (atau tiada - untuk menyokong tinjauan lama), soalan akan dipaparkan. Jika ia tidak berkaitan, maka soalan akan disembunyikan, dan nilainya akan di-NULL-kan dalam pangkalan data. Jika tiada soalan yang berkaitan dalam sesuatu kumpulan, keseluruhan kumpulan akan dilangkau.

Selain itu, jika mana-mana pemboleh ubah dalam ungkapan tidak berkaitan, maka ungkapan sentiasa dinilai sebagai palsu. Ini membolehkan Kaitan berlata supaya anda tidak perlu menulis persamaan kaitan yang sangat panjang untuk setiap soalan.

Katakan anda mempunyai lima soalan Q1-Q5, dan anda hanya mahu menunjukkan Q2 jika Q1 dijawab, dan Q3 jika Q2 dijawab, dan seterusnya. Persamaan kaitan mungkin seperti berikut:

Kod Soalan Kaitan Soalan
Q1 1 Siapakah nama anda?
Q2 Q1 {Q1}, berapakah umur anda?
Q3 Q2 Jadi, umur anda {Q2} tahun. Adakah anda sudah berkahwin?
Q4 Q3 == "Y" {Q1}, sudah berapa lama anda berkahwin?
Q5 Q4 Berapa orang anak yang anda ada, {Q1}?


Kaitan peringkat kumpulan

ExpressionScript juga menyokong kaitan peringkat kumpulan. Ini memudahkan pelaksanaan gelung. Katakan anda ingin mengumpul maklumat daripada sehingga 10 entiti (seperti produk atau orang dalam sesebuah isi rumah), di mana anda mula-mula menentukan berapa banyak entiti yang memerlukan susulan (seperti dengan bertanya berapa orang tinggal dalam isi rumah atau meminta orang menandakan produk yang mereka suka daripada senarai yang panjang). Setelah mengetahui berapa banyak entiti yang memerlukan susulan, anda boleh menggunakan kaitan peringkat kumpulan seperti {count >= 1}, {count >=2}, ... {count >= 10} untuk setiap satu daripada 10 kumpulan soalan susulan. Dalam setiap kumpulan, anda boleh mempunyai logik bersyarat peringkat soalan (cth., soalan susulan khusus jantina atau umur bagi setiap subjek). Persamaan kaitan peringkat soalan dan kumpulan digabungkan dengan AND untuk menentukan yang mana patut dipaparkan.

Untuk menyemak contoh sedemikian, import tinjauan berikut: Contoh tinjauan banci.

Dalam tangkapan skrin di bawah, dapat diperhatikan bahawa kumpulan Person 1 dipaparkan (atau berkaitan) jika responden tinggal bersama sekurang-kurangnya seorang lagi penghuni ssepangsa:



Penyesuaian/Piping

Apa-apa sahaja dalam kurungan kerinting kini dianggap sebagai Ungkapan (dengan satu pengecualian yang diterangkan di bawah). Ungkapan mempunyai akses kepada semua LimeReplacementFields dan pemboleh ubah (melalui beberapa alias), semua operator persamaan biasa (matematik, logik dan perbandingan), serta berpuluh-puluh fungsi (yang berfungsi secara dinamik walaupun di bahagian klien).

Dengan menggunakan persamaan ini, anda boleh melakukan perkara seperti:

  1. Memaparkan mesej yang disesuaikan secara bersyarat kepada responden berdasarkan jawapan sebelumnya;
  2. Mencipta penilaian dan memaparkan keputusan penilaian (atau bercabang atau memaparkan mesej secara bersyarat) berdasarkan keputusan tersebut, tanpa menggunakan modul penilaian itu sendiri;
  3. Mengkonjugasi kata kerja dan mengubah kata nama dalam soalan, jawapan dan laporan;
  4. Memaparkan ringkasan jawapan sebelum halaman "Tunjukkan jawapan anda" di penghujung tinjauan.


Persamaan

Terdapat jenis soalan baharu yang dipanggil Persamaan. Anggaplah ia sebagai jenis soalan Paparan teks, kecuali ia menyimpan nilai yang dipaparkan dalam pangkalan data. Jadi, jika teks soalan Persamaan mengandungi pengiraan Penilaian, nilai tersebut akan disimpan dalam pangkalan data dalam pemboleh ubah yang boleh dipaparkan dalam statistik awam atau persendirian.


Sintaks

Apa-apa sahaja yang terkandung dalam kurungan kerinting kini dianggap sebagai Ungkapan (dengan satu pengecualian: tidak boleh ada ruang kosong di hadapan atau di belakang - ini diperlukan bagi memastikan ExpressionScript tidak cuba memproses JavaScript yang tertanam).

Perhatikan bahawa ungkapan boleh merentangi beberapa baris, selagi tiada ruang kosong selepas kurungan kerinting pembuka atau sebelum kurungan kerinting penutup. Ini amat berguna untuk pernyataan "if()" bersarang seperti ini:

{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 menyokong sintaks berikut:

  • Semua operator matematik standard (cth. +,-,*,/,!);
  • Semua operator perbandingan standard (cth. <,<=,==,!=,>,>=, serta setaranya: lt, le, eq, ne, gt, ge);
  • Tanda kurung (supaya anda boleh mengumpulkan sub-ungkapan);
  • Operator bersyarat (cth. &&,| | dan setaranya: and, or);
  • Rentetan dalam petikan tunggal dan berganda (yang masing-masing boleh membenamkan rentetan dengan jenis petikan yang lain);
  • Operator koma (supaya boleh mempunyai senarai ungkapan dan hanya memulangkan hasil akhir);
  • Operator penugasan (=);
  • Pemboleh ubah pra-takrif (untuk merujuk soalan, atribut soalan dan jawapan) - cth. kod SGQA;
  • Fungsi pra-takrif (sudah ada 80+, dan mudah untuk menambah lagi).


Operator

Sintaks EM mengikut keutamaan operator biasa:

Tahap Operator Keterangan
1 () tanda kurung untuk pengumpulan atau memanggil fungsi
2 ! - + operator unari: not, penafian, tambah unari
3 * / darab, bahagi
4 + - tambah, tolak
5 < <= > >= lt le gt ge perbandingan relatif
6 == != eq ne perbandingan kesamaan
7 and AND logik
8 or OR logik
9 = operator penugasan
10 , operator koma
Demi konsistensi antara JavaScript dan PHP, operator tambah (+) melakukan penambahan jika kedua-dua operan ialah nombor, tetapi melakukan penggabungan jika kedua-dua bahagian ialah rentetan bukan nombor. Walau bagaimanapun, kami mengesyorkan penggunaan fungsi "join()" untuk penggabungan, kerana ia menjelaskan lagi niat anda. Ia juga mengelakkan hasil yang tidak dijangka jika anda menjangkakan rentetan tetapi mendapat nombor (atau sebaliknya).

Amaran tentang ketidakpadanan nombor dan rentetan serta perbandingan mengikut abjad/angka

Apabila anda ingin membandingkan nilai dengan perbandingan relatif atau kesamaan, beri perhatian kepada ketidakpadanan. Nilai yang dimasukkan oleh pengguna (atau diberikan melalui kod jawapan) boleh digunakan sebagai nombor jika ia jelas ialah nombor. Jika anda mengapit salah satu nilai dengan ", perbandingan teks/rentetan akan berlaku. Jika anda mahu membandingkan sebagai nombor, jangan sekali-kali mengapit nombor dengan ".

Contohnya Q0.NAOK > "50" adalah benar jika Q0.NAOK ialah soalan berangka dengan nilai 9. Ini kerana operator > akan menganggapnya sebagai perbandingan mengikut abjad dan bukan perbandingan berangka.

Untuk memastikan anda membandingkan nilai integer, anda boleh menggunakan intval(Q0.NAOK) > 50. Ingat bahawa jika Q0.NAOK bukan nombor (kosong atau rentetan), maka intval(Q0.NAOK) === 0. Untuk membandingkan nilai rentetan ("A" < "B") gunakan strcmp secara terus: strcmp(Q0.NAOK,"B") atau strcmp(Q0.NAOK,"A5").

Peringatan tentang penggunaan Operator Penugasan (=)

Anda harus mengelakkan penggunaan operator penugasan kecuali benar-benar perlu, kerana ia boleh menyebabkan kesan sampingan yang tidak dijangka. Contohnya, jika anda mengubah nilai jawapan sebelumnya, kaitan lata dan logik pengesahan antara soalan itu dengan soalan semasa tidak dikira semula, jadi anda mungkin berakhir dengan data yang tidak konsisten secara dalaman (cth. soalan yang kekal berjawab tetapi sepatutnya di-NULL-kan, atau soalan yang dilangkau tetapi sepatutnya dijawab). Secara amnya, jika anda mahu menetapkan nilai kepada pemboleh ubah, anda harus mencipta jenis soalan Persamaan dan menggunakan ungkapan untuk menetapkan nilainya. Walau bagaimanapun, ada kalanya yang jarang apabila orang benar-benar memerlukan operator ini, jadi kami menyediakannya.

Sebagai peringatan tentang operator ini, ia dipaparkan dalam fon merah dalam persamaan sintaks (supaya anda tidak mengelirukannya dengan "==").



Menggunakan operator penugasan

Sebab utama anda mungkin mahu menggunakan operator penugasan ialah:

  • Anda perlu menetapkan nilai lalai melalui persamaan bagi soalan yang tidak menerima nilai lalai (seperti senarai radio, yang antara muka penggunanya membolehkan anda memilih salah satu pilihan jawapan, tetapi tidak membolehkan anda memasukkan persamaan). Namun, berhati-hatilah, kerana LimeSurvey tidak dapat mengesahkan bahawa persamaan anda menghasilkan salah satu jawapan yang dibenarkan bagi soalan tersebut;
  • Anda perlu mengubah secara paksa jawapan kepada soalan sebelumnya berdasarkan jawapan yang kemudian;
  • dan sebagainya...


  Perhatian : Penugasan hanya dilakukan dalam PHP. Ini bermakna nilai tidak dikemas kini pada halaman yang sama, tetapi hanya apabila pengguna beralih ke halaman seterusnya. Oleh itu, sila beri perhatian apabila operator penugasan digunakan pada halaman yang sama dengan ungkapan lain.



Anda boleh menggunakan seluruh sistem expression manager untuk tujuan ini. Adalah lebih baik menggunakan Persamaan untuk tujuan ini.

Beberapa contoh:

  • Tetapkan jawapan kepada soalan teks pendek dalam huruf kecil : {QCODE=strtolower(QCODE.NAOK)};
  • Tetapkan jawapan lalai kepada jenis soalan tatasusunan pada permulaan tinjauan : {Q1_SQ1=(is_empty(Q1_SQ1.NAOK),"A99",Q1_SQ1.NAOK)};
  • Tetapkan jawapan lalai kepada jenis soalan tatasusunan teks pada permulaan tinjauan : {Q1_SQY1_SQX1 = (is_empty(Q1_SQY1_SQX1.NAOK),"Inserted answer", Q1_SQY1_SQX1.NAOK)};
  • Tetapkan jawapan dengan syarat : {QCODE=if(YesNo="Y","A1","")}.

Keselamatan XSS

Dengan XSS didayakan, sesetengah bahagian sistem expression manager tidak boleh digunakan:

  • memulakan teg HTML dalam satu ungkapan tetapi menamatkannya dalam ungkapan lain;
  • menggunakan ungkapan kompleks dalam URL.


Sila ambil perhatian bahawa XSS diaktifkan secara lalai dalam setiap pemasangan LimeSurvey.


Contoh dan penyelesaian alternatif:

  • {if( 1 ,"<strong>","")}information{if( 1 ,"</strong>","")} tidak berfungsi dengan keselamatan XSS, di sini anda boleh menggunakan {if(1,"<strong>information</strong>","information")};
  • <a href="/script.php?value={if(QCODE == "Y","yes","no")}">next</a>, di sini anda boleh menggunakan soalan persamaan kerana penggunaan kod soalan yang lengkap adalah dibenarkan : <a href="/script.php?value={EQUATION.NAOK}">next</a>.


Akses kepada pemboleh ubah

ExpressionScript menyediakan akses baca sahaja kepada mana-mana pemboleh ubah yang anda perlukan. Untuk keserasian ke belakang, ia menyediakan akses kepada yang berikut:

  • TOKEN:xxx - nilai sesuatu TOKEN (cth., TOKEN:FIRSTNAME, TOKEN:ATTRIBUTE_5) (hanya untuk bukan tinjauan tanpa nama).
  • Semua nilai {XXX} yang digunakan oleh templat.
  • Dalam teks soalan, anda boleh menggunakan {QID} yang digantikan dengan ID soalan dan {SGQ} yang digantikan dengan SGQA bagi soalan tersebut.
  • {SAVEDID} untuk ID jawapan semasa

Selain itu, ExpressionScript membolehkan anda merujuk pemboleh ubah melalui Kod Soalan (lajur 'title' dalam jadual soalan di dalam pangkalan data). Ini juga merupakan label pemboleh ubah yang digunakan apabila anda mengeksport data anda ke SPSS, R, atau SAS. Sebagai contoh, jika anda mempunyai soalan tentang nama, umur, dan jantina, anda boleh memanggil pemboleh ubah tersebut name, age, dan gender dan bukannya 12345X13X22, 12345X13X23, dan 12345X13X24. Ini menjadikan persamaan lebih mudah dibaca dan logiknya lebih mudah disahkan oleh semua orang, di samping memungkinkan soalan disusun semula tanpa perlu menjejaki nombor kumpulan atau soalan.

Penting: Adalah lebih selamat untuk merujuk pemboleh ubah yang terdapat pada halaman atau soalan sebelumnya.

Selain itu, ExpressionScript membolehkan anda mengakses banyak sifat soalan:


Sintaks Maksud Contoh Hasil contoh
Qcode alias bagi Qcode.code {implode(',',name,gender)} 'Tom','M'
Qcode.code kod jawapan yang dipilih bagi soalan jika ia berkaitan (jika tidak, kosong), atau nilai teks jika ia bukan soalan berkod {implode(',',name.code,gender.code)} 'Tom','M'
Qcode.NAOK sama seperti Qcode - lihat perbincangan tentang NAOK {gender.NAOK} 'M'
Qcode.value nilai penilaian bagi soalan jika ia berkaitan (jika tidak, kosong), atau nilai teks jika ia bukan soalan berkod {gender.value} '1'
Qcode.valueNAOK sama seperti Qcode.value - lihat perbincangan tentang NAOK {gender.valueNAOK} '1'
Qcode.shown nilai paparan bagi soalan {implode(',',name.shown,gender.shown)} 'Tom','Male'
Qcode.question teks soalan {gender.question} 'What is your gender?'
Qcode.mandatory sama ada soalan itu wajib (Y/N) {gender.mandatory} 'N'
Qcode.qid nombor soalan dalaman (bukan nombor berurutan) {gender.qid} 337
Qcode.type jenis soalan {gender.type} 'G'
Qcode.jsName nama javascript yang betul bagi soalan, tanpa mengira sama ada diisytiharkan pada halaman ini atau tidak {gender.jsName} 'java1827X3X337'
Qcode.gid nombor kumpulan dalaman (bukan nombor berurutan) {gender.gid} 3
Qcode.qseq nombor berurutan bagi soalan, bermula dari 0 {gender.qseq} 5
Qcode.gseq nombor berurutan bagi kumpulan, bermula dari 0 {gender.gseq} 1
Qcode.relevanceStatus sama ada soalan itu berkaitan pada masa ini (0 atau 1) {gender.relevanceStatus} 1
Qcode.relevance persamaan kaitan peringkat soalan {gender.relevance} '!is_empty(name)'
Qcode.grelevance persamaan kaitan peringkat kumpulan {gender.grelevance} 'num_children >= 5'
Qcode.sgqa nilai SGQA bagi soalan ini {gender.sgqa} '1827X3X337'


Isu editor HTML

Jika anda menggunakan Editor HTML, sesetengah aksara digantikan dengan entiti HTML.

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

Jika anda menggunakan Editor HTML, anda perlu menggunakan:

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


Anda disyorkan untuk membersihkan HTML yang muncul di dalam ungkapan anda. Jika anda menggunakan Editor HTML LimeSurvey, klik butang "Source" (terletak di bahagian kiri atas editor) dan hapus semua aksara yang tidak berkaitan dengan ungkapan anda (cth.,

,
, dan sebagainya).

Penamaan pemboleh ubah Qcode

Berikut ialah butiran tentang cara membina Qcode (dan mengakses beberapa sifat) mengikut jenis soalan. Secara umum, Qcode dibina sebagai:

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

Bagi comment dan other, kod soalan yang sepadan masing-masing ialah QuestionCode_comment dan QuestionCode_other.

Jenis Keterangan Kod Subsoalan Pilihan jawapan Skala Kod jawapan Jawapan dipaparkan Kaitan
5 Butang radio pilihan 5 poin Q1 1-5 {Q1} {Q1.shown} {Q1==3}
B Tatasusunan (pilihan 10 poin) butang radio Q2 L1-L6 1-10 {Q2_L2} {Q2_L2.shown} {Q2_L2==7}
A Tatasusunan (pilihan 5 poin) butang radio Q3 1-5 1-5 {Q3_1} {Q3_1.shown} {Q3_1>=3}
1 Tatasusunan (label fleksibel) skala dua Q4 sq1-sq5 0:a1-a3 1:b1-b3 {Q4_sq1_0} {Q4_sq1_1.shown} {Q4_sq1_1=='b2'}
H Tatasusunan (fleksibel) - format lajur Q5 1-5 s,m,t {Q5_1} {Q5_1.shown} {Q5_1=='s'}
F Tatasusunan (fleksibel) - format baris Q6 F1-F5 1-5 {Q6_F3} {Q6_F3.shown} {Q6_F3==4}
E Tatasusunan (Naik/Sama/Turun) butang radio Q7 1-7 I,S,D {Q7_4} {Q7_4.shown} {Q7_4=='D'}
: Tatasusunan (multi fleksi) 1 hingga 10 Q8 ls1,todo,ls2 min,max,avg {Q8_ls1_max} {Q8_ls2_avg.shown} {Q8_ls2_min==7}
; Tatasusunan (multi fleksi) teks Q9 hp,st,sw 1st,2nd,3rd {Q9_hp_3rd} {Q9_hp_3rd.shown} {Q9_hp_3rd=='Peter'}
C Tatasusunan (Ya/Tidak pasti/Tidak) butang radio Q10 1-5 Y,N,U {Q10_1} {Q10_1.shown} {Q10_3=='Y'}
X Soalan boilerplate Q11 {Q11.shown}
D Tarikh Q12 {Q12} {Q12.shown}
* Persamaan Q13 {Q13} {Q13.shown} {Q13>5}
~124~ Muat naik fail (merekodkan bilangan fail yang dimuat naik) Q14 {Q14} {Q14>0}
G Senarai juntai bawah jantina Q15 M,F {Q15} {Q15.shown} {Q15=='M'}
U Teks percuma besar Q16 {Q16} {Q16.shown} {strlen(Q16)>100}
I Soalan bahasa Q17 {Q17} {Q17.shown} {Q17=='en'}
! Senarai - juntai bawah Q18 1-5 {Q18} {Q18.shown} {Q18==3}
L Senarai juntai bawah/senarai butang radio Q19 A-Z {Q19} {Q19.shown} {Q19=='X'}
O Senaraikan dengan komen, juntai bawah/senarai butang radio + kawasan teks Q20 A-F {Q20},{Q20comment} {Q20.shown} {Q20=='B'}
T Teks bebas panjang Q21 {Q21} {Q21.shown} {strstr(Q21,'hello')>0}
M Pelbagai pilihan, kotak semak Q22 A-F, other {Q22_E}, {Q22_other} {Q22_E.shown}, {Q22_other.shown} {Q22_E=='Y'}
P Pelbagai pilihan dengan komen, kotak semak + teks Q23 A-F {Q23_D}, {Q23_Dcomment} {Q23_D.shown} {!is_empty(Q23)}
K Soalan berangka berbilang Q24 self,mom,dad {Q24_self} {Q24_self.shown} {Q24_self>30}
Q Teks pendek berbilang Q25 A-F {Q25_B} {Q25_B.shown} {substr(Q25_B,1,1)=='Q'}
N Jenis soalan berangka Q26 {Q26} {Q26.shown} {Q26 > 30}
R Gaya kedudukan Q27 1-4 {Q27_1} {Q27_1.shown} {Q27_1==3}
S Teks percuma pendek Q28 {Q28} {Q28.shown} {Q28=='mine'}
Y Butang radio Ya/Tidak Q29 {Q29} {Q29.shown} {Q29=='Y'}


Penggunaan NAOK

NAOK --> "Not Applicable" (NA) is alright (OK), iaitu "Tidak Berkenaan" adalah dibenarkan


Penggunaan NAOK bermaksud bahawa semua atau sebahagian pemboleh ubah tidak berkaitan (cth., "Not Applicable" (NA) is alright (OK)).

Sebagai contoh: count(Q1_SQ1,Q1_SQ2,Q1_SQ3,Q1_SQ4) sentiasa memberikan rentetan kosong jika satu subsoalan bagi Q1 ditapis. Untuk mengira bilangan subsoalan yang ditandakan dalam soalan sedemikian, anda boleh menggunakan count(Q1_SQ1.NAOK,Q1_SQ2.NAOK,Q1_SQ3.NAOK,Q1_SQ4.NAOK). Jika subsoalan itu tersembunyi, EM mengembalikan rentetan kosong.

Tanpa NAOK, jika satu soalan atau satu subsoalan tersembunyi, EM sentiasa mengembalikan rentetan kosong (sama seperti mengembalikan false).

Akhiran .shown sentiasa menggunakan sistem NAOK (rentetan kosong jika tersembunyi), tetapi jika anda memerlukan kod jawapan: sentiasa elok untuk menambah .NAOK selepas kod soalan (kecuali jika anda memerlukannya dan tahu apa yang anda lakukan).

Maklumat lanjut disediakan dalam subseksyen Mengatasi Syarat Lata.


Pemboleh ubah terpelihara "this", "self", dan "that"

Kerap kali anda ingin menilai semua bahagian sesuatu soalan, seperti mengira berapa banyak subsoalan telah dijawab atau menjumlahkan skor. Pada masa lain anda hanya ingin memproses baris atau lajur tertentu bagi sesuatu soalan (seperti mendapatkan jumlah baris atau lajur dan menyimpannya dalam pangkalan data). Pemboleh ubah terpelihara ini menjadikan proses tersebut agak mudah.


Pemboleh ubah "This"

Pemboleh ubah "this" digunakan secara eksklusif dalam pilihan "Persamaan pengesahan soalan" dan "Persamaan pengesahan subsoalan" (yang kemudian tidak boleh dilakukan daripada GUI). Ia dikembangkan kepada nama pemboleh ubah bagi setiap sel dalam soalan tersebut. Jadi, jika anda ingin memastikan setiap entri lebih besar daripada tiga, anda akan menetapkan "Persamaan pengesahan subsoalan" kepada (this > 3).


Pemboleh ubah "Self"

Pemboleh ubah "self" dan "that" lebih berkuasa, dan berfungsi sebagai makro yang dikembangkan sebelum persamaan diproses. Pilihan sintaks bagi pemboleh ubah "self" ialah:

  • self
  • self.suffix
  • self.sub-selector
  • self.sub-selector.suffix
  1. suffix ialah mana-mana akhiran qcode biasa (cth., NAOK, value, shown)
  1. sub-selector boleh jadi salah satu daripada yang berikut:
  • comments - hanya subsoalan yang merupakan komen (cth., pelbagai pilihan dengan komen dan senaraikan dengan komen);
  • nocomments - hanya subsoalan yang bukan komen;
  • sq_X - dengan X ialah pengecam baris atau lajur. Hanya subsoalan yang sepadan dengan corak X dipilih. Perhatikan bahawa carian dilakukan pada pengecam kod yang lengkap, kemudian sq_X memadankan dan memasukkan subsoalan nX, X, Xn (cth., jika anda menggunakan sq_1, subsoalan a1, 1a, 1, 11 atau 001 turut dimasukkan). Beri perhatian pada jenis soalan skala dwi, yang kod subsoalannya ialah QCODE_SQCODE_1 dan QCODE_SQCODE_1, serta pada jenis soalan kedudukan, yang kod subsoalannya ialah QCODE_1,QCODE_2 ....

Contoh:

  • Adakah mana-mana bahagian soalan telah dijawab? -> {count(self.NAOK)>0}
  • Apakah skor penilaian untuk soalan ini? -> {sum(self.value)}

Anda juga boleh menggunakannya untuk mendapatkan jumlah baris dan lajur. Katakan anda mempunyai tatasusunan nombor dengan baris A-E dan lajur 1-5.

  • Berapakah jumlah besar? -> {sum(self.NAOK)}
  • Berapakah jumlah baris B? -> {sum(self.sq_B.NAOK)}
  • Berapakah jumlah lajur 3? -> {sum(self.sq_3.NAOK)}


Pemboleh ubah "That"

Pemboleh ubah "that" adalah seperti pemboleh ubah "self", tetapi membolehkan anda merujuk soalan lain. Sintaksnya ialah:

  • that.qname
  • that.qname.suffix
  • that.qname.sub-selector
  • that.qname.sub-selector.suffix

qname ialah nama soalan tanpa sebarang sambungan subsoalan. Jadi, mari kita cipta soalan 'q1', dengan 'q' turut mewakili qnamenya.

Contoh:

  • Adakah mana-mana bahagian soalan q1 telah dijawab? -> {count(that.q1.NAOK)>0}
  • Apakah skor penilaian untuk q2? -> {sum(that.q2.NAOK)}
  • Berapakah jumlah besar q3? -> {sum(that.q3.NAOK)}
  • Berapakah jumlah baris C dalam q4? -> {sum(that.q4.sq_C.NAOK)}
  • Berapakah jumlah lajur 2 dalam q4? -> {sum(that.q4.sq_2.NAOK)}

Pemboleh ubah "self" dan "that" boleh digunakan dalam mana-mana kaitan, pengesahan atau penyesuaian.

Satu perkara yang perlu diberi perhatian ialah apabila anda menggunakan ciri Show logic file, ia akan memaparkan nilai "self" dan "that" yang telah dikembangkan. Ini membolehkan anda melihat persamaan sebenar yang akan dijana supaya anda (dan EM) dapat mengesahkan sama ada pemboleh ubah tersebut wujud atau tidak. Ini mungkin kelihatan mengelirukan kerana anda mungkin melihat persamaan yang agak panjang. Walau bagaimanapun, jika anda mengedit soalan, anda akan melihat persamaan asal yang menggunakan "self" dan/atau "that".

Anda tidak seharusnya menggunakan pemboleh ubah ini jika
  • anda mahu menamakan setiap pemboleh ubah yang digunakan dalam persamaan secara eksplisit, atau
  • menggunakan pemboleh ubah yang tidak mempunyai subsoalan (cth., soalan jawapan tunggal). Dalam kes tersebut, meletakkan awalan "that" pada pemboleh ubah adalah berlebihan, dan anda berisiko mendapat keputusan yang tidak dijangka.

Akses kepada fungsi

ExpressionScript menyediakan akses kepada fungsi matematik, rentetan dan fungsi yang ditakrifkan pengguna, seperti yang ditunjukkan di bawah. Ia mempunyai setara PHP dan JavaScript untuk fungsi-fungsi ini supaya ia berfungsi secara serupa di bahagian pelayan (PHP) dan bahagian klien (JavaScript). Menambah fungsi baharu adalah mudah.


Fungsi yang dilaksanakan

Fungsi berikut tersedia pada masa ini:

Fungsi Maksud Sintaks
abs Nilai mutlak number abs(number)
acos Lengkok kosinus number acos(number)
addslashes Petik rentetan dengan garis serong string addslashes(string)
asin Lengkok sinus number asin(number)
atan Lengkok tangen number atan(number)
atan2 Lengkok tangen bagi dua pembolehubah number atan2(number, number)
ceil Bundarkan pecahan ke atas number ceil(number)
checkdate Mengembalikan benar(1) jika ia ialah tarikh yang sah dalam kalendar Gregorian bool checkdate(month,day,year)
convert_value Tukar nilai berangka menggunakan inputTable dan outputTable bagi nilai berangka number convert_value(fValue, iStrict, sTranslateFromList, sTranslateToList)
cos Kosinus number cos(number)
count Kira bilangan soalan yang dijawab (bukan kosong) dalam senarai number count(arg1, arg12, ..., argN)
countif Kira bilangan soalan yang dijawab dalam senarai yang sama dengan hujah pertama number countif(matches, arg1, arg2, ... argN)
countifop Kira bilangan soalan yang dijawab dalam senarai yang memenuhi kriteria (arg op value) number countifop(op, value, arg1, arg2, ... argN)
date Format tarikh/masa setempat string date(format [, timestamp=time()])
exp Mengira eksponen bagi e number exp(number)
fixnum Paparkan nombor dengan koma sebagai pemisah radiks, jika perlu string fixnum(number)
floor Bundarkan pecahan ke bawah number floor(number)
gmdate Format tarikh/masa GMT string gmdate(format [, timestamp=time()])
html_entity_decode Tukar semua entiti HTML kepada aksara yang berkenaan (sentiasa menggunakan ENT_QUOTES dan UTF-8) string html_entity_decode(string)
htmlentities Tukar semua aksara yang berkenaan kepada entiti HTML (sentiasa menggunakan ENT_QUOTES dan UTF-8) string htmlentities(string)
expr_mgr_htmlspecialchars Tukar aksara khas kepada entiti HTML (sentiasa menggunakan ENT_QUOTES dan UTF-8) string htmlspecialchars(string)
expr_mgr_htmlspecialchars_decode Tukar entiti HTML khas kembali kepada aksara (sentiasa menggunakan ENT_QUOTES dan UTF-8) string htmlspecialchars_decode(string)
idate Formatkan masa/tarikh tempatan sebagai integer string idate(string [, timestamp=time()])
if if gaya Excel if(test,result_if_true,result_if_false) if(test,result_if_true,result_if_false)
implode Sertai elemen tatasusunan dengan rentetan string implode(glue,arg1,arg2,...,argN)
intval Dapatkan nilai integer pembolehubah int intval(number [, base=10])
is_empty Tentukan sama ada pembolehubah dianggap kosong bool is_empty(var)
is_float Cari sama ada jenis pembolehubah ialah float bool is_float(var)
is_int Cari sama ada jenis pembolehubah ialah integer bool is_int(var)
is_nan Cari sama ada nilai bukan nombor bool is_nan(var)
is_null Cari sama ada pembolehubah adalah NOL bool is_null(var)
is_numeric Cari sama ada pembolehubah ialah nombor atau rentetan berangka bool is_numeric(var)
is_string Cari sama ada jenis pembolehubah ialah rentetan bool is_string(var)
join (New in 2.0 build 130129) Sertai elemen sebagai rentetan baharu join(arg1, arg2, ... argN)
list Kembalikan senarai nilai bukan kosong yang dipisahkan koma string list(arg1, arg2, ... argN)
listifop (New in 3.16.1 ) Kembalikan senarai yang dipisahkan 'glue' bagi sifat soalan yang dinyatakan (retProp) daripada soalan dalam senarai yang memenuhi kriteria (cmpProp op value) string listifop(cmpProp, op, value, retProp, glue, sgqa1, sgqa2, ... sgqaN)
ltrim Buang ruang kosong (atau aksara lain) dari permulaan rentetan string ltrim(string [, charlist])
max Cari nilai tertinggi number max(arg1, arg2, ... argN)
min Cari nilai terendah number min(arg1, arg2, ... argN)
mktime Dapatkan setem masa UNIX bagi sesuatu tarikh (setiap satu daripada 6 hujah adalah pilihan) number mktime([hour [, minute [, second [, month [, day [, year ]]]]]])
modulo-function Fungsi modulo belum disokong. Anda boleh menggunakan fungsi floor() sebagai ganti floor(x/y)==(x/y)
nl2br Sisipkan pemisah baris HTML sebelum semua baris baharu dalam rentetan string nl2br(string)
number_format Formatkan nombor dengan beribu-ribu dikumpulkan string number_format(number)
pi Dapatkan nilai pi number pi()
pow Ungkapan eksponen number pow(base, exp)
quoted_printable_decode Tukar rentetan quoted-printable kepada rentetan 8 bit string quoted_printable_decode(string)
quoted_printable_encode Tukar rentetan 8 bit kepada rentetan quoted-printable string quoted_printable_encode(string)
quotemeta Petikan aksara meta string quotemeta(string)
rand Hasilkan integer rawak, lihat contoh ini int rand() OR int rand(min, max)
regexMatch bandingkan rentetan dengan ekspresi lazim bool regexMatch(pattern,input)
round Membundarkan nombor ke ketepatan pilihan number round(val [, precision])
rtrim Buang ruang kosong (atau aksara lain) dari penghujung rentetan string rtrim(string [, charlist])
sin Sinus number sin(arg)
sprintf Kembalikan rentetan berformat string sprintf(format, arg1, arg2, ... argN)
sqrt Punca kuasa dua number sqrt(arg)
stddev Kira Deviasi Standard Sampel bagi senarai nombor number stddev(arg1, arg2, ... argN)
str_pad Lapik rentetan hingga panjang tertentu dengan rentetan lain string str_pad(input, pad_length [, pad_string])
str_repeat Ulang rentetan string str_repeat(input, multiplier)
str_replace Gantikan semua kejadian rentetan carian dengan rentetan ganti string str_replace(search, replace, subject)
strcasecmp Perbandingan rentetan tidak sensitif huruf besar selamat binari int strcasecmp(str1, str2)
strcmp Perbandingan rentetan selamat binari int strcmp(str1, str2)
strip_tags Leraikan tag HTML dan PHP dari rentetan string strip_tags(str, allowable_tags)
stripos Cari kedudukan kejadian pertama rentetan unicode tidak sensitif huruf (bermula dengan 0, kembalikan false jika tidak dijumpai) int stripos(haystack, needle [, offset=0])
stripslashes Nyahpetik rentetan petikan string stripslashes(string)
stristr Strstr tidak sensitif huruf besar atau kecil string stristr(haystack, needle [, before_needle=false])
strlen Dapatkan panjang rentetan int strlen(string)
strpos Cari kedudukan kejadian pertama rentetan unicode (bermula dengan 0, kembalikan false jika tidak dijumpai) int strpos(haystack, needle [ offset=0])
strrev Terbalikkan rentetan string strrev(string)
strstr Cari kejadian pertama rentetan string strstr(haystack, needle[, before_needle=false])
strtolower Jadikan rentetan huruf kecil string strtolower(string)
strtotime Huraikan hampir apa-apa perihalan tarikh masa teks bahasa Inggeris kepada setem masa Unix int strtotime(string)
strtoupper Jadikan rentetan huruf besar string strtoupper(string)
substr Kembalikan sebahagian daripada rentetan unicode string substr(string, start [, length])
sum Kira jumlah nilai dalam tatasusunan number sum(arg1, arg2, ... argN)
sumifop Jumlahkan nilai soalan yang dijawab dalam senarai yang memenuhi kriteria (arg op value) number sumifop(op, value, arg1, arg2, ... argN)
tan Tangen number tan(arg)
time Kembalikan setem masa UNIX semasa number time()
trim Buang ruang kosong (atau aksara lain) dari permulaan dan penghujung rentetan string trim(string [, charlist])
ucwords Jadikan huruf pertama bagi setiap perkataan dalam rentetan huruf besar string ucwords(string)
unique Mengembalikan benar jika semua jawapan bukan kosong adalah unik boolean unique(arg1, ..., argN)
Klik di sini jika anda ingin mengetahui lebih lanjut tentang fungsi yang dirancang (atau sedang dipertimbangkan).

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

Cipta fungsi ungkapan baharu dengan pemalam (New in 4.0.0 )

Jika anda memerlukan fungsi baharu yang tidak wujud dalam teras, anda boleh mencipta satu dengan pemalam. Fungsi baharu seperti ini dicipta menggunakan peristiwa expressionManagerStart.

ExpressionScript tahu pembolehubah mana yang bersifat setempat

Untuk membina JavaScript bagi sesuatu halaman dengan betul, EM perlu mengetahui pemboleh ubah yang ditetapkan pada halaman tersebut dan ID JavaScript-nya (cth., untuk document.getElementById(x)). EM juga mesti mengetahui pemboleh ubah yang ditetapkan pada halaman lain (supaya ia dapat memastikan medan <input type='hidden' value='x'> yang diperlukan wujud dan diisi).


Syarat Lata

Jika mana-mana pemboleh ubah tidak releven, keseluruhan persamaan akan menjadi tidak releven (false). Sebagai contoh, dalam jadual berikut, N/A bermaksud salah satu pemboleh ubah tidak releven:


Operator Contoh a b Keputusan
+ (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


Mengatasi Syarat Lata

Katakan anda mahu menunjukkan jumlah terkumpul bagi semua jawapan yang releven. Anda mungkin cuba menggunakan persamaan {sum(q1,q2,q3,...,qN)}. Namun, ini diterjemahkan secara dalaman kepada LEMif(LEManyNA("q1","q2","q3",...,"qN"),"",sum(LEMval("q1"),LEMval("q2"),LEMval("q3"),...,LEMval("qN"))). Oleh itu, jika mana-mana nilai q1-qN tidak releven, persamaan tersebut akan sentiasa memulangkan false. Dalam kes ini, sum() akan menunjukkan "0" sehingga semua soalan dijawab.

Untuk mengatasinya, setiap pemboleh ubah boleh ditambah dengan akhiran ".NAOK" (bermaksud Not Applicable is OK). Dalam kes sedemikian, tingkah laku berikut berlaku. Katakan anda mempunyai pemboleh ubah q1.NAOK:

  1. q1 tidak ditambah ke dalam klausa LEManyNA()
  2. LEMval('q1') akan terus menyemak sama ada jawapan tersebut releven dan akan memulangkan "" jika tidak (jadi jawapan individu yang tidak releven akan diabaikan, tetapi tidak membatalkan keseluruhan ungkapan).

Jadi, penyelesaian bagi masalah jumlah terkumpul ialah menggunakan persamaan sum(q1.NAOK,q2.NAOK,q3.NAOK,...,qN.NAOK).

Penggunaan akhiran .NAOK juga membolehkan pengarang mereka bentuk tinjauan yang mempunyai beberapa laluan yang mungkin tetapi kemudian bertemu semula pada laluan yang sama. Sebagai contoh, katakan subjek menjawab tinjauan dengan cara yang berada di luar julat jawapan biasa. Pengarang boleh memaklumkan subjek bahawa mereka mungkin tidak mendapat keputusan yang sah, dan bertanya sama ada mereka benar-benar mahu meneruskan tinjauan. Jika mereka menjawab "Ya", baki soalan akan dipaparkan. Syarat untuk "baki soalan" akan menyemak sama ada jawapan awal berada dalam julat biasa ATAU sama ada subjek menjawab "Ya" kepada soalan yang hanya releven jika mereka menjawab di luar julat biasa.

Bagaimanakah ExpressionScript menyokong penyesuaian mikro bersyarat?

Berikut ialah contoh penyesuaian mikro (di mana Jenis soalan=='expr' bermaksud Persamaan):


Kod Soalan Kaitan Jenis soalan Soalan
name 1 text Apakah nama anda?
age 1 text Berapakah umur anda?
badage !is_empty(age) expr {(age<16) or (age>80)}
agestop badage message Maaf, {name}, anda terlalu {if( (age<16),'muda',if( (age>80),'tua','pertengahan umur') ) } untuk ujian ini.
kids !badage yesno Adakah anda mempunyai anak?
parents 1 expr {!badage && kids=='Y'}
numKids parents text Berapa orang anak yang anda ada?
kid1 parents && numKids >= 1 text Berapakah umur anak pertama anda?
kid2 parents && numKids >= 2 text Berapakah umur anak kedua anda?
kid3 parents && numKids >= 3 text Berapakah umur anak ketiga anda?
kid4 parents && numKids >= 4 text Berapakah umur anak keempat anda?
kid5 parents && numKids >= 5 text Berapakah umur anak kelima anda?
sumage 1 expr {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK,kid5.NAOK)}
report parents text {name}, anda menyatakan umur anda {age} dan anda mempunyai {numKids} anak. Jumlah umur {min(numKids,5)} orang anak pertama anda ialah {sumage}


Untuk memuat turun contoh tinjauan di atas, klik pautan berikut: Contoh tinjauan bilangan anak.

Semua soalan ini boleh berada pada satu halaman (cth., dalam kumpulan yang sama), dan hanya soalan yang releven akan dipaparkan. Selain itu, apabila anda memasukkan umur anak-anak, ungkapan sum() dalam soalan terakhir akan dikemas kini secara dinamik.

ExpressionScript menyediakan fungsi ini dengan mengelilingi setiap ungkapan dengan elemen <span> bernama. Setiap kali nilai berubah, ia mengira semula ungkapan yang sepatutnya muncul dalam elemen <span> itu dan menjana semula paparan. Anda boleh mempunyai berpuluh-puluh malah beratus-ratus ungkapan tersuai sedemikian pada halaman yang sama.


Penyerlahan sintaks

Bagi membantu memasukkan dan mengesahkan ungkapan, EM menyediakan penyerlahan sintaks dengan ciri-ciri berikut:

Jenis dan Maksud Penyerlahan Sintaks

Warna Sampel Maksud Tip alat Komen
latar belakang tan Sampel keseluruhan persamaan tiada Apa-apa sahaja dalam pendakap kurawal yang dikenali sebagai persamaan (cth., tiada ruang kosong di awal atau di akhir) akan dikodkan warna dengan latar belakang tan untuk membezakannya daripada teks sekeliling
teks merah tebal Sampel Ralat Penjelasan tentang ralat Boleh jadi pemboleh ubah yang tidak diketahui atau ralat dalam fungsi. Tinjauan rosak dan soalan yang bergantung pada ungkapan berkenaan tidak akan dipaparkan kepada responden.
teks biru Sampel nama fungsi maksud dan sintaks yang dibenarkan Ia merujuk kepada nama fungsi atau perkara yang sepatutnya fungsi kerana diikuti oleh kurungan buka. Ia dipaparkan dalam teks biru tebal. Tip alat menunjukkan maksud dan sintaks yang dibenarkan bagi fungsi tersebut.
teks kelabu Sampel rentetan tiada Rentetan dalam petikan tunggal dan petikan berganda dipaparkan dalam teks kelabu.
teks sian Sampel pemboleh ubah yang ditetapkan pada halaman yang sama, [name]: soalan; nilai; answerList yang menunjukkan kod bagi setiap nilai Mana-mana pemboleh ubah yang ditetapkan pada halaman yang sama dengan soalan yang sedang anda sunting dipaparkan dalam teks sian (ia boleh dikemas kini dalam javascript). Tip alat menunjukkan namanya, soalan sebenar, dan nilai semasanya (atau kosong jika tidak ditetapkan). Jika jenis soalan menjangkakan jawapan daripada set nilai bernomor, pemetaan kod kepada nilai paparan ditunjukkan.
teks hijau Sampel pemboleh ubah yang ditetapkan pada halaman terdahulu [name]: soalan; nilai; answerList yang menunjukkan kod bagi setiap nilai Mana-mana pemboleh ubah yang ditetapkan pada halaman terdahulu dipaparkan dalam teks hijau tebal. Tip alat menunjukkan namanya, soalan sebenar, dan nilai semasanya (atau kosong jika tidak ditetapkan). Jika jenis soalan menjangkakan jawapan daripada set nilai bernomor, pemetaan kod kepada nilai paparan ditunjukkan.
teks merah jambu tebal Sampel pemboleh ubah yang ditetapkan pada halaman kemudian secara amnya : kosong pada permulaan tinjauan, tetapi boleh diisi dengan indeks atau kembali ke sebelumnya [name atau kod SGQA]: soalan; nilai; answerList yang menunjukkan kod bagi setiap nilai Mana-mana pemboleh ubah yang ditetapkan pada halaman kemudian dipaparkan dalam teks merah jambu tebal. Tip alat menunjukkan namanya, soalan sebenar, dan nilai semasanya (atau kosong jika tidak ditetapkan). Jika jenis soalan menjangkakan jawapan daripada set nilai bernomor, pemetaan kod kepada nilai paparan ditunjukkan.
teks tan tebal Sampel nilai penggantian lime nilai tersebut Rentetan Penggantian Lime (seperti {TOKEN:xxx}, {PRIVACY_MESSAGE}) dipaparkan dalam teks tan tebal.
teks merah Sampel operator penetapan (=) mesej amaran Jika anda menggunakan salah satu operator penetapan (=), operator itu akan dipaparkan dalam teks merah. Ini bertujuan membantu mengelakkan penetapan semula nilai secara tidak sengaja apabila anda sebenarnya bermaksud menyemak sama ada a == b dan bukannya menetapkan nilai a = b.
teks hitam biasa Sampel tanda baca tiada Semua tanda baca lain dalam ungkapan dipaparkan dalam teks hitam biasa.
teks berkotak merah garis merah tebal mengelilingi ralat ralat sintaks keterangan ralat Sebarang ralat sintaks yang dikesan dipaparkan dalam kotak merah. Tip alat menunjukkan ralat tersebut. Contohnya termasuk kurungan yang tidak berpadanan, penggunaan fungsi yang tidak ditakrifkan, penghantaran bilangan argumen yang salah kepada fungsi, ungkapan yang struktur kurang baik (cth., operator tiada antara pemboleh ubah), cubaan menetapkan nilai baharu kepada pemboleh ubah baca sahaja, cubaan menetapkan nilai kepada bukan pemboleh ubah, atau penggunaan sintaks yang tidak disokong. Perhatikan bahawa sistem pengesanan ralat sintaks mungkin hanya melaporkan satu ralat dalam sesuatu ungkapan walaupun terdapat berbilang ralat; namun, jika sebarang ralat dikesan, sekurang-kurangnya satu ralat akan dipaparkan.


Tip alat merujuk kepada mesej timbul yang dipaparkan apabila anda menuding pada fungsi dan pemboleh ubah tertentu.


Bacaan tambahan

Contoh tinjauan ExpressionScript

Kes penggunaan dan panduan cara

Contoh langkah demi langkah

Rujukan untuk Pembangun

Pelan hala tuju, status, senarai tugasan