Panduan Praktis ExpressionScript
From LimeSurvey Manual
Ringkasan penjelasan sebelumnya
Jika Anda telah mengikuti struktur panduan LimeSurvey sejauh ini, berarti Anda sudah memahami terminologi LimeSurvey. Selanjutnya, kita telah membahas ekspresi dan variabel untuk mempelajari cara menyempurnakan survei kita. Pada bagian berikutnya, kita beralih ke jenis dan arti dari penyorotan sintaks untuk mempelajari cara memperbaiki kesalahan sintaks.
Setelah memahami konsep dasar ini, kita dapat beralih ke contoh-contoh dan penjelasan tentang cara kerja ekspresi di dalam LimeSurvey.
Penyorotan Sintaks
Tangkapan layar berikut memberikan contoh, tetapi tidak menampilkan nilai dari tooltip. Tooltip adalah kotak informasi yang ditampilkan setiap kali Anda mengarahkan kursor mouse ke kata berwarna yang dicetak tebal.
Berkat penyorotan sintaks ini, sangat mudah untuk menyusun ekspresi yang benar, bahkan yang rumit sekalipun. Meskipun tim LimeSurvey berencana membuat GUI Expression Builder, Anda dapat menggunakan penyorotan sintaks yang ada untuk dengan cepat menemukan dan memperbaiki kesalahan ketik. Anda juga dapat menggunakan tooltip untuk memvalidasi keakuratan ekspresi Anda (misalnya, konfirmasi bahwa Anda telah memilih variabel yang diinginkan).
Pada setiap contoh, terdapat tiga kolom:
- Source - ini adalah teks mentah yang Anda masukkan ke dalam bidang pertanyaan LimeSurvey
- Pretty Print - ini adalah padanan teks yang Anda masukkan dengan penyorotan sintaks
- Perhatikan bahwa ekspresi ditampilkan dengan latar belakang cokelat muda, tetapi tidak diapit tanda kurung kurawal pada penyorotan ini.
- Karena EM mendukung substitusi rekursif, menampilkan tanda kurung kurawal pada penyorotan akan menyebabkan kesalahan sintaks
- Result - ini adalah keluaran yang dihasilkan saat EM memproses sumbernya
- Semua yang dapat disubstitusi dengan benar akan disubstitusi
- Ekspresi yang mengandung kesalahan ditampilkan sebaris, dengan penyorotan sintaks. Kesalahan diberi kotak bergaris merah.
Sintaks yang Benar
Berikut contoh sintaks yang benar:
- Values: menunjukkan bahwa variabel yang dikenal diberi kode warna sesuai dengan apakah variabel tersebut sudah diatur pada halaman saat ini.
- Atribut pertanyaan: menunjukkan bahwa notasi titik dapat mengakses beberapa properti pertanyaan
- Math: menunjukkan bahwa perhitungan dasar dan kompleks didukung
- TextProcessing: menunjukkan beberapa fungsi pemrosesan teks yang tersedia
- Dates: menunjukkan dua fungsi terkait tanggal yang tersedia
- Conditional: menunjukkan penggunaan fungsi if(). Pilihan dapat disarangkan.
- Tailored paragraph: Anda dapat menyesuaikan laporan sepenuhnya berdasarkan nilai sebelumnya
- EM processes within strings: menunjukkan bahwa substitusi dapat dilakukan di dalam string. Contoh ini menghasilkan nama gambar yang disesuaikan.
- EM doesn't process curly braces like these: menunjukkan bahwa jika tanda kurung kurawal di-escape, atau terdapat spasi antara ekspresi dan tanda kurung kurawal, ES mengabaikan ekspresi tersebut.

Sintaks EM yang Mengandung Kesalahan
Berikut contoh kesalahan umum saat mengetik ekspresi ES. Perhatikan bahwa tooltip memberikan informasi tambahan.
- Javascript inline yang lupa ditambahkan spasi setelah tanda kurung kurawal
- Karena "document.write" muncul tepat setelah tanda kurung kurawal, EM menganggapnya sebagai ekspresi, dan memberi kotak merah pada "document" dan "write" karena masing-masing merupakan variabel dan fungsi yang tidak didefinisikan
- Variabel, fungsi, dan operator yang tidak dikenal/salah eja
- Di sini kita lupa bahwa kita menggunakan nama variabel "gender" dan bukan "sex", tetapi EM menangkap kesalahan tersebut. EM juga memberi kotak merah pada '++', karena itu bukan operator yang didukung.
- Peringatan jika menggunakan = sebagai pengganti eq, atau melakukan penugasan nilai
- Perhatikan bahwa '=' dan '+=' berwarna merah, bukan hitam. Jika Anda mengarahkan mouse ke atasnya, Anda akan melihat peringatan bahwa Anda sedang menugaskan sebuah nilai.
- Jumlah argumen yang salah untuk fungsi
- if() menerima 3 argumen, tetapi diberi 4, sehingga mengarahkan mouse ke "if" yang diberi kotak merah akan menjelaskan kesalahan dan menampilkan sintaks yang didukung
- sum() menerima argumen dalam jumlah tak terbatas, tetapi kita memiliki koma di akhir sebelum tanda kurung tutup, sehingga bagian itu diberi kotak merah
- Tanda kurung tidak cocok
- Ini adalah salah satu kesalahan paling umum saat menulis ekspresi.
- Ini menunjukkan dua contoh tanda kurung tutup yang hilang, dan satu contoh kelebihan satu tanda kurung tutup.
- Sintaks yang tidak didukung
- Jika Anda menggunakan operator atau tanda baca yang tidak didukung ES, ES akan memberinya kotak merah.
- Penugasan yang tidak valid
- Beberapa variabel bersifat readWrite dan nilainya dapat diubah. Variabel lainnya bersifat hanya-baca.
- Jika Anda mencoba mengubah nilai variabel hanya-baca, hal itu tidak bisa dilakukan. EM akan memberi kotak merah pada upaya tersebut.
- Jika Anda mencoba menugaskan nilai ke persamaan atau string, Anda juga akan mendapatkan kesalahan

Contoh "langsung" penyorotan sintaks dengan tooltip aktif
| Source | Pretty Print | Result |
|---|---|---|
| Here is an example of OK syntax with tooltips Hello {if(gender=='M','Mr.','Mrs.')} {surname}, it is now {date('g:i a',time())}. Do you know where your {sum(numPets,numKids)} children and pets are? | Here is an example of OK syntax with tooltips Hello if(gender == 'M','Mr.','Mrs.') surname, it is now date('g:i a',time()). Do you know where your sum(numPets,numKids) children and pets are? | Here is an example of OK syntax with tooltips Hello Mr. Smith, it is now 6:07 am. Do you know where your 3 children and pets are? |
| Here are common errors so you can see the tooltips Variables used before they are declared: {notSetYet} Unknown Function: {iff(numPets>numKids,1,2)} Unknown Variable: {sum(age,num_pets,numKids)} Wrong # parameters: {sprintf()},{if(1,2)},{date()} Assign read-only-vars:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'} Unbalanced parentheses: {pow(3,4},{(pow(3,4)},{pow(3,4))} | Berikut adalah kesalahan umum agar Anda dapat melihat tooltip Variabel yang digunakan sebelum dideklarasikan: notSetYet Fungsi tidak dikenal: iff(numPets > numKids,1,2) Variabel tidak dikenal: sum(age,num_pets,numKids) Jumlah parameter salah: sprintf(),if(1,2),date() Menetapkan nilai ke variabel read-only:TOKEN:ATTRIBUTE_1+=10,name='Sally' Tanda kurung tidak seimbang: pow(3,4,(pow(3,4),pow(3,4)) | Berikut adalah kesalahan umum agar Anda dapat melihat tooltip Variabel yang digunakan sebelum dideklarasikan: notSetYet Fungsi tidak dikenal: iff(numPets > numKids,1,2) Variabel tidak dikenal: sum(age,num_pets,numKids) Jumlah parameter salah: sprintf(),if(1,2),date() Menetapkan nilai ke variabel read-only:TOKEN:ATTRIBUTE_1+=10,name='Sally' Tanda kurung tidak seimbang: pow(3,4,(pow(3,4),pow(3,4)) |
| Berikut sebagian sintaks yang tidak didukung Tidak mendukung '++', '--', '%',';': {min(++age, --age,age % 2);} Juga tidak mendukung '|', '&', '^': {(sum(2 | 3,3 & 4,5 ^ 6)}} Juga tidak mendukung array: {name[2], name['mine']} | Berikut sebagian sintaks yang tidak didukung Tidak mendukung '++', '--', '%',';': min( ++ age, -- age,age % 2) ; Juga tidak mendukung '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)} Juga tidak mendukung array: name [ 2 ] ,name [ 'mine' ] | Berikut sebagian sintaks yang tidak didukung Tidak mendukung '++', '--', '%',';': min( ++ age, -- age,age % 2) ; Juga tidak mendukung '|', '&', '^': (sum(2 | 3,3 & 4,5 ^ 6)} Juga tidak mendukung array: name [ 2 ] ,name [ 'mine' ] |
Contoh Penyesuaian (Tailoring)
"Yth. {Mr}/{Mrs} Smith..."
Gunakan fungsi if() untuk memilih secara kondisional apakah akan menampilkan 'Mr.' atau 'Mrs.'.
Sintaksnya adalah if(test,do_if_true,do_if_false).
| # | Kode | Pertanyaan | Jenis |
| 1 | gender | Apa jenis kelamin Anda? | Jenis kelamin |
| 2 | example1 | Yth. {if(gender=='M','Mr.','Mrs.')} Smith, ... | Teks bebas panjang |

Seperti yang dapat dilihat di bawah, "Mr" dan "Mrs" disesuaikan dengan jawaban yang dipilih responden pada pertanyaan "gender".

"Yth. {Mr}/{Mrs} Smith..." dalam surel undangan
Anda dapat menggunakan contoh di atas dalam surel undangan dengan memanfaatkan atribut dari tabel token. Gunakan fungsi if() untuk memilih apakah 'Mr.' atau 'Mrs.' yang harus digunakan dalam surel.
Sintaksnya adalah "if(test,do_if_true,do_if_false)".
| # | atribut | nilai |
| 1 | Nama belakang | Smith |
| 2 | Alamat surel | test@test.com |
| 3 | ATTRIBUTE_2 | M |
Teks dalam surel undangan:
Yth. {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},
Anda telah diundang untuk berpartisipasi dalam sebuah survei:
https:/...

Tampilan surel:

Contoh Perhitungan / Penilaian
Menghitung nilai penilaian saat runtime dan menyimpan hasilnya dalam data survei
Contoh ini menggunakan semua fitur EM, termasuk Relevansi, Tailoring, dan jenis pertanyaan Persamaan.
Contoh ini juga menunjukkan bahwa semuanya mendukung JavaScript, sehingga jika Anda memiliki fitur-fitur ini pada sebuah halaman, tampilan akan berubah secara dinamis saat responden mengisi dan mengubah jawabannya.
| # | Kode | Pertanyaan | Jenis | Relevansi |
| 1 | numKids | Berapa jumlah anak Anda? | Input numerik | 1 |
| 2 | kid1 | Berapa usia anak pertama Anda? | Input numerik | numKids >= 1 |
| 3 | kid2 | Berapa usia anak kedua Anda? | Input numerik | numKids >= 2 |
| 4 | kid3 | Berapa usia anak ketiga Anda? | Input numerik | numKids >= 3 |
| 5 | kid4 | Berapa usia anak keempat Anda? | Input numerik | numKids >= 4 |
| 6 | sumKidAges | {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} | Persamaan | 1 |
| 7 | kidSummary | Anda mengatakan bahwa Anda memiliki {numKids}. {if(numKids==1,'child','children')}. {if(numKids>1,implode(' ','The sum of ages of your first ',min(numKids,4),' kids is ',sumKidAges,'.'),' ')} | Tampilan teks | 1 |
Untuk mengunduh contoh ini, silakan klik tautan berikut: Contoh survei penilaian.
Di bawah ini Anda dapat melihat tangkapan layar dari beberapa pertanyaan contoh. Seperti yang terlihat, EM menyorot sintaks semua kolom yang mungkin berisi tailoring. Di sini, Anda melihat contoh penyorotan sintaks pada Relevansi, jenis pertanyaan Persamaan, dan substitusi di dalam sebuah pertanyaan. Anda juga dapat menggunakan substitusi di dalam Bantuan, tampilan header grup, Pesan penyambutan, dan Pesan penutup.
Pada contoh berikutnya, karena relevansinya adalah {numKids >= 2), pertanyaan hanya akan terlihat jika responden menyatakan bahwa ia memiliki setidaknya dua anak.

Di bawah ini, Anda dapat melihat bahwa setiap variabel memiliki sufiks .NAOK. Hal ini berkaitan dengan cara EM mendukung relevansi bertingkat. Jika tidak ada .NAOK, jumlah hanya akan dihitung jika responden menyatakan memiliki 4 anak (yaitu, jika semua variabel relevan). Penggunaan .NAOK berarti kita ingin menghitung jumlah meskipun semua atau sebagian variabel tidak relevan (yaitu, "Tidak Berlaku" (NA) tidak masalah (OK)).
Namun, atribut .NAOK hanya memengaruhi apakah variabel diteruskan ke EM. Jika awalnya responden menyatakan memiliki 3 anak dan mengisi usia masing-masing, lalu mengubah jawabannya menjadi 2 anak, kita tidak ingin melihat jumlah dari 3 nilai yang telah diisi - karena anak ketiga kini "tidak berlaku" dalam kasus kita:

Setiap Ekspresi yang terpisah diberi kode warna dengan latar belakang cokelat muda. Seperti yang terlihat, ada tiga Ekspresi terpisah di sini. Ekspresi terakhir berisi pesan yang hanya ditampilkan secara bersyarat jika responden memiliki lebih dari satu anak.

Berikut ini adalah tangkapan layar survei saat digunakan.
Saat pertama kali membuka halaman, Anda akan melihat tampilan ini. Perhatikan bahwa tertulis "You have 0 children" dan bukan "You have 0 child".

