FlowState
FlowState akışla ilgili durumu gösteren kısımdır.
- FlowState 0 durumunda akış beklemededir.
- FlowState 1 durumunda akışın işlemde olduğunu ve son kullanıcının kararına göre olumlu olduğunu anlıyoruz.
- FlowState 2 durumunda son kullanıcıya giden seçeneklerden olumsuz olanın seçildiğini gözlemleyebiliriz.
- FlowState 4 durumunda ise onay için gönderilen bildirinin “veya” ile bağlı birden fazla kişiye gittikten sonra biri onay veya red verince diğerleri adına sistemde işlem yapıldığını belirtir.
FlowProses
FlowProses ilgili işlemlerin kodudur. Kodların açıklamaları bu şekildedir;
- a1 = Start
- a2 = End
- a4 = Formula
- a7 = Create Document
- a13 = Find User
- a17 = Send Email
- a22 = SubFlow
- a23 = Send Approval
- a26 = DbQuery
Onay Durumunu ve akış raporu için listede raporlanabilecek bir sorgu örneği aşağıdaki gibidir.
SELECT tableDetail.UserTableID,
tableDetail.DocNo,
tableDetail.CreateUser,
tableDetail.CreateDate,
tableDetail.Defination,
CASE WHEN MAX(FlowState)=1 THEN ‘Approved’
WHEN MAX(FlowState)=2 THEN ‘Rejected’
ELSE ‘Pending’ END AS FlowStatusFROM TABLO_ADI AS tableDetail WITH (NOLOCK)
LEFT JOIN XPODA_WORK_FLOWS on FlowDocumentID = UserTableID AND FlowProjectID = ProjectID
WHERE FlowProses = 'a23' AND FlowState in (0,1,2) and FlowUserID!=’$PActiveUser$’
Eğer birden fazla kişinin onayına gittiği durumlar varsa durum alanı için select sonucunun kayıt kopyalamaması için group by ifadesi eklenebilir. Yukarıdaki örnekte bunun yerine Aktif kullanıcının onayından geçen kayıtlar sorguda filtrelenmiştir. FlowUserID kaldırılıp group by eklenirse tüm kullanıcıların onay durumu görünür.
/*group by*/
GROUP BY tableDetail.UserTableID,
tableDetail.DocNo,
tableDetail.CreateUser,
tableDetail.CreateDate,
tableDetail.Defination
Birden fazla onay süreci için FlowItemText =’Yönetici Onayı’ gibi belirli bir onayın akış durum bilgisi görüntülenebilir.
- Akışın başlayıp başlamadığını kontrol etmek için FlowDocumentID ve FlowProjectID kayıtlarını çekebileceğimiz bir sorgu yazdığımızda sorgumuz sonucu gelen kayıtlar bize akışın var olduğunu ve başladığını göstermektedir. Örnek sorgu şu şekildedir.
SELECT CASE WHEN exists(
SELECT * FROM XPODA_WORK_FLOWS
WHERE FlowDocumentID = '$PUserTableID' and FlowProjectID= TABLO_ADI.ProjectID)
THEN 0 ELSE 1 END
Not: Akış her zaman ProjectID ve UserTableID alanlarıyla birlikte kontrol edilmelidir. Her proje için 1 akış eklenebildiği için her formun akışını ayırt edebilmek için bu 2 alanı join sorgularında veya validation’larda birlikte kullanmak gerekir.
Not: Formdaki kayıtlı verinin akışını kontrol etmek için $P kullanabiliriz.