Перейти к содержанию

Otomasyon kurallarının ifadeleri, değerleri ve operatörleri

Bu bölüm, otomasyon kurallarında ifadelerin kullanımına ilişkin açıklamaları içerir: hangi ifadeler, değerler (değişkenler) ve operatörler vardır ve bunlar kural oluşturulurken sistemde nasıl uygulanır. Kurallarda kullanılmak üzere birçok değer ve operatör mevcuttur. İfadeler türlerine göre gruplandırılmış ve aşağıda kullanım örnekleriyle birlikte verilmiştir.

Terminoloji

Otomasyon kuralları bağlamında, farklı yorumlara sahip olan aşağıdaki terimler kullanılır:
İfade - bir değer(ler) ve bir operatör(ler) içeren yapı.
Değer (değişken) - belirli bir değer (sayılar, metin, mantıksal değerler, tarihler vb.).
Operatör - bir eylemdir. Operatör bir komut belirler veya koşulları birbirine bağlar: değerlerle tam olarak ne yapılması gerektiğini belirtir.

Örnek: some_expression: a + 3, burada some_expression ifadenin adıdır, a + 3 doğrudan ifadedir, a ve 3 değerlerdir (veya değişkenlerdir), + ise operatördür.

Temel prensipler

Lütfen dikkat edin: ifadeler, daha sonra otomasyon kuralının koşulunda ve eylemlerinde kullanılan değerleri hesaplar. İfade bloğunun her satırının bir adı ve bir formülü vardır: isim: ifade (yukarıdaki örnekte olduğu gibi: some_expression: a + 3). İsim, kuralın değeri (değişkeni) haline gelir ve daha sonra koşullarda, eylemlerde ve sonraki ifadelerde kullanılabilir.

İfade şu formatta yazılır: ifade_adı: değer

İfade adı Latin harfleri, rakamlar ve alt çizgilerden oluşur. Değer olarak şunlar kullanılabilir:

  • alana veya ilişkili kayda bağlantı: requested_by, requested_by.manager, requests[first];
  • _was ekiyle alanın önceki değeri: status_was, team_was, custom_fields_was.priority;
  • tek veya çift tırnak içinde bir satır;
  • sayı: 10, 3.5;
  • statik değer: accepted, incident, high;
  • kullanıcı alanı değeri: custom_fields.priority;
  • bulunan kayıt: find(person, "ivan@example.com");
  • bulunan birkaç kayıt: find_all(ci, "server");
  • tam metin arama sonucu: search(req, "printer");
  • yeni oluşturulan kayıt: new(task) veya new(task, template_name);
  • karşılaştırma, formül, üçlü operatör veya fonksiyon.

! işareti` bir değere referans vermeden önce, eğer mantıksal bir yorumlama destekliyorsa, mantıksal değeri ters çevirir. Dizeler ve mantıksal olmayan diğer değerler için, bu, değeri bir metin işlemine dönüştürmez, ancak mantıksal bir negatif olarak kullanılır.

Eğer isim mevcut kaydın alanları, daha önce hesaplanmış ifadeler, önceden tanımlanmış değerler ve sayılar arasında bulunamazsa, sistem onu statik bir dize olarak değerlendirir. Bu nedenle, önceden belirlenmiş değerlerin sabit kümeleri genellikle tırnak işaretleri olmadan yazılır: status = completed.

İfade adları, ayrılmış kelimelerle ve iç bağlam anahtarlarıyla çakışamaz. Bir ifadeye index, errors veya safe_attachments adı verilemez; ayrıca, koşul dili tarafından kullanılan önceden tanımlanmış değerler ve adlar da ayrılmıştır.

Temel prensipler - tür dönüşümleri ve boş değerler

Sistem, kullanıcının türleri açıkça belirtmesini gerektirmez. Hesaplama sırasında değerleri gerekli biçime dönüştürür:
mantıksal değer: herhangi bir boş olmayan değer doğru olarak kabul edilir;
satır: kayıtlar konu, isim veya görüntülenen isim üzerinden görüntülenir, 100 öğeye kadar olan diziler virgülle birleştirilir, büyük diziler eleman sayısı olarak gösterilir; sayı: sayısal dizeler, sayılar, diziler ve kayıtlar dahili kurallara göre sayıya dönüştürülür;
tarih/saat: ISO8601 standardında tarihler ve saatler ile tarih/saati destekleyen nesneler tanınır; dizi: normal diziler, ActiveRecord mimari şablonu (pattern) bağlantıları ve gecikmeli ilişkiler desteklenir.

Boş bir değer genellikle daha fazla hesaplamayı durdurur ve boş bir sonuç verir. İstisnalar belirtilmiştir: örneğin, empty? ve blank? boş bir değerde "doğru" değerini döndürür.

Önceden tanımlanmış değerler

Lütfen dikkat: eğer isim mevcut kaydın bir alanı olarak veya daha önce hesaplanmış bir ifade olarak bulunamazsa, sistem önceden tanımlanmış değerler kümesini kontrol eder.

Anlamı Sonuç Amaç
now geçerli tarih ve saat geçerli ana göre hesaplamalar için kullanılır
today geçerli tarih geçerli güne göre hesaplamalar için kullanılır
true temel mantıksal değer true doğruluk sabiti
false temel mantıksal değer false yanlış sabiti
empty özel boş dize bir değeri boş dizeyle karşılaştırmak için kullanılır
nil boş sonuç (sıfır) eksik bir değerin sabiti
null boş sonuç (sıfır) alternatif nil
updated_by değişikliği gerçekleştiren kişi bu otomasyon kuralının ait olduğu kaydı güncelleyerek otomasyon kuralının yürütülmesini başlatan kişi) / değişikliğin kaydedilmiş bağlamından, mevcut kullanıcı oturumundan veya doğrulama modundan alınır
triggered_at UTC'de tetiklenme zamanı kuralın yürütme bağlamından alınır; eğer yoksa, geçerli an kullanılır
rule_account kural alanı otomasyon kuralının tanımlandığı alan (kuralın ait olduğu alan)
rule_app_instance kurulu uygulama kuralları kuralın geldiği uygulama (varsa)
related_note `ilgili yorum (otomasyon kuralının uygulandığı anda oluşturulmuş) yorum eklenmesiyle ilişkili tetikleyiciler için kullanılabilir; yorum oluşturulmadıysa değer boştur; «Yorum eklendiğinde» tetikleyicisini kullanırken, otomasyondan sorumlu kullanıcının yorumu okuma hakları varsa bu değer her zaman mevcuttur
related_internal_note ilgili dahili yorum (otomasyon kuralının yürütüldüğü anda oluşturulan dahili yorum) dahili yorum eklenmesiyle ilgili tetikleyiciler için kullanılabilir; eğer yorum oluşturulmamışsa, değer boştur

Önemli: İfadenin üst seviyesinde, daha önce hesaplanmış bir ifadenin adı, geçerli kaydın alanına göre önceliklidir. Dizi fonksiyonlarının içinde, geçerli nesnenin bir dizi elemanı olduğu durumlarda, eleman alanları üst seviye ifadenin adından önce okunur.

Alanın önceki değerleri

Alan tanımlayıcısı, bu alanın değerini bulmak için kullanılabilir. Örneğin, iş akışının "Konu" alanının geçerli değerini almak için aşağıdaki ifadeyi kullanabilirsiniz:

  • workflow.subject

Ancak, kayıt alanının önceki değerini, yani kaydın kaydedilmesinden ve otomasyon kuralının tetiklenmesinden önce alanın sahip olduğu değeri de bulmak mümkündür. Bu, alan tanımlayıcısından sonra _was eklenerek yapılır. Örneğin, iş akışındaki "Konu" alanı için ifade şu şekilde görünür:

  • workflow.subject_was

_was eki, kuralın tetiklendiği andaki alan değerine atıfta bulunur.
Önceki değerler yalnızca kuralı tetikleyen kayıt için kullanılabilir. Dizi filtresinin içinde, bunlar dizi elemanına ait değildir; şablon kontrol modunda, *_was üst seviye dışında kullanıldığında sistem bir hata ekler.

Sözdizimi Sonuç Amaç
field_was alanın önceki değeri kaydın eski ve yeni durumunu karşılaştırmak için kullanılır
custom_fields_was.kod özel alanın önceki değeri kullanıcı alanlarındaki değişiklikleri kontrol etmek için kullanılır
custom_data_was.kod kullanıcı alanının önceki değeri kullanıcı verileri için tarihsel kayıt seçeneği

Mantıksal operatörler

Şunlar için kullanılır:
A değeri veya B değeri
A değeri ve B değeri

İfade örnekleri Sonuç
a or b (örneğin, eğer a doğruysa, o zaman b ya doğrudur ya da yanlıştır) doğru (true)
a or b (örneğin, eğer b doğruysa, o zaman a ya doğrudur ya da yanlıştır) doğru (true)
a or b (örneğin, a yanlış ve b yanlış) yanlış (false)
a and b (örneğin, a doğru ve b doğru) doğru (true)
a and b (örneğin, a yanlıştır ve/veya b yanlıştır) yanlış (false)

İfade Biçimleri: Karşılaştırma - Eşitlik

İçin kullanılır:
değer-A = değer-B
değer-A != değer-B

Sözdizimi Argümanlar Sonuç Amaç
sol = sağ iki değer doğru veya yanlış eşitliği kontrol eder
sol != sağ iki değer doğru veya yanlış eşitsizliği kontrol eder
sol < sağ iki değer doğru veya yanlış soldaki değerin sağdakinden küçük olup olmadığını kontrol eder
soldaki <= sağdaki iki değer doğru veya yanlış soldaki değerin sağdakinden küçük veya ona eşit olup olmadığını kontrol eder
soldaki > sağdaki iki değer doğru veya yanlış soldaki değerin sağdakinden büyük olup olmadığını kontrol eder
sol >= sağ iki değer doğru veya yanlış sol değerin sağ değere eşit veya daha büyük olup olmadığını kontrol eder
sol contains sağ iki değer doğru veya yanlış değerin dahil olup olmadığını kontrol eder
sol *= sağ iki değer doğru veya yanlış alternatif olarak contains işlemi
sol starts_with sağ iki değer doğru veya yanlış bir dizenin veya değerin başlangıcını kontrol eder
sol ^= sağ iki değer doğru veya yanlış alternatif olarak starts_with işlemi
sol ends_with sağ iki değer doğru veya yanlış bir dizenin veya değerin sonunu kontrol eder
sol $= sağ iki değer doğru veya yanlış alternatif olarak ends_with işlemi
sol is_blank tek değer doğru veya yanlış boş değeri kontrol eder
sol is_present tek değer doğru veya yanlış boş olmayan değeri kontrol eder
sol in [değer1, değer2] değer ve dizi doğru veya yanlış değerin diziye dahil olup olmadığını kontrol eder
sol not_in [değer1, değer2] değer ve dizi doğru veya yanlış değerin diziye dahil olmadığını kontrol eder

in ve not_in içindeki dizi köşeli parantez içinde yazılır. Dizi elemanları dizeler, değerlere referanslar veya diğer basit değişkenler olabilir.

Karşılaştırmalar değerleri karşılaştırılabilir bir biçime getirir. Tarihler tarih olarak, sayılar sayı olarak, sabit değer kümeleri kendi kümeleri içindeki konumlarına göre, diğer değerler ise dizeler olarak karşılaştırılır. contains için dizi, elemanların dize gösterimlerinin bir kümesi olarak kontrol edilir; starts_with ve ends_with için ise sırasıyla ilk veya son eleman kontrol edilir.

Dizilerde boş bir dizi [] desteklenir. Geriye dönük uyumluluk için, dizi elemanlarında boşluk içeren bazı tırnaksız dize değerlerine de izin verilir, ancak yeni kurallar için dizeleri tırnak içinde yazmak daha iyidir.

Örnek ifadeler Sonuç
'text' = 'text' doğru (true)
'text' != 'text' yanlış (false)
'' = 'text' yalan (false)
'text' = "" yalan (false)
'' = "" doğru (true)
"a\"b" = 'a"b' doğru (true)
'a\'b' = "a'b" doğru (true)
status = in_progress doğru (true)
status = assigned yanlış (false)
team = 'Database Administration' doğru (true)
team = 9 yalan (false)
team.id = 9 doğru (true)
team.id = 12 yalan (false)

Karşılaştırma - Daha Az, Daha Fazla (örnekler)

Kullanıldığı durumlar:
değer-A < değer-B
değer-A <= değer-B
değer-A > değer-B
değer-A >= değer-B

Örnek ifadeler Sonuç
‘a’ < ‘a’ yalan (false)
‘a’ <= ‘a’ doğru (true)
‘a’ > ‘a’ yalan (false)
‘a’ >= ‘a’ doğru (true)
‘a’ < ‘b’ doğru (true)
‘b’ > ‘a’ doğru (true)
‘a’ > ‘b’ yanlış (false)
‘’ < ’text’ doğru (true)
‘text’ > ’’ doğru (true)
status < completed doğru (true)
status < registered yanlış (false)
completed < status yanlış (false)
registered < status doğru (true)
team < ‘Application Development’ yanlış (false)
team < ‘Service Desk’ doğru (true)
‘Application Development’ < team doğru (true)
‘Service Desk’ < team yalan (false)
team.id < 100 doğru (true)
team.id < 1 yanlış (false)
100 < team.id yanlış (false)
1 < team.id doğru (true)

Karşılaştırma - İçerir (örnekler)

Kullanılır:
dizideki değer
dizide olmayan değer

Örnek ifadeler Sonuç
a in [a,b] doğru (true)
a not_in [a,b] yanlış (false)
b in [a,b] doğru (true)
c in [a,b] yalan (false)
ab in [a,b] yalan (false)
ab in [] yalan (false)
’’ in [] doğru (true)
’’ in [a,b] yanlış (false)
’’ in [a,,b] doğru (true)
a in [ a , b ] doğru (true)
status in [in_progress] doğru (true)
status in [assigned, accepted, in_progress, waiting_for_customer] doğru (true)
status in [assigned,completed] yanlış (false)
team in [Application Development,Database Administration,Service Desk] doğru (true)
team in [Application Development,Service Desk] yalan (false)
team.id in [8,9,10] doğru (true)
team.id in [11,12,13] yanlış (false)
11.0 in [11,12,13] doğru (true)
11 in [11.0,12.0,13.0] doğru (true)
team.id in [8.0,9.0,10.0] doğru (true)
team.id in [8.1,9.1,10.1] yanlış (false)

Karşılaştırma - Benzer şekilde (örnekler)

Kullanılan operatörler:
* operatörü ‘contains’
^ operatörü ‘starts_with’
$ operatörü ‘ends_with’

İfade örnekleri Sonuç
‘ivan.ivanov@proproduct.ru’ *= ‘ivanov’ (true)
‘ivan.ivanov@proproduct.ru’ ^= ‘ivanov’ (false)
‘ivan.ivanov@proproduct.ru’ *= ‘ivan’ (true)
‘ivan.ivanov@proproduct.ru’ ^= ‘ivan’ (true)
‘ivan.ivanov@proproduct.ru’ $= ‘ivan’ (false)
‘ivan.ivanov@proproduct.ru’ $= ‘proproduct’ (false)
‘ivan.ivanov@proproduct.ru’ $= ‘proproduct.ru’ (true)

Karşılaştırma - Varlık (örnekler)

Kullanıldığı durumlar:
değer boş
değer mevcut

İfade örnekleri Sonuç
team.name is_blank (false) (takım adı zorunludur, çünkü bir değer içermelidir)
request.custom_fields.my_date is_present (true), eğer UI genişletme alanı "my_date" tanımlanmışsa ve boş olmayan bir değer içeriyorsa, (false) aksi takdirde

Formüller

Kullanılan operatörler:
+ ‘toplama’ veya ‘birleştirme’ operatörü
- ‘çıkarma’ operatörü
* ‘çarpma’ operatörü
/ bölme operatörü"
% modül çarpma operatörü"

Lütfen dikkat edin, + işareti, solundaki değer bir metin dizesi ise "birleştirme" operatörü olarak işlev görür. Aksi takdirde, "toplama" operatörü gibi davranır.

Sözdizimi Argümanlar Sonuç Amaç
sol + sağ iki değer sayı, dize, tarih/saat, süre veya dizi sayıları toplar, dizeleri birleştirir, tarih/saate saniye veya süre ekler, uyumlu dizileri birleştirir
sol - sağ iki değer sayı, tarih/saat veya süre sayıları çıkarır, tarih/saatten saniyeleri veya süreyi çıkarır, iki tarih/saat arasındaki süreyi döndürür
sol * sağ iki değer sayı sayısal değerleri çarpar
sol / sağ iki değer sayı veya nil sayısal değerleri böler; sıfıra bölündüğünde boş sonuç döndürür
sol % sağ iki değer sayı veya nil bölünmenin kalanını döndürür; sıfıra bölündüğünde boş bir sonuç döndürür
sol and sağ iki değer mantıksal değer (doğru/yanlış) mantıksal VE, her iki değer mantıksal biçime getirildikten sonra
sol or sağ iki değer mantıksal değer (doğru/yanlış) mantıksal VEYA her iki değer de mantıksal forma getirildikten sonra

Formül zincirinde sistem operatörlerin önceliğini dikkate alır: %, ardından * ve /, ardından + ve -, ardından and, ardından or.

Örnek ifadeler Sonuç
1 + 1 2.0
2 1 1.0
2 * 5 10.0
6 / 3 2.0
15 % 6 3.0
1 1 1 + 1 4.0
1 + 2 * 6 % 4 5.0
‘start’ + ‘_at’ + ’ field’ alan "start_at"
1 + team.name 1.0
1 + team.id 8.0
2.0 + team 9.0
team + 3.0 10.0
created_at + 3.days Yaratılış tarihinden 3 gün sonra
team.id ++ team.name 7.0
’’ + team.id ++ team.name 7 – Service Desk
‘{{team_id}} {{team_name}}’ 7 – Service Desk
created_at 4.hours yaratılış tarihinden 4 saat önce
5 / 5 1.0
5 / 0 nil

Değişkeni elde etme yolu (değer yolu)

Değişkeni çıkaran ifade her zaman otomasyon kuralının tanımlandığı kayıtla başlar.

Başlangıç değeri belirlendikten sonra, yol eklenebilir, örneğin:

1 request.requested_by.manager.name
2 requests[first].subject
3 find_all(ci, "server").select(status = in_production).map(name).join(", ")

