Nedir?
Form Verisi içerisindeki bir düğümdeki tüm kayıtları tek tek dolaşır.
Sentaks
<ForEach Node="/*/Person/Data/Template"> <Expressions /> </ForEach>
Form Verisi
<Person>
<Template>
<Name></Name>
<Surname></Surname>
<Visit></Visit>
<Aktif></Aktif>
</Template>
<Data>
<Template>
<Name>Ahmet</Name>
<Surname>Yılmaz</Surname>
<Visit>12</Visit>
<Aktif>1</Aktif>
</Template>
<Template>
<Name>Ali</Name>
<Surname>Çelik</Surname>
<Visit>7</Visit>
<Aktif>1</Aktif>
</Template>
</Data>
</Person>
Özellikler
| Adı | Açıklama | |
|---|---|---|
| Node | Hedef form verisi yolunu belirler. XPath alır. |
Örnekler
/*/Person/Data/Template yolu döngüsel olarak gezerek her bir Aktif nodu 0 değerini atama yapar.
Sentaks
<ForEach Node="/*/Person/Data/Template"> <Set Node="./Aktif"> <Value Culture="" Target="Integer">0</Value> </Set> </ForEach>
Süreçlerin aktif WorkItemId lerini Sonlandır aksiyon butonu ile süreci ilerletir.
Süreç ilerletme ile kullanımı
<ForEach Node="TeklifToplamaAltAkisi/SubWorkflows/WorkflowStartInfo">
<ProcessWorkItem Action="Sonlandır">
<WorkItem Type="Waiting" IncludeChildren="False" Instance="">
<Value Culture="" Target="Guid">eval::AktifWorkItemId</Value>
</WorkItem>
</ProcessWorkItem>
</ForEach>
Form verisi içerisinde completedby de bulunan kişileri aralarına ; koyarak Bilgilendirilecekler e ekleyerek atama yapar.
Form verisi içerisindeki kişileri kullanma
<ForEach Node="/*/processingInfo/workItem[not(completedBy = preceding-sibling::workItem/completedBy)]">
<SetVariable Name="$(Bilgilendirilecekler)">
<StringConcat>
<Value>$(Bilgilendirilecekler)</Value>
<Evaluate Target="None" Culture="">completedBy</Evaluate>
<Value>;</Value>
</StringConcat>
</SetVariable>
</ForEach>
Bir üstte bulunan örnek benzer fakat farklı bir concat fonksiyonu kullanılıyor. Ayrıca ForEach Node özelliği içerisinde IsSelected='false' ve ApplyUserId değerleri ile koşul yerleştirilebiliyor.
Koşullu ForEach Döngüsü
<ForEach Node="/*/TeklifToplamaAltAkisi/SubWorkflows/WorkflowStartInfo/TeklifBilgileri[IsSelected='false' and ApplyUserId!='']">
<SetVariable Name="$(OtherBankUserList)">
<Value Culture="" Target="None">eval::concat('$(OtherBankUserList)','$(Prefix)', ApplyUserId)</Value>
</SetVariable>
<SetVariable Name="$(Prefix)">
<Value Culture="" Target="None">;</Value>
</SetVariable>
</ForEach>
TeklifGondermeListesi düğümündeki tüm kayıtları dolaşarak BankUserList düğümünde kayıt varsa, her kayıt için TeklifToplamaAltAkisi adımını başlatır.
Karşılaştırma ile kullanımı
<ForEach Node="/*/TeklifGondermeListesi/Data/Template"> <If> <Then> <Condition> <Greater Equal="False"> <Value Culture="" Target="Integer">eval::./BankUserList/Count</Value> <Value Culture="" Target="Integer">0</Value> </Greater> </Condition> <Perform> <Insert Into="/*/TeklifToplamaAltAkisi/SubWorkflows">::/*/TeklifToplamaAltAkisi/WorkflowStartInfo</Insert> <Set Node="/*/TeklifToplamaAltAkisi/SubWorkflows/WorkflowStartInfo[last()]/TeklifBilgileri/FinancialQuotationId"> <Value Culture="" Target="None">eval::/*/FinancialQuotation/Id</Value> </Set> </Perform> </Then> </If> </ForEach>