Alt akış kullanımı aynı sürece ait birden fazla paralel kişiye sürecin ulaşması ihtiyacında kullanılır. Alt akışlarda formları kişiler aynı anda açabilir, her bir alt akış üyesi için ana instance den farklı olarak yeni bir instance oluşturulur. Asenkron sistemlerde instance ların numaraları da farklı olur diğer durumlarda aynı numarayı alırlar.
Alt akış designer bölümünde aşağıdaki şekilde sürekleyerek veya sağ tıklayarak ekleme yapıldıktan sonra tipi bölümünden değiştirilebilir.
Modül üzerinde sağ tıklanarak açılan ekranda Yeni seçeneği ile alt akışı oluşturacak sadece o alt akışa özel verilerin saklanacağı form verisi için SubWorkFlows ve WorkFlowStartInfo alanları eklenmiş olur. Dropdown dan yaratılan bölüm seçilir ardından WorkFlowStartInfo bölümü altına alt akışlarda oluşması istenen alan veya bölümler eklenir.
Bu bölümde Adım alanına alt akış olarak çoklanması düşünülen adım ismi verilir. Eğer bir koşula göre yapılacaksa koşul bölümü doldurulur.
Çoklanan akışlarda kilitlenmesi gereken alanlar
Alt akışlarda aynı anda birden fazla kişinin formu güncellemesi için kilitlenecek alanlarda dinamik bir tanımlama gerekiyor. Not girme, onay bilgisi verme, doküman imzalama gibi fonksiyonların aynı anda yapılması gerekiyor. Ayrıca bu alana girdiğiniz dinamik XPath query form verisinde bir yeri bulması gerekiyor, yoksa form verisini hiç güncellemeden süreç ilerliyor.
Standart script yazarken alt akış verisini kullanma
/*/Board/SubWorkflows/WorkflowStartInfo[@Instance=’$(InstanceId)’]
Kilitlenecek alanlar için kullanılması gereken tanım
/formData/Board/SubWorkflows/WorkflowStartInfo[@Instance=$(Instance)]
Alt iş akışları davranış kontrolü
Tüm alt akışlar onaylanınca aksiyon alma veya biri red olunca diğerlerinide kapatarak işlem yapma gibi durumları alt akışın İş Sonrası Script bölümünde kontrol edilmesi gerekmektedir. Alt akışları oluşturma işlemleri ise İş Önceki Script veya daha önceki adımlarda oluşturulabilir.
Bu alt akışlarda alınan aksiyonlar kontrol edilerek bir tane bile Red verilme işlemi varsa alt akışı Red üzerinden ilerletir.
<PostWork Name=""> <If> <Then> <Condition> <Greater Equal="False"> <Count><![CDATA[/*/YeniModul/SubWorkflows/WorkflowStartInfo[Sonuc='Red']]]></Count> <Value Culture="" Target="Integer">0</Value> </Greater> </Condition> <Perform> <Value Culture="" Target="None">Red</Value> </Perform> </Then> <Else> <Condition /> <Perform> <Value Culture="" Target="None">Onayla</Value> </Perform> </Else> </If> </PostWork>
Bu bölümde alt akışta oluşacak çoklu WorkflowStartInfo için bölümler oluşturulur. Aşağıdaki örnekte ForEach ile Direktör bilgileri listesinden direktörler seçilir.
<PreWork Name=""> <Delete Node="YeniModul/SubWorkflows/WorkflowStartInfo" /> <ForEach Node="/*/DirektorBilgileri/Liste/Sablon[@guid!='{00000000-0000-0000-0000-000000000000}']"> <Insert Into="/*/YeniModul/SubWorkflows">::/*/YeniModul/WorkflowStartInfo</Insert> <Set Node="/*/YeniModul/SubWorkflows/WorkflowStartInfo[last()]/Direktor"> <Value Culture="" Target="None">eval::./Direktor</Value> </Set> </ForEach> </PreWork>
$(WorkItemId) değeri o anda oluşan adımın Id sini verir bu değeri daha sonra rapor veya süreçleri sonlandırmak için kullanabiliriz.
<PreWork Name=""> <Set Node="/*/YeniModul/SubWorkflows/WorkflowStartInfo[@Instance='$(InstanceId)']/WorkItemId"> <Value Culture="" Target="None">$(WorkItemId)</Value> </Set> </PreWork>
İlgili alt akış ile ilgili seçilen $(SelectedAction) değeri alınır ve eğer bir kişi Red edince tüm diğer işlerin sonlanarak sürecin red aksiyonuna geçmesi isteniyorsa bu işlemler uygulanır. Diğer adımları WorkItemId ile ilerletir.
<PostWork Name=""> <Set Node="/*/YeniModul/SubWorkflows/WorkflowStartInfo[@Instance='$(InstanceId)']/Sonuc"> <Value Culture="" Target="None">$(SelectedAction)</Value> </Set> <If> <Then> <Condition> <Equals> <Value Culture="" Target="None">Red</Value> <Value Culture="" Target="None">$(SelectedAction)</Value> </Equals> </Condition> <Perform> <ForEach Node="/*/YeniModul/SubWorkflows/WorkflowStartInfo"> <Set Node="Sonuc"> <Value Culture="" Target="None">Red</Value> </Set> <ProcessWorkItem Action="Red"> <WorkItem Type="Waiting" IncludeChildren="False" Instance=""> <Value Culture="" Target="Guid">eval::WorkItemId</Value> </WorkItem> </ProcessWorkItem> </ForEach> </Perform> </Then> </If> </PostWork>
Alt iş akışlarının hata alma durumuna karşı önceden hesaplama yaparak eğer hiç alt akış oluşmayacak ise alt akış adımının atlanması gerekmektedir.
Devam eden bir alt akışın WorkItem durum değeri 4 tür.
Paralel adımlarda farklı verilerin görüntülenmesi için aşağıdaki gibi bir form verisi düzeni oluşturulmalı
Eklenen doldurma düzeni içerisinde Tekrarlayıcı Kontrolü eklemeniz gerekmektedir. Doldurma düzenine tanımlanacak AltAkis form verisi için aşağıdaki şekilde seçimler yapılır. Filtre alanına ise "@Instance=$(Instance)" alanı eklenmelidir.