Pozisyon Grubu
Akışta bir adımın birden çok kişi tarafından onaylanmasını sağlayan onay nesnesidir. Akış bu nesneye ulaştığında gruba topladığınız kullanıcılara onay isteği düşer; grubu genellikle çalışma zamanında, nesnenin kendi _Execute kod bloğunda bir datasource sorgusundan doldurursunuz.
Ne zaman kullanılır?
Aynı adımda birden fazla onaycı gerektiğinde kullanın: bir komitenin talebi onaylaması, bir birimin tüm yetkililerinden onay alınması gibi. Onaycı listesi sabit değilse (ör. tutara veya departmana göre değişiyorsa) grubu kod içinde doldurmanız bu nesnenin asıl gücüdür. Tek bir onaycı yeterliyse Pozisyon nesnesini tercih edin.
Ayarlar
Pozisyon Grubu seçildiğinde tasarımcıda şu başlıklar düzenlenir:
| Ayar | Açıklama |
|---|---|
AutoOpenApprovalOption | Onay ekranının davranışını belirleyen seçenek kodu (bu nesnede Int32, Pozisyon'da Boolean). |
DoNotSendRequestIfProcessed | Kişi belgeyi daha önce işlediyse yeniden istek gönderilmez. |
EnableOwnRequest | Kullanıcının kendi başlattığı isteği onaylamasına izin verilip verilmeyeceği. |
RequestIsNecessaryIfDocumentChanged | Belge değiştiyse onayın tekrar istenmesini sağlar. |
HideApporoverInHistory | Onaycıyı akış geçmişinde gizler (dump'taki yazım bu şekildedir). |
ShowInFlowHistory | Adımın akış geçmişinde görünüp görünmeyeceği. |
TimeoutDay / TimeoutHour / TimeoutMinute | Onay için süre sınırı. |
CalculateUsingHolidays / CalculateUsingWorkingHours | Süre hesabında resmi tatilleri / mesai saatlerini dikkate alır. |
EmptyGroupEventId | Grup boş kaldığında tetiklenecek olay kimliği. |
ConflictStateEventId | Çakışma durumunda tetiklenecek olay kimliği. |
Akıştaki yeri
Pozisyon Grubu, akışın ortasında bir bekleme noktasıdır: akış bu adıma geldiğinde grup üyelerine onay isteği gider ve grup karar verene kadar akış burada bekler. Onaycı listesini genellikle bu nesnenin kendi _Execute kod bloğunda doldurursunuz: önce ClearGroup() ile grubu temizler, sonra datasource'tan gelen kullanıcıları AddConstantUser(...) ile eklersiniz.
Kod örnekleri
Grup, akış kodunda nesnenin adıyla doldurulur. Sunucu (akış) kodu turuncu çerçevelidir.
Grubu datasource'tan doldurma
// Önce grubu temizle, sonra onaycıları ekle (genelde grubun _Execute bloğunda)
g_UPM.ClearGroup();
foreach (var sicil in upmSicilleri)
{
g_UPM.AddConstantUser(Convert.ToInt64(sicil));
}
Grup boş kaldıysa kontrol etme
// Hiç onaycı eklenmediyse akışı başka yöne yönlendirebilirsiniz
if (g_UPM.IsEmpty())
{
// TODO: boş grup durumu için yönlendirme/olay
}
Pozisyon ya da departman bazlı ekleme
// Sabit bir pozisyonu gruba ekle
g_UPM.AddConstantPosition(1024, "MUD", "Birim Müdürü");
// Departman + unvan kombinasyonuyla kullanıcı grubu ekle
g_UPM.AddDepartmentBasedUserGroup(departmanId, unvanId);
AddConstantPosition ve AddDepartmentBasedUserGroup metotları arayüz dökümünde mevcuttur; örnek akışlarda kullanımı birebir gözlenmedi. TODO: doğrulanacak.
Aynı adımda birden çok onaycı için Pozisyon Grubu, tek bir onaycı için Pozisyon kullanın. Pozisyon Grubu'nda onaycılar ClearGroup + AddConstantUser ile doldurulur; Pozisyon'da tek kişi SetFromUser ile atanır.
İpuçları
AddConstantUserbir CSP kullanıcı kimliği (Int64) bekler; datasource'tan gelen sicil/id değeriniConvert.ToInt64(...)ile çevirin.- Grubu doldurmadan önce
ClearGroup()çağırmayı alışkanlık edinin; aksi halde önceki çalışmalardan kalan üyeler birikir. AutoOpenApprovalOptionbu nesnede bir seçenek kodudur (Int32), Pozisyon'da isetrue/falsedeğeridir. İki nesne arasında bu farkı karıştırmayın.GetUserInfo(...)bu nesnede asenkrondur ve birProcessRequestItemparametresi alır; Pozisyon'daki eşdeğeri ise senkrondur ve parametresizdir. (İmza dökümde doğrulandı, çalışma zamanı kullanımı örnekle teyit edilmedi. TODO: doğrulanacak.)IsEmpty()ile boş grup kontrolü veEmptyGroupEventIdile yönlendirme dökümde mevcuttur; uçtan uca örnek gözlenmedi. TODO: doğrulanacak.
Doğrulanmış kod arayüzü (FlowGroup)
CLASS Bimser.CSP.Workflow.Api.Steps.FlowGroup : FlowObjectHasMessageOptions<FlowGroupProperties>
Grup doldurma metotları: AddConstantUser(Int64), AddConstantUser(Int64, string userName, string userCode), AddConstantPosition(Int64), AddConstantPosition(Int64, string positionCode, string positionDescription), AddDepartmentBasedUserGroup(Int64 departmentId, Int64 titleId), ClearGroup(), IsEmpty() → Boolean
Okuma: GetUserInfo(ProcessRequestItem) → Task<UserInfo>, Users (List<UserInfo>), Positions (List<UserPosition>)
Üye kaynakları: Members, PositionGroups, TableObjects, DetailObjects
Olay/davranış özellikleri: EmptyGroupEventId, ConflictStateEventId, AutoOpenApprovalOption (Int32), DoNotSendRequestIfProcessed, EnableOwnRequest, HideApporoverInHistory, RequestIsNecessaryIfDocumentChanged, ShowInFlowHistory, Events (salt okunur), EventsToCheck + miras alınan zaman aşımı/mesaj ayarları (TimeoutDay/Hour/Minute, CalculateUsingHolidays/WorkingHours).
Kaynak: synergy-csp references/flow-objects.md (FlowGroup, örnek akışlarla doğrulanmış ClearGroup / AddConstantUser kalıbı) + Bimser.CSP.Workflow.Api.api.txt.