Skip to main content

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:

AyarAçıklama
AutoOpenApprovalOptionOnay ekranının davranışını belirleyen seçenek kodu (bu nesnede Int32, Pozisyon'da Boolean).
DoNotSendRequestIfProcessedKişi belgeyi daha önce işlediyse yeniden istek gönderilmez.
EnableOwnRequestKullanıcının kendi başlattığı isteği onaylamasına izin verilip verilmeyeceği.
RequestIsNecessaryIfDocumentChangedBelge değiştiyse onayın tekrar istenmesini sağlar.
HideApporoverInHistoryOnaycıyı akış geçmişinde gizler (dump'taki yazım bu şekildedir).
ShowInFlowHistoryAdımın akış geçmişinde görünüp görünmeyeceği.
TimeoutDay / TimeoutHour / TimeoutMinuteOnay için süre sınırı.
CalculateUsingHolidays / CalculateUsingWorkingHoursSüre hesabında resmi tatilleri / mesai saatlerini dikkate alır.
EmptyGroupEventIdGrup 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);
note

AddConstantPosition ve AddDepartmentBasedUserGroup metotları arayüz dökümünde mevcuttur; örnek akışlarda kullanımı birebir gözlenmedi. TODO: doğrulanacak.

Tek kişi mi, grup mu?

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ı

  • AddConstantUser bir CSP kullanıcı kimliği (Int64) bekler; datasource'tan gelen sicil/id değerini Convert.ToInt64(...) ile çevirin.
  • Grubu doldurmadan önce ClearGroup() çağırmayı alışkanlık edinin; aksi halde önceki çalışmalardan kalan üyeler birikir.
  • AutoOpenApprovalOption bu nesnede bir seçenek kodudur (Int32), Pozisyon'da ise true/false değeridir. İki nesne arasında bu farkı karıştırmayın.
  • GetUserInfo(...) bu nesnede asenkrondur ve bir ProcessRequestItem parametresi 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ü ve EmptyGroupEventId ile 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.