Sözdizimi Argümanlar Sonuç Amaç
.field alan adı veya kayıtla bağlantı alan değeri veya ilişkili kayıt geçerli değerin özelliğine veya bağlantısına gider
.custom_fields.kod kullanıcı alanı kodu kullanıcı alanı değeri custom_fields'den kullanıcı alanını okur
.custom_data.kod kullanıcı alanı kodu kullanıcı alanı değeri kullanıcı verilerine erişim için tarihsel seçenek
[first] yok dizinin ilk elemanı koleksiyonun ilk elemanını döndürür
[last] hayır dizinin son elemanı koleksiyonun son elemanını döndürür
[N] pozisyon numarası dizi elemanı pozisyona göre elemanı döndürür, pozitif pozisyonlar 1'den, negatif pozisyonlar ise dizinin sonundan başlar
[#ID] kayıt kimliği dizi elemanı belirtilen kimliğe sahip kaydı dizide arar
["isim"] dize dizi elemanı dizide konuya (subject) göre bir kayıt arar, eğer varsa, aksi takdirde isme (name) göre arar
[ifade] sayı veya dize içeren ifade adı dizi elemanı başka bir ifadenin değerini indeks veya isim olarak kullanır
[N..M] iki pozisyon dizinin bir kısmı eleman aralığını döndürür; pozitif pozisyonlar 1'den başlar

Eğer indeks bir diziye uygulanmıyorsa, çalıştırıldığında boş bir sonuç döndürülür; şablon kontrol edildiğinde sistem bir doğrulama hatası ekler.

Kullanılabilir alanlar, kaydın türüne göre değişir. Sunucu, her kayıt türü için izin verilen özniteliklerin listesini sınırlar: örneğin, istekte durum (status), konu (subject), "kim tarafından talep edilen" kişi (başlatıcı) (requested_by), "talep edilen" kişi (requested_for), hizmet bileşeni (service_instance), ekip (team), üye (member), kullanıcı alanları (custom_fields), yorumlar (notes), etiketler (tags) ve diğer alanlar mevcuttur; sırayla görevin kendi kümesi vardır. Alanların tam listesi büyüktür ve kodda "beyaz liste" (whitelist) olarak saklanır; alanlara erişim sözdizimi açıklanıyor ve kayıt türlerine göre tüm beyaz liste tekrarlanmıyor.

custom_fields / custom_data içindeki yol, ifadenin hesaplanması sırasında UI genişletme şemasına göre kontrol edilmiyor. Kural yürütüldüğünde, sistem kullanıcı alanlarını anahtar-değer biçiminde (karma (hash) bir veri yapısı olarak okur ve belirtilen anahtara göre değeri döndürür; anahtar yoksa sonuç boş olur. Doğrulama ve şablon modunda sistem, belirli bir alan için aktif UI genişletme şemasını bilmiyor ve kullanıcı alanının değerini bir dize olarak değerlendiriyor.

Eski isimlerin bir kısmı geriye dönük uyumluluk için alternatif olarak desteklenmektedir: custom_data değeri custom_fields değerine karşılık gelir; sorgu ve görev için change değeri iş akışına (workflow) karşılık gelir; change_type değeri workflow_type değerine karşılık gelir; workflow_manager değeri hizmette change_manager değerine karşılık gelir; sürümde changes değeri workflows değerine karşılık gelir; yorumda internal değeri internal_account değerine karşılık gelir; alanda sitename değeri onun kimliğine karşılık gelir.

Aşağıda ifadelerin kullanımına ilişkin örnekler verilmiştir.

İfade örnekleri Sonuç
status onaylandı (approved)
workflow.status ilerleme askıya alındı (progress_halted)
created_at 2017-09-12T14:00:00Z
planned_duration 8
workflow.tasks[first] 1. iş akışı görevi
workflow.tasks[1] 1. iş akışı görevi
workflow.tasks[last] iş akışının son görevi
workflow.tasks[-1] iş akışının son görevi
workflow.tasks[#20122] iş akışında 20122 kimliğine sahip görev
workflow.tasks[1].custom_fields.name iş akışı görevinden "name" kimliğine sahip UI uzantısı alanının değeri
workflow.tasks[1].custom_fields.你好,世界 iş akışı görevinden "你好,世界" kimliğine sahip UI genişletme alanının değeri
workflow.tasks[#20122].subject Denetleyici onayını değiştir (Change controller approval)
workflow.tasks[“Change controller approval”].id 20122.0
workflow.tasks[‘Change controller approval’] 20122.0
workflow.tasks[first].notes[first].text iş akışının ilk görevinin ilk yorumundan metin
workflow.tasks[first].notes[first].person.name iş akışının ilk görevinin ilk yorumunu ekleyen kişinin adı

Dizilerle manipülasyonlar

Dizi fonksiyonları, bir koleksiyona veya diziye nokta aracılığıyla uygulanır. Eğer orijinal değer boşsa, çoğu fonksiyon boş bir sonuç döndürür; empty? "doğru" değerini döndürür.

Fonksiyon Argümanlar Sonuç Ayrıntılar
.join("ayırıcı") ayırıcı dize dize dizinin her elemanını bir dizeye dönüştürür ve elemanları belirtilen ayırıcı ile birleştirir
.map(alan) dizi elemanına göre alana referans değer dizisi her eleman için belirtilen alanı veya yolu hesaplar ve bir sonuç dizisi döndürür; doğrulama modunda iç içe diziler yasaktır
.select(koşul) ikili karşılaştırma eleman dizisi koşulun doğru olduğu elemanları bırakır; koşul, dizinin geçerli elemanı bağlamında hesaplanır
.reject(koşul) ikili karşılaştırma eleman dizisi koşulun doğru olduğu elemanları hariç tutar
.detect(koşul) ikili karşılaştırma bir eleman veya boş sonuç koşulun doğru olduğu ilk elemanı döndürür
.any? hayır mantıksal değer (doğru/yanlış) dizide en az bir elemanın varlığını kontrol eder
.any?(koşul) ikili karşılaştırma mantıksal değer (doğru/yanlış) dizinin en az bir elemanının koşulu sağlayıp sağlamadığını kontrol eder
.all?(koşul) ikili karşılaştırma mantıksal değer (doğru/yanlış) dizinin tüm elemanlarının koşulu sağlayıp sağlamadığını kontrol eder
.none? hayır mantıksal değer (doğru/yanlış) dizide hiçbir eleman olmadığını kontrol eder
.none?(koşul) ikili karşılaştırma mantıksal değer (doğru/yanlış) dizinin hiçbir elemanının koşulu sağlamadığını kontrol eder
.empty? hayır mantıksal değer (doğru/yanlış) dizinin boş olup olmadığını kontrol eder; boş bir başlangıç değeri için "doğru" döndürür
.count hayır sayı eleman sayısını döndürür
.count(koşul) ikili karşılaştırma sayı koşulu sağlayan elemanların sayısını döndürür
.size yok sayı eleman sayısını döndürür
.size(koşul) ikili karşılaştırma sayı count(koşul) gibi çalışır: koşulu sağlayan elemanları sayar
.sum hayır sayı elemanları sayılara dönüştürür ve toplamı döndürür
.sum(koşul) ikili karşılaştırma sayı elemanları sayılara dönüştürür ve koşulun doğru olduğu değerleri toplar
.min hayır bir eleman veya boş sonuç boş elemanları kaldırır ve minimum değeri döndürür
.max hayır bir eleman veya boş sonuç boş elemanları kaldırır ve maksimum değeri döndürür

size ve empty? fonksiyonları bir dizeyle de çalışabilir, ancak yine de sözdizimi bir dizi fonksiyonuyla aynıysa, yine de dizi fonksiyonlarına aittirler. Tip kontrolü sırasında sistem, dizeyi ve koleksiyonu birbirinden ayırır. sum(koşul) için koşul elemanlar sayısal biçime dönüştürüldükten sonra kullanılır; eğer kayıtları alanlara göre filtrelemek gerekiyorsa, önce select(koşul), ardından map(sayısal_alan) ve ancak ondan sonra sum kullanmak daha iyidir.

Koleksiyonun çıkarılması için yol (örnekler)

Bir koleksiyonu çıkaran ifade her zaman otomasyon kuralının tanımlandığı bir kayıtla başlar veya find_all işlemini kullanır.

Örnek ifadeler Sonuç
cis Mevcut görevle ilgili tüm KE'ler
workflow.requests[first].cis İlk iş akışı isteğiyle ilgili tüm KE'ler
cis.size Mevcut görevle ilişkili KE sayısı
cis.count Mevcut görevle ilişkili KE sayısı
workflow.tasks.select(status = registered) İş akışı görevleri, "Kayıtlı" statüsüne sahip olanlar
workflow.tasks.reject(status = registered) "Kayıtlı" statüsüne sahip olmayan iş süreci görevleri
workflow.tasks.select(status = failed) + workflow.tasks.select(status = rejected) "Başarısız" durumundaki iş akışı görevleri ile "Reddedildi" durumundaki iş akışı görevlerinin birleşimi
cis.empty? Doğru, eğer mevcut göreve hiçbir KE bağlı değilse, aksi takdirde yanlış
cis.any? Doğru, eğer mevcut göreve en az bir KE bağlıysa, aksi takdirde yanlış
cis.any?(status = in_production) Doğru, eğer mevcut göreve üretimde statüsünde herhangi bir KE bağlıysa, aksi takdirde yanlış. Göreve hiçbir KE bağlı değilse yanlış döndürür.
cis.all?(status = in_production) Eğer mevcut görevle ilgili tüm KE'lerin durumu "üretimde" ise Doğru, aksi takdirde Yanlış. Eğer göreve hiçbir KE bağlı değilse true değerini döndürür
cis.none?(status = in_production) Doğru, eğer mevcut göreve "üretimde" statüsündeki KE'ler bağlı değilse, aksi takdirde yanlış. Göreve KE'ler bağlı değilse doğru döndürür
workflow.tasks.select(category = approval).reject(finished_at != nil) İş akışıyla ilgili henüz tamamlanmamış tüm onay görevleri
workflow.tasks.select(category = implementation).map(member) İş akışıyla ilgili uygulama görevlerinin tüm katılımcıları
person.permissions.detect(account = ‘dc’).workflow_manager Bu kişi veri merkezi alanında iş akışlarının yöneticisi midir?

Kayıtların aranması ve oluşturulması, ayrıca ilişkili olmayan kayıtların çıkarılması dahil

Otomasyon kuralı tanımlanmış bir kayıtla ilişkili olmayan kayıtları aramak ve çıkarmak, ayrıca kayıt oluşturmak için aşağıdaki fonksiyonlar mevcuttur.
Bu fonksiyonlar, ifadenin noktaya ve yol fonksiyonlarına kadar olan başlangıç değeri olarak kullanılır.

Sözdizimi Argümanlar Sonuç Amaç
find(tip, değer) kayıt tipi, sayı veya dize bir kayıt veya boş sonuç belirli bir kaynak değerine göre mevcut tipte bir kayıt arar
find_all(tip, değer) kayıt türü, sayı, dize veya sayı/dize dizisi kayıt dizisi mevcut türde tüm uygun kayıtları arar
search(tür, dize) kayıt türü, arama satırı kayıt dizisi, maksimum 50 kullanıcıya sunulan belirli türdeki kayıtlarda tam metin araması yapar
new(task) oluşturulan kaydın türü yeni görev bellekte daha sonra eylemlerle doldurulacak yeni bir görev oluşturur
new(task, şablon) oluşturulan kaydın türü, isim/kimlik/şablon kaydı uygulanan şablonla yeni görev yeni bir görev oluşturur ve bulunan görev şablonunu uygular

Find ve find_all için 'request' modeli bir talebe, change geçmiş adı ise bir iş akışına (iş akışı) dönüştürülür. Account (alan) ve Customer (müşteri) için, ayrıca izin verilen öznitelikleri veya ikame sütunu olmayan türler için arama yapılamaz.

search için türün global aramayı desteklemesi gerekir. Sonuçlar ayrıca kullanıcının görüntüleme erişimine göre filtrelenir.

new değeri şu anda yalnızca task (görev) oluşturmayı desteklemektedir. Şablon iletilmişse, şablon değeri bir sayı, bir dize veya bulunan bir görev şablonu kaydı olmalıdır.

Arama örnekleri.

İfade örnekleri Sonuç
find(person, ‘singileeva.klavdiya@pro-product.ru’) Singileeva Klavdiya
find(person, ‘singileeva.klavdiya@pro-product.ru’).job_title Singileeva Klavdiya’nın pozisyonu
find(person, workflow.requests[first].custom_fields.email) İlk iş akışıyla ilişkili UI uzantısının e-posta alanında belirtilen e-posta adresine dayalı yüz kaydı
find(service_instance, 2334) 2334 kimliğine sahip hizmet örneği
find(service_instance, 'Minsk Network') "Minsk Ağı" hizmetinin örneği
find(ci, predecessors[first].custom_fields.ci_id) Önceki görevin UI uzantısında seçilen KE kimliğine göre KE araması yapın.
find(ci, 'unknown') Sıfır (nil)
find_all(person, 'Singileeva Klavdiya') Singileeva Klavdiya adıyla kayıtlı tüm kişilerin listesi
find_all(ci, custom_fields.impacted_assets) Çoklu yanıt seçenekli UI uzantıları alanında seçilen tüm KE’lerin dizisi
search(ci, ‘SPARCS’).detect(status = in_production) “SPARCS” anahtar kelimesiyle yapılan küresel arama sonucunda elde edilen, en fazla 50 öğe içeren listeden, hizmette olan tüm KE’lerin dizisi.

Yeni kayıtların oluşturulmasına ilişkin örnekler (sadece görevler için).

İfade örnekleri Sonuç
new(task) Kurallar alanında yeni bir boş görev oluşturuldu
new(task, ‘Finalize the change plan’) Sağlanan şablona dayalı yeni bir görev

Dizelerle yapılan işlemler

Dize fonksiyonları, orijinal değeri bir dizeye dönüştürür; ancak to_date_time fonksiyonu, değeri tarih/saate dönüştürür. Eğer orijinal değer boş ise, empty? ve blank? "doğru" değerini, present? ise "yanlış" değerini döndürür, diğer fonksiyonlar ise boş bir sonuç döndürür.

Fonksiyon Argümanlar Sonuç Ayrıntılar
.size yok sayı dizenin uzunluğunu döndürür
.length yok sayı dizenin uzunluğunu döndürür
.strip hayır satır satırın başındaki ve sonundaki boşlukları siler
.lstrip hayır satır satırın başındaki boşlukları siler
.rstrip hayır satır satırın sonundaki boşlukları siler
.squish hayır satır en dıştaki boşlukları siler ve satır içindeki boşluk dizilerini sıkıştırır
.squeeze hayır satır Ruby dilinin dize işlemi kurallarına göre tekrarlanan karakterleri sıkıştırır
.reverse yok dize dizeyi ters sırayla döndürür
.upcase yok dize dizeyi büyük harfe çevirir
.downcase yok dize dizeyi küçük harfe çevirir
.swapcase hayır dize harflerin büyük/küçük harf durumunu tersine çevirir
.capitalize hayır dize ilk harfi büyük, diğerlerini küçük yapar
.titleize hayır satır sonuçtan karakterleri silmeden, ilk harfi büyük olacak şekilde kelimeleri büyük harfle yazılmış hale getirir
.empty? hayır mantıksal değer (doğru/yanlış) boş bir dizeyi kontrol eder
.blank? hayır mantıksal değer (doğru/yanlış) boş bir dizeyi veya boşluklardan oluşan bir dizeyi kontrol eder
.present? hayır mantıksal değer (doğru/yanlış) boş olmayan bir değeri kontrol eder
.to_number yok sayı dizeyi kayan sayıya dönüştürür
.to_date_time yok tarih saat veya boş sonuç
.split("ayırıcı") dize dize dizisi dizeyi belirtilen ayırıcıya göre böler
.split(/düzenli_ifade/) düzenli ifade dize dizisi dizeyi düzenli ifadeye göre böler
.match?("dize") dize mantıksal değer (doğru/yanlış) dizeyle eşleşmeyi, kaçışlı bir şablon olarak kontrol eder
.match?(/düzenli_ifade/) düzenli ifade mantıksal değer (doğru/yanlış) düzenli ifadeye göre eşleşmeyi kontrol eder
.start_with?(değer) değer mantıksal değer (doğru/yanlış) dizenin iletilen değerle başlayıp başlamadığını kontrol
.exclude?(değer) değer mantıksal değer (doğru/yanlış) dizenin iletilen değeri içermediğini kontrol eder
.slice(N) sayı dize N konumundan sonuna kadar olan dizenin bir kısmını döndürür; pozitif konum 1'den başlar
.slice(N, uzunluk) iki sayı dize belirtilen uzunlukta N konumundan itibaren dizenin bir kısmını döndürür; pozitif konum 1'den başlar
.ljust(uzunluk) sayı satır satırı sağdan belirtilen uzunluğa kadar boşluklarla tamamlar
.ljust(uzunluk, yer tutucu) sayı ve değer dize belirtilen doldurucu ile sağdan dizeyi tamamlar
.rjust(uzunluk) sayı dize belirtilen uzunluğa kadar sola boşluklarla dizeyi tamamlar
.rjust(uzunluk, yer tutucu) sayı ve değer dize belirtilen yer tutucu ile dizeyi soldan tamamlar
.replace("ne", "ne_ile") satır ve satır satır ilk satırın tüm oluşumlarını ikinci satırla değiştirir
.replace(/düzenli_ifade/, "ne_ile") düzenli ifade ve dize dize düzenli ifadenin tüm eşleşmelerini ikinci dizeyle değiştirir satır
.replace(/düzenli_ifade/, "ne_ile") düzenli ifade ve dize dize düzenli ifadenin tüm eşleşmelerini ikinci dizeyle değiştirir

Tırnak içindeki dize argümanları, kural değerlerinin interpolasyonunu gerçekleştirir. Düzenli ifadeler 4 saniyelik bir süreyle çalıştırılır; bu süre aşıldığında sistem bir yürütme hatası ekler ve boş bir sonuç döndürür.

Aşağıda, otomasyon kurallarında dizelerle yapılan işlemlere dair örnekler verilmiştir.

Örnek ifadeler Sonuç
’ hello’.lstrip Başlangıçtaki boşluğu kaldırır (‘hello’).
’hello ’.rstrip Satırın sonundaki boşlukları kaldırır (‘hello’).
‘hello’.start_with?(‘hell’) Doğru. Doğru, eğer dize belirtilen son eklerden biriyle başlıyorsa.
‘hello’.end_with?(‘lo’) Doğru. Doğru, eğer dize belirtilen son eklerden biriyle bitiyorsa.
‘table’.match?(‘bl’) Doğru. "Doğru" değeri, eğer şablon satırda bulunursa.
s=‘foo’, s.include?(‘f’) Doğru. Doğru, eğer self başka bir dize içeriyorsa.
s=‘foo’, s.exclude?(‘t’) Doğru. Doğru, eğer self başka bir dize içermiyorsa.
‘hello’.ljust(10) Eğer tam sayı dizenin uzunluğundan büyükse, dizeyi sola doldurulmuş olarak döndürür.
‘hello’.rjust(10, ‘oh’) Eğer tam sayı dizenin uzunluğundan büyükse, sağa hizalanmış doldurma ile dizeyi döndürür.
subject.size Karakter sayısı 28'dir.
subject.length Karakter sayısı 28'dir.
’ spacey string ’.strip Başlangıç ve bitiş boşluklarını kaldırın.
’ spacey string ’.squish Birden fazla boşluğu tek bir boşlukla değiştirin ve başlangıç ile bitiş boşluklarını silin.
’ spaceeeey ssstring ’.squeeze Aynı karakter dizilerini tek bir karakterle değiştirin.
‘desserts’.reverse Sembolleri değiştir (‘stressed’).
‘r-service’.upcase Tüm harfler büyük harflidir.
‘R-SERVICE’.downcase Tüm harfler küçük harflidir.
‘hI tHERE’.swapcase Küçük harften büyük harfe ve bunun tersi de geçerlidir (‘Hi There’).
’ ’.empty? Doğru. Eğer dize boşsa veya sadece boşluk içeriyorsa "doğru" değerini döndürür.
’ ’.blank? Doğru. Eğer dize boşsa veya sadece boşluk içeriyorsa "doğru" değerini döndürür.
’ ’.present? Yalan. Eğer dize boşluk dışındaki karakterleri içeriyorsa "doğru" değerini döndürür.
‘break-me-up’.split(‘-’) Dizeyi sınırlayıcıya göre dizeler dizisine böl ([‘break’, ‘me’, ‘up’]).
‘break-me-up’.split(/[eau]+/) Dizeyi sınırlayıcıya göre dizeler dizisine böl normal ifadenin ([‘br’, ‘k-m’, ‘-’, ‘p’]).
‘break-me-up’.slice(3) Belirtilen index.md dosyasından başlayarak bir satır almak ve devam etmek (‘eak-me-up’).
‘break-me-up’.slice(-5) Belirtilen index.md dosyasından başlayarak bir satır almak ve devam etmek (‘me-up’).
‘break-me-up’.slice(3,2) Belirli bir index.md dosyasından sabit sayıda karakter almak (‘ea’).
‘break-me-up’.replace(‘-’, ’ ’) Tüm oluşumları başka bir dizeyle değiştirin (‘break me up’).
‘break-me-up’.replace(/[eau]+/, ‘*’) Düzenli ifadenin tüm oluşumlarını başka bir dizeyle değiştirin (‘br*k-m*-*p’).
‘break-me-up’.replace(/([eau]+)/, ‘\1’) Tüm düzenli ifade oluşumlarını, yakalama gruplarını kullanarak başka bir dizeyle değiştirin. (‘br*ea*k-m*e*-*u*p’).
[‘break’,‘me’,‘up’].join(’ and ’) Belirtilen ayırıcı kullanılarak dizi elemanlarını birleştirmek (‘break and me and up’).
‘10.428571428571429’.to_number Dizeyi sayıya dönüştür (10.428571428571429).

Sayılarla manipülasyonlar

Sayısal fonksiyonlar, orijinal değeri bir sayıya dönüştürür. Eğer değer boşsa, fonksiyon boş bir sonuç döndürür.

Fonksiyon Argümanlar Sonuç Ayrıntılar
.round yok sayı sayıyı tam sayıya yuvarlar
.round(hassasiyet) sayı sayı sayıyı belirtilen sayıda basamağa yuvarlar
.to_string hayır dize sayıyı dizeye dönüştürür

Aşağıda otomasyon kurallarında kullanım örnekleri verilmiştir.

Örnek ifadeler Sonuç
10.428571428571429.to_string Sayıyı dizeye dönüştür (‘10.428571428571429’).
10.428571428571429.round Tam sayıya yuvarlama (10).
10.428571428571429.round(2) Belirtilen ondalık basamağa yuvarlama (10.43).

Tarih ve saat manipülasyonu

Sözdizimi Neye uygulanır Sonuç Amaç
.seconds / .second sayı süre sayıyı saniye olarak yorumlar
.minutes / .minute sayı süre sayıyı dakika olarak yorumlar
.hours / .hour sayı süre sayıyı saat olarak yorumlar
.days / .day sayı süre sayıyı gün olarak yorumlar
.weeks / .week sayı süre sayıyı hafta olarak yorumlar
.months / .month sayı süre sayıyı ay olarak yorumlar
.years / .year sayı süre sayıyı yıl olarak yorumlar
.ago sayı veya süre tarih/saat süreyi geçerli andan çıkarır; eğer solda bir sayı varsa, bu saniye olarak kabul edilir
.from_now sayı veya süre tarih/saat mevcut ana süre ekler; eğer solda bir sayı varsa, bu saniye olarak kabul edilir
.is_monday ... .is_sunday tarih/saat mantıksal değer (doğru/yanlış) haftanın gününü kontrol eder
.year, .month, .day tarih/saat sayı yılı, ayı veya günü döndürür
.hour, .minute, .second tarih/saat sayı saati, dakikayı veya saniyeyi döndürür
.day_of_week tarih/saat sayı haftanın gününün numarasını döndürür
.day_of_year tarih/saat sayı yılın gün numarasını döndürür
.utc tarih/saat tarih/saat aynı zaman noktasını Evrensel Koordineli Zaman'da (UTC) döndürür
.in_time_zone(saat kayış) bir dize veya dizeyi veren bir değer tarih/saat tarihi/saati belirtilen saat dilimine çevirir; saat dilimi bilinmiyorsa hata ekler
.iso8601 hayır satır ISO8601 formatında tarih/saat döndürür

Lütfen dikkat edin: bazı değerler, alan kaydı alanları olmasa da, nokta aracılığıyla nitelikleri destekler.

Lütfen dikkat edin: tarih ve saat fonksiyonları .in_time_zone(saat_dilimi) ve .iso8601 öncelikle orijinal değeri tarih/saate dönüştürmeye çalışır. Dizeler yalnızca ISO8601 tarih standardı (YYYY-AA-GG) veya ISO8601 saat standardı formatında tanınır.

Aşağıda otomasyon kurallarında kullanım örnekleri verilmiştir.

İfade örnekleri Sonuç
now >1. saniye önce <1. saniye şu andan itibaren (>1.seconds.ago <1.seconds.from_now)
today >1 gün önce <1 gün gerçek andan itibaren (>1.day.ago <1.day.from_now)
1.second.ago >2 saniye önce <0 saniye şu andan itibaren (>2.seconds.ago <0.seconds.from_now)
2.seconds.ago >3 saniye önce <1 saniye önce (>3.seconds.ago <1.second.ago)
1.minute.ago >61 saniye önce <59 saniye önce (>61.seconds.ago <59.seconds.ago)
2.minutes.ago >121 saniye önce <119 saniye önce (>121.seconds.ago <119.seconds.ago)
1.hour.ago >61 dakika önce <59 dakika önce (>61.minutes.ago <59.minutes.ago)
2.hours.ago >121 dakika önce <119 dakika önce (>121.minutes.ago <119.minutes.ago)
1.day.ago >25 saat önce <23 saat önce (>25.hours.ago <23.hours.ago)
2.days.ago >49 saat önce <47 saat önce (>49.hours.ago <47.hours.ago)
1.week.ago >8 gün önce <6 gün önce (>8.days.ago <6.days.ago)
2.weeks.ago >15 gün önce <13 gün önce (>15.days.ago <13.days.ago)
1.month.ago >32 gün önce <27 gün önce (>32.days.ago <27.days.ago)
2.months.ago >63 gün önce <56 gün önce (>63.days.ago <56.days.ago)
1.year.ago >366 gün önce <364 gün önce (>366.days.ago <364.days.ago)
2.years.ago >732 gün önce <729 gün önce (>732.days.ago <729.days.ago)
1.second.from_now >0.saniye.şimdiden_itibaren <2.saniye.şimdiden_itibaren (>0.seconds.from_now <2.seconds.from_now)
2.seconds.from_now >1.saniye.şimdiden_itibaren <3.saniye.şimdiden_itibaren (>1.seconds.from_now <3.second.from_now)
1.minute.from_now >59.saniye.şimdiden_itibaren <61.saniye.şimdiden_itibaren (>59.seconds.from_now <61.seconds.from_now)
2.minutes.from_now >119.saniye.şimdiden_itibaren <121.saniye.şimdiden_itibaren (>119.seconds.from_now <121.seconds.from_now)
1.hour.from_now >59 dakika şu andan itibaren <61 dakika şu andan itibaren (>59.minutes.from_now <61.minutes.from_now)
2.hours.from_now >119 dakika şu andan itibaren <121 dakika şu andan itibaren (>119.minutes.from_now <121.minutes.from_now)
1.day.from_now >23.saat.şimdiden_itibaren <25.saat.şimdiden_itibaren (>23.hours.from_now <25.hours.from_now)
2.days.from_now >47.saat.şimdiden_itibaren <49.saat.şimdiden_itibaren (>47.hours.from_now <49.hours.from_now)
1.week.from_now >6.gün.şimdiden_itibaren <8.gün.şimdiden_itibaren (>6.days.from_now <8.days.from_now)
2.weeks.from_now >13.gün.şimdiden_itibaren <15.gün.şimdiden_itibaren (>13.days.from_now <15.days.from_now)
1.month.from_now >27 gün gerçek andan itibaren <32 gün gerçek andan itibaren (>27.days.from_now <32.days.from_now)
2.months.from_now >56.gün.şimdiden_itibaren <63.gün.şimdiden_itibaren (>56.days.from_now <63.days.from_now)
1.year.from_now >364.gün.şimdiden_itibaren <366.gün.şimdiden_itibaren (>364.days.from_now <366.days.from_now)
2.years.from_now >729.gün.şimdiden_itibaren <732.gün.şimdiden_itibaren (>729.days.from_now <732.days.from_now)
planned_duration.hours.from_now >79.saat.şimdiden_itibaren <81.saat.şimdiden_itibaren (>79.hours.from_now <81.hours.from_now)
now.year Yıl, örneğin, 2019
now.month Yılın ayı, örneğin üçüncü (Mart)
now.day Ayın günü, örneğin 21
now.hour Örneğin öğleden sonra saat 19
now.minute Örneğin bir saatin dakikası, 45
now.second Örneğin, bir dakikanın saniyesi 12'dir.
now.day_of_year Örneğin yılın günü, 80
now.day_of_week Haftanın günü, örneğin 4 (perşembe)
now.is_monday Gün - Pazartesi, örneğin yalanlar
now.is_tuesday Gün - Salı, örneğin yalanlar
now.is_wednesday Gün çarşambadır, örneğin yalanlar
now.is_thursday Gün - Perşembe, örneğin yalanlar
now.is_friday Gün - Cuma, örneğin yalanlar
now.is_saturday Gün - Cumartesi, örneğin yalanlar
now.is_sunday Gün - Pazar, örneğin yalanlar
now.utc UTC saat diliminde tarih ve saatin çakışması
custom_fields.my_date_time.to_date_time Kullanıcı alanlarından elde edilen tarih ve saat dize değerini tarih ve saat formatına dönüştürün.
now.in_time_zone(person.time_zone) Kişinin saat diliminde tarih ve saatin çakışması
now.in_time_zone(rule_account.time_zone) Tarih ve saat, kuralın oluşturulduğu uzayın saat dilimiyle aynıdır.
now.in_time_zone(‘Minsk’) Belirtilen saat diliminde aynı tarih ve saat
now.iso8601 Aynı tarih ve saat, ISO8601 standardı formatında
duration(created_at, now) Yaratılış ile şimdiki an arasındaki dakika sayısı
template.support_hours.target_at(now, 8.hours, ‘Moscow’) Hedef süre, istek şablonundan alınan destek saatlerine, başlangıç saatine ve süresine göre hesaplanmıştır, Moskova saat dilimi için

Takvim manipülasyonu

Takvim fonksiyonları takvim türündeki bir değere uygulanır. Eğer orijinal değer bir takvim değilse, fonksiyon boş bir sonuç döndürür ve kural kontrolü sırasında sistem bir hata ekler.

Fonksiyon Argümanlar Sonuç Ayrıntılar
.target_at(başlangıç, süre) tarih/saat, sayı veya süre değeri tarih/saat hedef zamanı takvime göre hesaplar: başlangıç zamanından çalışma süresini ekler; süre saniye cinsinden iletilir ve fonksiyon içinde dakikaya çevrilir
.target_at(başlangıç, süre, saat dilimi) tarih/saat, süre, saat dilimi dizesi tarih/saat aynı, ancak belirli bir saat dilimiyle
.duration(başlangıç, bitiş) iki tarih/saat sayı takvimdeki iki an arasındaki çalışma süresini hesaplar
.duration(başlangıç, bitiş, saat dilimi) iki tarih/saat, saat dilimi dizesi sayı aynı, ancak belirli bir saat dilimiyle

Eğer saat dilimi iletilmemişse, otomasyon kuralının uzay saat dilimi kullanılır. Eğer iletilen saat dilimi bilinmiyorsa, sistem bir hata ekler ve boş bir sonuç döndürür.

Üçlü ifadeler - Üçlü operatörler

Sözdizimi Argümanlar Sonuç Amaç
koşul ? eğer_evet : eğer_hayır koşul ve iki değer iki değerden biri koşul boş değilse ikinci değeri, aksi takdirde üçüncü değeri döndürür
koşul then eğer_evet else eğer_hayır koşul ve iki değer iki değerden biri ternary operatörün alternatif yazımı

Kuralın şablon modunda kontrol edilmesi sırasında her iki sonucun da uyumlu bir türe sahip olması gerekir. Örneğin, bir dalda bir kayıt döndürüp diğer dalda bir kayıt dizisi döndürmek mümkün değildir.

İfade örnekleri Sonuç
true then ‘yes’ else ‘no’ Evet (‘yes’)
!true then ‘yes’ else ‘no’ Hayır (‘no’)
is_assigned then teamA.id else teamB.id takım kimliği A, eğer is_assigned doğruysa
true ? ‘yes’ : ‘no’ Evet (‘yes’)
!true ? ‘yes’ : ‘no’ Hayır (‘no’)
is_assigned ? teamA.id : teamB.id takım kimliği A, eğer is_assigned doğruysa

Dizelerin enterpolasyonu

İfadeler içinde ifadeler kullanılabilir. Ancak bir ifade yalnızca daha önce tanımlanmışsa kullanılabilir, bu nedenle ifadelerin sırası önemlidir. Aşağıdaki örnek çalışır, çünkü "note" ifadesi "hello_note" ifadesinde kullanılmadan önce tanımlanmıştır:

  • note: notes[last]
  • hello_note: “hello {{note}}”

İfadelerin sırasını, her ifadenin başka bir ifadede kullanılmadan önce tanımlanmasını sağlamak için yukarı veya aşağı sürükleyerek değiştirebilirsiniz.

Kural düzenleyici ipuçları

Kural düzenleyici, sunucu meta verilerinden fonksiyonların, operatörlerin, önceden tanımlanmış değerlerin, türlerin ve izin verilen alanların listelerini alır. Bu nedenle, ipuçlarındaki fonksiyon adları sunucu sabitlerine karşılık gelir: eğer bir fonksiyon array_functions, string_functions, number_functions, date_time_functions veya calendar_functions içinde varsa, editör onu ifadenin uygun bir yerinde gösterebilir.

İpuçları, belirli bir geçerli değer türüne bağlıdır:

  • dizi fonksiyonları yalnızca koleksiyon değerleri için gösterilir;
  • dize fonksiyonları yalnızca dizeler için;
  • sayısal fonksiyonlar yalnızca tam ve kesirli sayılar için;
  • tarih/saat fonksiyonları yalnızca tarih, saat ve olay tarih/saatinin kesin olarak sabitlendiği türler için;
  • takvim fonksiyonları - sadece takvim için;
  • find, find_all, search ve new değerlerin başında gösterilir, eğer geçerli konum aynı tipteki başka bir fonksiyonun içinde değilse;
  • _was için ipuçları, geçerli tipin izin verilen alanlarından oluşturulur ve koleksiyon alanları için gösterilmez.

Bununla birlikte, bazı tutarsızlıklar mevcut olabilir:

Senaryo Sunucu Editör
start_with?(...), end_with?(...), include?(...), exclude?(...) Argüman bir değişken olabilir. Parametrelerin doğrulanması, tırnak içinde bir dize veya split / match? için olduğu gibi bir düzenli ifade alır. Değişken, editör hatası olarak vurgulanabilir.
ljust(uzunluk, yer tutucu), rjust(uzunluk, yer tutucu) İkinci argüman değişken olabilir. İkinci argüman tırnak içinde bir dize olarak kabul edilir.
target_at(başlangıç, süre) İkinci argüman bir değişken veya tam sayı olabilir ve çalışma zamanı değeri tam sayıya dönüştürür. Editör kontrolü ikinci argüman için tam sayı türünü bekler.
find, find_all, search için modeller Çalışma zamanı ayrıca bazı türlerin kullanımını yasaklar: örneğin, find(account, ...) ve find(customer, ...) kullanılamaz. Model adı ipuçları, çalışma zamanının daha sonra reddedeceği türü gösterebilir.
Parametresiz dizi fonksiyonlarında parantezler Parametresiz any?, none?, empty?, count, size, sum, min, max izinlidir; filtre yalnızca bazı fonksiyonlar için izinlidir. Editör, sunucu listesindeki tüm isimleri gösterir. Kullanıcı, filtresiz bir fonksiyona manuel olarak parantez eklerse, vurgulama sunucu verileriyle uyuşmayabilir.

Böylece, fonksiyon adlarına göre editör ipuçları sunucuyla senkronize edilmiştir, ancak editör tüm argüman seçenekleri için tam bir kopya değildir. Bir anlaşmazlık durumunda, gerçeğin kaynağı sunucu ve ifade çalışma zamanı düğümleri olmaya devam eder.