Jika saya mengubah nilai jumlah anak menjadi 1, tampilan langsung berubah seperti ini, meskipun masih berada di halaman yang sama:

Perhatikan bahwa tata bahasanya sekarang sudah benar: "You have 1 child".
Sekarang saya mengubah nilai jumlah anak menjadi 3, dan tampilan langsung berubah seperti ini.
Perhatikan bahwa sekarang Anda melihat pesan bersyarat di bagian bawah: "The sum of ages of your first 3 kids is 0.".
Sekarang saya akan mengisi usia anak-anak imajiner saya, dan saya mendapatkan tampilan berikut yang menjumlahkan usia mereka:

Sekali lagi, skor dan tampilan diperbarui secara instan saat saya memasukkan nilai, sehingga Anda dapat menggunakannya untuk menampilkan total berjalan dari Skor Penilaian.
Sekarang, saya mengubah nilai jumlah anak menjadi 2. Tampilan berubah menjadi seperti ini:

Perhatikan bahwa meskipun saya telah memasukkan nilai 5,5 untuk anak ketiga, laporan sekarang hanya menjumlahkan nilai dari 2 anak pertama saya.
Alasannya adalah nilai ketiga kini tidak relevan, dan nilai yang tidak relevan secara aktif diabaikan oleh EM.
Jika saya mengubah jumlah anak kembali menjadi 3, saya akan melihat lagi nilai 5,5 yang telah saya masukkan. Jadi, tidak ada informasi yang hilang yang saya masukkan di halaman tersebut.
Namun, jika saya berpindah ke halaman Berikutnya atau Sebelumnya, semua nilai yang tidak relevan akan dikosongkan (NULL) di sesi dan di basis data. Jadi, jika saya tetap memakai nilai 2, pindah ke halaman berikutnya, lalu kembali dan menyatakan bahwa saya sebenarnya memiliki 3 anak, saya tidak akan lagi melihat usia 5,5.
Memasukkan data dan melihat laporan yang berubah secara dinamis dari data yang dimasukkan pada halaman yang sama
Contoh ini menampilkan proses Tailoring di dalam LimeSurvey.
Untuk mengunduh contoh ini, klik tautan berikut: Contoh survei perubahan dinamis.
Seperti inilah tampilan halaman pada awalnya. Anda hanya melihat pertanyaan yang menanyakan di kota mana Anda tinggal:

Begitu Anda mulai memasukkan jawaban, proses tailoring juga dimulai:

Saat Anda memasukkan jawaban, tabel di bagian bawah halaman diperbarui untuk menampilkan kode jawaban dan nilai dari respons Anda.

Contoh Debugging Umum
Pernyataan if() Bersarang (Logika Kondisional)
EM mendukung fungsi "if(test,do_if_true,do_if_false)" sehingga Anda dapat menerapkan logika kondisional atau tailoring. Fungsi ini dapat disarangkan untuk melakukan hal yang setara dengan "if { } else if { } else { }". EM akan memberi tahu Anda jika tanda kurung tidak seimbang (misalnya, tanda kurung tutup kurang) atau jika ada tanda kurung tutup yang berlebih. Sebaiknya hitung tanda kurung saat Anda menyusun pernyataan if bersarang yang panjang, simpan, periksa kesalahan sintaks, dan perbaiki jika ditemukan. Mari kita periksa contoh di bawah ini bersama-sama.
Grup pertanyaan yang digunakan di bawah ini dapat diakses dari sini: Contoh survei tailoring.lsg
Pertama, tanpa ada yang dimasukkan, Anda hanya melihat "Halo."

Jika Anda memasukkan nama, akan muncul "Halo {name}."

Jika Anda memasukkan usia, Anda akan mendapatkan pesan yang disesuaikan, tergantung apakah Anda anak usia prasekolah atau bukan:

Usia sekolah, remaja, atau dewasa. Berikut adalah seorang remaja yang ingin tetap anonim:

Berikut adalah file logika dari grup tersebut. Seperti yang dapat Anda lihat pada pertanyaan "berbasis if", terdapat pernyataan if bersarang berdasarkan usia responden.

Saat Anda pertama kali mengedit pertanyaan ini, kemungkinan besar pada suatu titik jumlah tanda kurung Anda akan salah. Berikut yang terjadi jika tanda kurung terlalu sedikit:

Jika Anda mengarahkan kursor ke kata "if" yang dikelilingi kotak merah, akan muncul "Parentheses not balanced". Dalam kasus ini, seharusnya ada empat tanda kurung tutup setelah "already an adult!", tetapi hanya ada tiga.
Sebaliknya, jika Anda memiliki tanda kurung tutup yang berlebih, tanda kurung tersebut akan dikelilingi kotak merah, seperti ini:

Saat Anda benar-benar mengedit pertanyaan, tampilan pertanyaan tersebut seperti ini:

