8. Görev Sonuçları (Ağ Geçidi Kararları)
Kural: Eğer bir görev bir Özel Ağ Geçidine (Exclusive Gateway) yönlendiriyorsa, bu görevin kararı yakalamak için
enumtüründe bir form özelliğine sahip olması zorunludur.
Neden
- Kullanıcı arayüzü, enum seçeneklerini otomatik olarak radyo düğmeleri (≤4 seçenek) veya açılır liste (>4 seçenek) olarak oluşturur
- Ağ geçidi koşullarını BPMN XML'inden ayrıştırmaya gerek kalmaz
- Seçilen seçenek, ağ geçidinin değerlendirdiği bir süreç değişkeni haline gelir
Tam Örnek
<!-- User Task with Decision Enum -->
<userTask id="managerReview" name="Manager Review" flowable:assignee="manager1@workingflow.com">
<extensionElements>
<activiti:formProperty id="decision" name="Decision" type="enum" required="true">
<activiti:value id="approved" name="Approve Request"/>
<activiti:value id="rejected" name="Reject Request"/>
<activiti:value id="needinfo" name="Need More Information"/>
</activiti:formProperty>
</extensionElements>
</userTask>
<!-- Gateway evaluates the decision variable -->
<exclusiveGateway id="decisionGateway"/>
<sequenceFlow id="flow_approved" sourceRef="decisionGateway" targetRef="approvedTask">
<conditionExpression xsi:type="tFormalExpression">${decision == 'approved'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow_rejected" sourceRef="decisionGateway" targetRef="rejectedTask">
<conditionExpression xsi:type="tFormalExpression">${decision == 'rejected'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow_needinfo" sourceRef="decisionGateway" targetRef="requestInfoTask">
<conditionExpression xsi:type="tFormalExpression">${decision == 'needinfo'}</conditionExpression>
</sequenceFlow>
Desteklenen Ağ Geçidi İfadeleri
Flowable, ifadeleri çalışma zamanında değerlendirir. Hesaplamaları ve karşılaştırmaları, Script/Hizmet Görevlerine (Script/Service Tasks) ihtiyaç duymadan doğrudan ağ geçidi koşullarında kullanabilirsiniz:
| İşlem | Örnek | Açıklama |
|---|---|---|
| Aritmetik | ${quantity * price > 1000} |
Toplama, çıkarma, çarpma, bölme |
| Karşılaştırma | ${total > 100}, ${status == 'approved'} |
Eşittir, eşit değildir, büyüktür/küçüktür |
| Metin Birleştirme (String Concatenation) | ${firstName + ' ' + lastName} |
Metin değerlerini birleştirir |
| Metin Yöntemleri (String Methods) | ${name.startsWith('A')}, ${email.contains('@')} |
Java String metotlarını çağırır |
| Mantıksal İşlemler (Boolean Logic) | ${approved && amount < 5000} |
VE (&&), VEYA (` |
| Tarih Karşılaştırması | ${endDate.after(startDate)}, ${endDate.before(startDate)} |
java.util.Date değerlerini karşılaştırır |
İpucu: Hesaplanan sonuçları önce bir değişkende saklamanıza gerek yoktur; ifadenin tamamını doğrudan
<conditionExpression>içine yazabilirsiniz.