Fonksiyonlar
Dize fonksiyonları
İfadeler içinde dizelerle çalışırken, gerçek dizeleri çevrelemek için tek tırnak (’’) kullanmak önemlidir. Ancak bir gerçek dize içinde tek tırnak eklemek istediğinizde bir istisna vardır. Bu gibi durumlarda, tüm dizeyi çevrelemek için çift tırnak ("") kullanabilirsiniz.
Örneğin:
- Doğru: if(${yesno} = 1, “içinde ’tek tırnak’ olan bir dize”, “burada tek tırnak yok”)
- Yanlış: if(${yesno} = 1, ‘içinde ’tek tırnak’ olan bir dize’, ‘burada tek tırnak yok’)
Akıllı tırnaklar konusunda, bunların ifadelerde sorunlara yol açabileceğini bilmek önemlidir. Birçok zengin metin düzenleyicisi düz tırnakları ("" veya ‘’) akıllı tırnaklara veya kıvrımlı tırnaklara ("" veya ‘’) otomatik olarak dönüştürür; bu sözdizimi hatalarına veya beklenmedik davranışlara yol açabilir. Bunu önlemek için ifadelerinizde düz tırnak (’’) kullandığınızdan emin olun.
rtSurvey aşağıdakiler dahil çeşitli fonksiyonları destekler:
string(field): Bir alanı dizeye dönüştürür.- Örnek:
string(34.8)'34.8'olarak dönüştürülür.
- Örnek:
string-length(field): Bir dize alanının uzunluğunu döndürür.- Örnek:
string-length(.) > 3 and string-length(.) < 10, geçerli alanın 3 ile 10 karakter arasında olmasını sağlamak için kullanılabilir.
- Örnek:
substr(fieldorstring, startindex, endindex):startindex‘ten başlayıpendindex‘ten hemen önce biten bir alt dize döndürür. İndeksler dizideki ilk karakter için 0’dan başlar.- Örnek:
substr(${phone}, 0, 3)telefon numarasının ilk üç rakamını döndürür.
- Örnek:
concat(a, b, c, ...): Alanları (ve/veya dizeleri) birleştirir.- Örnek:
concat(${firstname}, ' ', ${lastname})firstnamevelastnamealanlarındaki değerleri birleştirerek tam bir ad döndürür.
- Örnek:
linebreak(): Satır sonu karakteri döndürür.- Örnek:
concat(${field1}, linebreak(), ${field2}, linebreak(), ${field3})aralarında satır sonları olan üç alan değerinin listesini döndürür.
- Örnek:
lower(): Bir dizeyi tüm küçük harflere dönüştürür.- Örnek:
lower('Sokak Adı')“sokak adı” döndürür.
- Örnek:
upper(): Bir dizeyi tüm büyük harflere dönüştürür.- Örnek:
upper('Sokak Adı')“SOKAK ADI” döndürür.
- Örnek:
select_one ve select_multiple fonksiyonları
count-selected(field): Bir select_multiple alanında seçilen öğelerin sayısını döndürür.- Örnek:
count-selected(.) = 3tam olarak üç seçeneğin seçilmesini sağlamak için kısıtlama ifadesi olarak kullanılabilir.
- Örnek:
selected(field, value): Belirtilen değerin select_one veya select_multiple alanında seçilip seçilmediğine bağlı olarak doğru veya yanlış döndürür.- Örnek:
selected(${color}, 'Blue'), yalnızca katılımcı favori renk olarak “Blue"yu seçtiyse bir grubu veya alanı göstermek için ilgililik ifadesi olarak kullanılabilir. - Not: İkinci parametre her zaman seçenek etiketini değil, seçenek değerini belirtmelidir. Form tanımının choices çalışma sayfasındaki değer sütunundan gelen değeri kullanın.
- Örnek:
selected-at(field, number): Bir select_multiple alanında belirtilen konumdaki seçili öğeyi döndürür. Geçirilen sayı 0 olduğunda ilk seçili öğeyi döndürür; sayı 1 olduğunda ikinci seçili öğeyi döndürür ve bu şekilde devam eder.- Örnek:
selected-at(${fruits}, 0) = 'Apple', yalnızca ilk seçilen seçenek “Apple” ise bir grubu veya alanı göstermek için ilgililik ifadesi olarak kullanılabilir. - Not: Döndürülen değer seçenek etiketi değil, seçenek değeri olacaktır. Form tanımının choices çalışma sayfasındaki değer sütunundan gelen değeri kullanın.
- Örnek:
choice-label(field, value): Form tanımının choices çalışma sayfasında tanımlandığı şekliyle bir select_one veya select_multiple alan seçimi için etiketi döndürür.- Örnek 1:
choice-label(${country}, ${country}),countryadlı alandaki geçerli seçilen seçim için seçim etiketini döndürür. - Örnek 2:
choice-label(${languages}, selected-at(${languages}, 0)),languagesadlı alandaki ilk seçili seçim için etiketi döndürür. - Not: Bu fonksiyon değeri değil, seçim etiketini alır. Form tanımının choices çalışma sayfasındaki etiket sütununu kullanır.
- Örnek 1:
Tekrarlanan alan fonksiyonları
rtSurvey’de aynı soruyu birden fazla kez sormak istiyorsanız, bir alanı tekrar grubu içine koyabilirsiniz. Bu, aynı alanın birden fazla örneğiyle sonuçlanır. Aşağıdaki fonksiyonlar bu tekrarlanan alanlarla ve ürettikleri tekrarlanan verilerle başa çıkmanıza yardımcı olabilir.
join(string, repeatedfield): Tekrar grubu içindeki bir alan için, değerlerin dize ayrılmış listesini oluşturur. İlk parametre değerleri ayırmak için kullanılacak sınırlayıcıyı belirtir.- Örnek:
join(', ', ${member_name})girilen tüm isimlerden tek bir virgülle ayrılmış liste oluşturur.
- Örnek:
join-if(string, repeatedfield, expression): Tam olarakjoin()gibi çalışır, ancak sağlanan ifadeyi kullanarak tekrar grubundaki her örneği kontrol eder. İfade yanlış olarak değerlendirilirse, öğe çıktıdan çıkarılır.- Örnek:
join-if(', ', ${member_name}, ${age} >= 18)yalnızca yetişkin üyelerin (18 ve üzeri) isimlerinin virgülle ayrılmış listesini oluşturur.
- Örnek:
count(repeatgroup): Bir tekrar grubunun kaç kez tekrarlandığını döndürür.- Örnek:
count(${groupname}), grubun örnek sayısını döndürür.
- Örnek:
count-if(repeatgroup, expression): Tam olarakcount()gibi çalışır, ancak sağlanan ifadeyi kullanarak tekrar grubundaki her örneği kontrol eder. İfade yanlış olarak değerlendirilirse, öğe çıktıdan çıkarılır.- Örnek:
count-if(${members}, ${age} >= 18), “members” tekrar grubundaki age alanına göre yetişkin üye sayısını döndürür.
- Örnek:
sum(repeatedfield): Tekrar grubu içindeki bir alan için tüm değerlerin toplamını hesaplar.- Örnek:
sum(${loan_amount})tüm kredilerin toplam değerini döndürür.
- Örnek:
sum-if(repeatedfield, expression): Tam olaraksum()gibi çalışır, ancak sağlanan ifadeyi kullanarak tekrar grubundaki her örneği kontrol eder.- Örnek:
sum-if(${loan_amount}, ${loan_amount} > 500)500’ün üzerindeki tüm kredilerin toplam değerini döndürür.
- Örnek:
min(repeatedfield): Tekrar grubu içindeki bir alan için tüm değerlerin minimumunu hesaplar.- Örnek:
min(${member_age})gruptaki en genç üyenin yaşını döndürür.
- Örnek:
min-if(repeatedfield, expression): Tam olarakmin()gibi çalışır, ancak sağlanan ifadeyi kullanarak her örneği kontrol eder.- Örnek:
min-if(${member_age}, ${member_age} >= 18)gruptaki en genç yetişkinin yaşını döndürür.
- Örnek:
max(repeatedfield): Tekrar grubu içindeki bir alan için tüm değerlerin maksimumunu hesaplar.- Örnek:
max(${member_age})gruptaki en yaşlı üyenin yaşını döndürür.
- Örnek:
max-if(repeatedfield, expression): Tam olarakmax()gibi çalışır, ancak sağlanan ifadeyi kullanarak her örneği kontrol eder.- Örnek:
max-if(${member_age}, ${member_age} >= 18)gruptaki en yaşlı yetişkinin yaşını döndürür.
- Örnek:
index(): Tekrar grubu içinde çağrıldığında, geçerli grup veya örnek için indeks numarasını döndürür.- Örnek: Tekrar grubu içinde kullanıldığında
index(), ilk örnek için 1, ikincisi için 2 vb. döndürür.
- Örnek: Tekrar grubu içinde kullanıldığında
indexed-repeat(repeatedfield, repeatgroup, index): Tekrar grubu içindeki bir alana veya gruba, o tekrar grubunun dışından referans verir.- Örnek 1:
indexed-repeat(${name}, ${names}, 1), “names” adlı önceki tekrar grubunda name alanı bulunduğunda ilk mevcut adı döndürür. - Örnek 2:
indexed-repeat(${name}, ${names}, index()), geçerli tekrar grubunun örnek numarasına karşılık gelen adı çeker.
- Örnek 1:
rank-index(index, repeatedfield): Bu fonksiyon, tekrar grubunun dışında kullanım için tekrarlanan bir alanın belirli örneğinin ordinal sıralamasını hesaplar. 1 sıralaması en yüksek değere sahip örneğe, 2 sıralaması bir sonraki en yüksek değere ve bu şekilde devam eder.- Örnek:
rank-index(1, ${random_draw}), diğer örneklerin değerleriyle karşılaştırıldığında ilk örneğinrandom_drawalanının değerine göre sıralamasını hesaplar.
- Örnek:
rank-index-if(index, repeatedfield, expression): Bu fonksiyonrank-index()ile benzer şekilde çalışır, ancak sağlanan ifadeyi kullanarak tekrarlanan alanın tekrar grubundaki her örneği kontrol eder.- Örnek:
rank-index-if(1, ${age}, ${age} >= 18)yalnızca 18 veya üzeri yaştaki örnekleri göz önünde bulundurarak yetişkinler içindeki yaş sıralamasını hesaplar.
- Örnek:
Sayı fonksiyonları
| Operatör | İşlem | Örnek | Örnek cevap |
|---|---|---|---|
+ | Toplama | 1 + 1 | 2 |
- | Çıkarma | 3 - 2 | 1 |
* | Çarpma | 3 * 2 | 6 |
div | Bölme | 10 div 2 | 5 |
mod | Modül | 9 mod 2 | 1 |
rtSurvey aşağıdakiler dahil sayı fonksiyonlarını destekler:
number(field): Alanın değerini sayıya dönüştürür.- Örnek:
number('34.8')= 34.8
- Örnek:
int(field): Alanın değerini tam sayıya dönüştürür.- Örnek:
int('39.2')= 39
- Örnek:
min(field1, ..., fieldx): Geçirilen alanlar arasındaki minimum değeri döndürür.- Örnek:
min(${father_age}, ${mother_age})annenin veya babanın yaşını döndürür; hangisi daha küçükse.
- Örnek:
max(field1, ..., fieldx): Geçirilen alanlar arasındaki maksimum değeri döndürür.- Örnek:
max(${father_age}, ${mother_age})annenin veya babanın yaşını döndürür; hangisi daha büyükse.
- Örnek:
format-number(field): Bir tam sayı veya ondalık alanın değerini kullanıcının yerel ayar ayarlarına göre biçimlendirir.- Örnek:
format-number(${income})“120000"i “120.000” olarak biçimlendirebilir.
- Örnek:
round(field, digits): Sayısal alan değerini ondalık noktadan sonra belirtilen basamak sayısına yuvarlar.- Örnek:
round(${interest_rate}, 2)
- Örnek:
abs(number): Bir sayının mutlak değerini döndürür.pow(base, exponent): İlk parametrenin değerini ikinci parametrenin kuvvetine yükseltilmiş olarak döndürür.log10(fieldorvalue): Geçirilen alanın veya değerin onluk logaritmasını döndürür.sin(fieldorvalue): Geçirilen alanın veya değerin sinüsünü radyan cinsinden döndürür.cos(fieldorvalue): Geçirilen alanın veya değerin kosinüsünü radyan cinsinden döndürür.tan(fieldorvalue): Geçirilen alanın veya değerin tanjantını radyan cinsinden döndürür.asin(fieldorvalue): Geçirilen alanın veya değerin arcsinüsünü radyan cinsinden döndürür.acos(fieldorvalue): Geçirilen alanın veya değerin arckosinüsünü radyan cinsinden döndürür.atan(fieldorvalue): Geçirilen alanın veya değerin arktanjantını radyan cinsinden döndürür.atan2(x, y): (x, y) koordinatları ve pozitif x ekseni tarafından orijinde oluşturulan açıyı radyan cinsinden döndürür.sqrt(fieldorvalue): Geçirilen alanın veya değerin negatif olmayan karekökünü döndürür.exp(x): e^x değerini döndürür.pi(): Pi değerini döndürür.
Tarih ve saat fonksiyonları
rtSurvey’de tarih değerleri YYYY-MM-DD biçiminde dizeler olarak saklanır. Datetime değerleri ISO 8601 dizeler olarak saklanır (YYYY-MM-DDTHH:MM:SS). Aritmetik için (örn. süreleri hesaplama) sayıya dönüştürmek üzere decimal-date-time() kullanın.
today(): Bugünün tarihiniYYYY-MM-DDbiçiminde bir dize olarak döndürür. Form açıldığında bir kez değerlendirilir.- Örnek:
today()→'2024-03-15' - Yaygın kullanım: Bugünün tarihini önceden doldurmak için
defaultsütunu veya bir tarih alanıyla karşılaştırmak içinrelevant/constraintiçinde.
- Örnek:
now(): Geçerli tarih ve saati ISO 8601 dizesi olarak döndürür. İfade her hesaplandığında değerlendirilir.- Örnek:
now()→'2024-03-15T14:32:00.000+03:00' - Yaygın kullanım: Anket sırasında belirli bir olayın tam zaman damgasını kaydetme.
- Örnek:
date(value): Bir değeri (dize veya sayı) tarih dizesine dönüştürür.- Örnek:
date('2024-03-15')→'2024-03-15'
- Örnek:
date-time(value): Bir değeri datetime dizesine dönüştürür.- Örnek:
date-time(${event_timestamp})
- Örnek:
decimal-date-time(value): Bir tarih veya datetime dizesini Unix epoch’tan bu yana geçen milisaniyeyi 86400000’e bölen ondalık sayıya dönüştürür (1970-01-01’den bu yana kesirli günler). Tarihler üzerinde aritmetik yapmak için bunu kullanın.- Örnek: İki tarih arasındaki gün cinsinden süre:
decimal-date-time(${end_date}) - decimal-date-time(${start_date}) - Örnek: İki datetime arasındaki dakika cinsinden süre:
(decimal-date-time(${end_time}) - decimal-date-time(${start_time})) * 1440
- Örnek: İki tarih arasındaki gün cinsinden süre:
format-date(date, format): Bir tarih değerini desen dizesi kullanarak biçimlendirir.- Biçim belirteçleri:
%Y(4 haneli yıl),%y(2 haneli yıl),%m(ay 01–12),%d(gün 01–31),%a(kısaltılmış haftanın günü),%b(kısaltılmış ay adı) - Örnek:
format-date(today(), '%d/%m/%Y')→'15/03/2024'
- Biçim belirteçleri:
format-date-time(datetime, format): Bir datetime değerini desen dizesi kullanarak biçimlendirir. Tümformat-datebelirteçlerini şunları da kabul eder:%H(saat 00–23),%h(saat 01–12),%M(dakika 00–59),%S(saniye 00–59),%3(milisaniye),%P(AM/PM)- Örnek:
format-date-time(now(), '%d/%m/%Y %H:%M')→'15/03/2024 14:32'
Boolean fonksiyonları
boolean(value): Herhangi bir değeri boolean’a dönüştürür. Boş olmayan dizeler, sıfırdan farklı sayılar vetrueiçintruedöndürür; boş dizeler,0vefalseiçinfalsedöndürür.boolean-from-string(string): Dize'1'veya'true'(büyük/küçük harf duyarsız) isetruedöndürür; aksi hâldefalsedöndürür.true(): Booleantruedeğerini döndürür.false(): Booleanfalsedeğerini döndürür.not(expression): İfadenin mantıksal tersini döndürür. İfade yanlışsatrue, tersindefalsedöndürür.
Ek dize fonksiyonları
starts-with(string, prefix):stringprefixile başlıyorsatruedöndürür.contains(string, substring):string,substringiçeriyorsatruedöndürür.substring-before(string, needle):string‘deneedle‘ın ilk geçtiği yerden önce gelen kısmı döndürür.substring-after(string, needle):string‘deneedle‘ın ilk geçtiği yerden sonra gelen kısmı döndürür.normalize-space(string): Baştaki ve sondaki boşlukları kaldırır ve tüm iç boşluk dizilerini tek boşluğa daraltır.translate(string, search_chars, replace_chars):string‘desearch_chars‘ta görünen her karakterireplace_chars‘taki karşılık gelen karakterle değiştirir.
Ek matematik fonksiyonları
floor(number):number‘dan küçük veya eşit en büyük tam sayıyı döndürür (negatif sonsuza doğru yuvarlar).ceiling(number):number‘dan büyük veya eşit en küçük tam sayıyı döndürür (pozitif sonsuza doğru yuvarlar).random(): 0,0 (dahil) ile 1,0 (hariç) arasında rastgele bir ondalık sayı döndürür.coalesce(a, b):aboş değilseadöndürür; aksi hâldebdöndürür.once(value):value‘yu değerlendirir ve depolar, ancak yalnızca geçerli alan boşsa. Alan zaten bir değere sahipseonce()mevcut değeri değişmeden döndürür.
Coğrafi fonksiyonlar
area(geoshape_value): Bir geoshape (poligon) değerinin çevrelediği alanı metrekare cinsinden hesaplar.- Örnek:
area(${field_boundary})— tarım arazisinin alanını m² cinsinden hesaplar. - Örnek:
round(area(${field_boundary}) div 10000, 2)— hektara dönüştürür.
- Örnek:
distance(coordinates): Bir geotrace (çizgi) için metre cinsinden toplam yol uzunluğunu veya iki geopoint arasındaki mesafeyi hesaplar.- Örnek:
round(distance(${road_trace}) div 1000, 3)— kilometre cinsinden yol uzunluğu.
- Örnek:
Doğrulama fonksiyonları
regex(value, pattern):value,patternnormal ifadesiyle eşleşiyorsatruedöndürür. Desen tabanlı doğrulama içinconstraintsütununda kullanın.- Örnek:
regex(., '^[0-9]{10}$')— 10 haneli sayıyı doğrular.
- Örnek:
checklist(min, max, v1, v2, ...): Bir boolean ifadeler listesini değerlendirir vetruedeğerlerin sayısıminilemaxarasındaysa (dahil)truedöndürür.weighted-checklist(min, max, v1, w1, v2, w2, ...):checklist()gibi, ancak her değerin bir ağırlığı vardır.
Yardımcı fonksiyonlar
uuid(): Rastgele bir UUID (RFC 4122 v4 biçimi) dize olarak oluşturur.- Genellikle kararlı bir benzersiz kimlik oluşturmak için
once()ile kullanılır:once(uuid())
- Genellikle kararlı bir benzersiz kimlik oluşturmak için
version(): Settings çalışma sayfasında ayarlandığı şekliyle formunversionözniteliğinin değerini döndürür.position(): Bir tekrar grubu içinde çağrıldığında, geçerli tekrar örneğinin 1 tabanlı indeksini döndürür.thousandsep(length, separator, value): Bir sayıyı binlik ayırıcıyla biçimlendirir.- Örnek:
thousandsep(0, ',', 1234567)→'1.234.567'
- Örnek:
substr-jsonpath(value, jsonpath): JSONPath ifadesini kullanarak bir JSON dizesinden alt dize çıkarır.- Örnek:
substr-jsonpath(${api_response}, '$.data.name')—api_response‘da saklanan bir JSON dizesindennamealanını çıkarır.
- Örnek: