Ana içeriğe geç

Workflow

Workflow, vNext platformunda iş süreçlerini modelleyen ana definable unit'tir. JSON formatında tanımlanır ve vnext-schema üzerinden doğrulanır.

Schema: vnext-schema/workflow-definition.schema.json

Tanım JSON Örneği

Schema: workflow-definition.schema.json

{
"key": "account-opening",
"flow": "sys-flows",
"flowVersion": "1.0.0",
"domain": "banking",
"version": "1.0.0",
"tags": ["banking", "account", "onboarding"],
"_comment": "Hesap açma iş akışı",
"attributes": {
"type": "F",
"labels": [
{ "label": "Account Opening", "language": "en-US" },
{ "label": "Hesap Açma", "language": "tr-TR" }
],
"schema": {
"schema": {
"key": "account-master-schema",
"domain": "banking",
"flow": "sys-schemas",
"version": "1.0.0"
}
},
"startTransition": {
"key": "start",
"target": "account-type-selection",
"triggerType": 0,
"versionStrategy": "Minor",
"labels": [
{ "label": "Start", "language": "en-US" },
{ "label": "Başlat", "language": "tr-TR" }
],
"schema": {
"key": "start-schema",
"domain": "banking",
"flow": "sys-schemas",
"version": "1.0.0"
},
"mapping": null
},
"states": [
{
"key": "account-type-selection",
"stateType": 1,
"versionStrategy": "Minor",
"labels": [
{ "label": "Account Type Selection", "language": "en-US" },
{ "label": "Hesap Türü Seçimi", "language": "tr-TR" }
],
"view": {
"view": {
"key": "account-type-selection-view",
"domain": "banking",
"flow": "sys-views",
"version": "1.0.0"
},
"loadData": false
},
"transitions": [
{
"key": "select-demand-deposit",
"target": "account-detail",
"triggerType": 0,
"versionStrategy": "Minor",
"labels": [
{ "label": "Select Demand Deposit", "language": "en-US" },
{ "label": "Vadesiz Hesap Seç", "language": "tr-TR" }
],
"schema": {
"key": "demand-deposit-schema",
"domain": "banking",
"flow": "sys-schemas",
"version": "1.0.0"
},
"mapping": {
"location": "./src/SelectDemandDepositMapping.csx",
"code": "<BASE64_ENCODED_CODE>"
},
"view": null,
"rule": null,
"timer": null
}
]
},
{
"key": "account-detail",
"stateType": 2,
"versionStrategy": "Minor",
"labels": [
{ "label": "Account Detail", "language": "en-US" },
{ "label": "Hesap Detay", "language": "tr-TR" }
],
"view": {
"view": {
"key": "account-detail-view",
"domain": "banking",
"flow": "sys-views",
"version": "1.0.0"
},
"loadData": true,
"extensions": ["extension-customer-detail"]
},
"transitions": [
{
"key": "complete-account",
"target": "completed",
"triggerType": 0,
"versionStrategy": "Minor",
"labels": [
{ "label": "Complete", "language": "en-US" },
{ "label": "Tamamla", "language": "tr-TR" }
],
"onExecutionTasks": [
{
"order": 1,
"task": {
"key": "create-account",
"domain": "banking",
"flow": "sys-tasks",
"version": "1.0.0"
},
"mapping": {
"location": "./src/CreateAccountMapping.csx",
"code": "<BASE64_ENCODED_CODE>"
}
}
],
"mapping": null,
"schema": null,
"view": null,
"rule": null,
"timer": null
}
]
},
{
"key": "completed",
"stateType": 3,
"subType": 1,
"versionStrategy": "None",
"labels": [
{ "label": "Completed", "language": "en-US" },
{ "label": "Tamamlandı", "language": "tr-TR" }
]
}
],
"cancel": {
"key": "cancel-account-opening",
"target": "cancelled",
"triggerType": 0,
"versionStrategy": "None",
"labels": [
{ "label": "Cancel", "language": "en-US" },
{ "label": "İptal", "language": "tr-TR" }
]
},
"timeout": {
"key": "account-opening-timeout",
"target": "timed-out",
"versionStrategy": "None",
"timer": {
"reset": "None",
"duration": "PT30M"
}
},
"functions": [
{
"key": "function-get-customer-detail",
"domain": "core",
"flow": "sys-functions",
"version": "1.0.0"
}
],
"extensions": [
{
"key": "extension-customer-detail",
"domain": "core",
"flow": "sys-extensions",
"version": "1.0.0"
}
],
"queryRoles": [
{ "role": "account-officer", "grant": "allow" },
{ "role": "guest", "grant": "deny" }
]
}
}

Workflow Türleri

KodTürAçıklamaTipik Kullanım
CCorePlatform çekirdek iş akışlarıSistem işlemleri, platform servisleri
FFlowAna iş akışlarıİşletme ana süreçleri, kullanıcı etkileşimi
SSubFlowAlt iş akışlarıTekrar kullanılabilir süreç parçaları
PSubProcessAlt süreçlerParalel ve bağımsız işlemler (fire-and-forget)

Properties

Top-Level Alanlar

AlanTipZorunluPattern / KısıtAçıklama
$schemastringHayırJSON Schema referansı
keystringEvet^[a-z0-9-]+$Workflow'un benzersiz tanımlayıcısı (domain içinde unique)
flowstringEvet^[a-z0-9-]+$Kategorize amaçlı flow ismi
flowVersionstringEvet^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$Flow versiyonu (SemVer)
domainstringEvet^[a-z0-9-]+$Workflow'un ait olduğu domain
versionstringEvet^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$Workflow tanım versiyonu (SemVer)
tagsstring[]EvetEtiketler — sorgu/filtre için
_commentstringHayırAçıklama / yorum
attributesobjectEvetWorkflow'un asıl tanımı (aşağıda)

attributes Alanları

AlanTipZorunluAçıklama
typestringEvetWorkflow türü: C, F, S, P (yukarıdaki tür tablosu)
statesarrayEvetState listesi. Tam olarak bir Initial state (stateType: 1) içermelidir
startTransitionobjectEvetBaşlangıç transition tanımı (aşağıda)
labelsarrayEvetÇoklu dil etiketleri (minItems: 1). Her öğe: label + language
schemaobjectHayırMaster schema referansı. schema.schema ile reference objesi içerir
timeoutobject | nullHayırWorkflow seviyesi timeout tanımı (aşağıda)
functionsarrayHayırWorkflow'da kullanılan function referansları
featuresarrayHayırWorkflow'da kullanılan feature (extension) referansları
extensionsarrayHayırWorkflow'da kullanılan extension referansları
sharedTransitionsarrayHayırBirden fazla state'den erişilebilen ortak transition'lar (aşağıda)
errorBoundaryobject | nullHayırGlobal hata yönetim tanımı (aşağıda)
cancelobject | nullHayırCancel transition tanımı. Yalnızca triggerType: 0 (manual)
exitobject | nullHayırExit transition tanımı. Yalnızca triggerType: 0 (manual)
updateDataobject | nullHayırUpdate data transition. target her zaman $self
queryRolesarrayHayırRoot-level sorgu rolleri. DENY her zaman ALLOW'u geçersiz kılar

Reference Yapısı

Workflow tanımı içinde birçok yerde kullanılan genel referans objesidir. İki formdan biri kullanılır:

FormZorunlu AlanlarAçıklama
Explicitkey, domain, flow, versionDoğrudan bileşen referansı
RefrefDosya yolu ile bileşen referansı

State Yapısı

State Alanları

AlanTipZorunluAçıklama
keystringEvetState benzersiz tanımlayıcısı (pattern: ^[a-z0-9-]+$)
stateTypeintegerEvetState tipi — aşağıdaki enum tablosuna bakın
subTypeintegerHayırState alt tipi — aşağıdaki enum tablosuna bakın. Varsayılan: 0
versionStrategystringEvetVersiyon stratejisi: None, Patch, Minor, Major
labelsarrayEvetÇoklu dil etiketleri (minItems: 1)
viewobject | nullHayırState view tanımı: view (reference), loadData (boolean), extensions (string[])
subFlowobject | nullHayırSubFlow state için alt akış tanımı: type (S/P), process (reference), mapping
transitionsarrayHayırBu state'den çıkan transition'lar. Wizard state (stateType: 5) için maxItems: 1
onEntriesarrayHayırState'e girildiğinde çalıştırılacak task'lar
onExitsarrayHayırState'den çıkılırken çalıştırılacak task'lar
errorBoundaryobject | nullHayırState seviyesi hata yönetimi
queryRolesarrayHayırState seviyesi sorgu rolleri. Root queryRoles'u override eder

stateType Enum Değerleri

DeğerAdAçıklama
1InitialBaşlangıç state'i. Workflow'da tam olarak bir tane olmalıdır
2IntermediateAra state
3FinalBitiş state'i
4SubFlowAlt akış çağıran state
5WizardWizard (sihirbaz) state. En fazla 1 transition'a sahip olabilir

stateSubType Enum Değerleri

DeğerAdAçıklama
0NoneBelirli bir alt tip yok (varsayılan)
1SuccessBaşarılı tamamlanma
2ErrorHata durumu
3TerminatedManuel sonlandırılmış
4SuspendedGeçici askıya alınmış
5BusyMeşgul
6Humanİnsan müdahalesi gerektiren

State Yaşam Döngüsü

State machine aşağıdaki yaşam döngüsünü takip eder:

Yaşam Döngüsü Adımları

  1. State Policy Kontrolleri

    • State'de tanımlı transition'lar kontrol edilir
    • Client sadece manuel ve event transition'ları tetikleyebilir
    • Auto ve schedule transition'lar sadece sistem tarafından çalıştırılır
  2. Current Transition OnExecutionTasks

    • Mevcut transition'ın OnExecutionTask'ları çalıştırılır
  3. Current State OnExits

    • Mevcut state'in OnExit task'ları çalıştırılır
  4. State Değişimi

    • Current Transition'ın target state'ine geçiş yapılır
    • State değişimi sadece transition'lar üzerinden gerçekleşir
  5. State OnEntries

    • Yeni state'in OnEntry task'ları çalıştırılır
  6. State Tipi Kontrolü

    • Finish: Instance durumu "Completed" olarak güncellenir
    • SubFlow: Sadece SubFlow çalıştırılır
  7. Auto Transition'lar

    • Otomatik transition'lar çalıştırılır
  8. Schedule Transition'lar

    • Zamanlanmış transition'lar çalıştırılır

Transition Yapısı

Transition Alanları

AlanTipZorunluAçıklama
keystringEvetTransition benzersiz tanımlayıcısı (pattern: ^[a-z0-9-]+$)
targetstringEvetHedef state key'i. $self veya bir state key (pattern: ^(\$self|[a-z0-9-]+)$)
fromstringHayırKaynak state key'i
triggerTypeintegerEvetTetikleme tipi — aşağıdaki enum tablosuna bakın
triggerKindintegerHayırOtomatik transition alt tipi. Varsayılan: 0
versionStrategystringEvetNone, Patch, Minor, Major
labelsarrayEvetÇoklu dil etiketleri (minItems: 1)
schemaobject | nullHayırTransition schema referansı (request body validation)
ruleobject | nullKoşulluKural betiği. triggerType: 1 (auto) ise zorunlu (triggerKind 10 hariç)
timerobject | nullKoşulluTimer betiği. triggerType: 2 (scheduled) ise zorunlu
viewobject | nullHayırTransition view tanımı. Yalnızca triggerType: 0 (manual) için geçerli
onExecutionTasksarrayHayırTransition sırasında çalıştırılacak task listesi
mappingobject | nullHayırTransition input mapping betiği
rolesarrayHayırYetkilendirme rolleri. DENY her zaman ALLOW'u geçersiz kılar
annotations Newobject | nullHayırClient-side filtreleme ve UI bağlamı için key-value metadata. Platform annotations değerlerini yorumlamaz (passthrough). Çakışmaları önlemek için namespace'li key'ler kullanın (örn. ui/visible-in, ui/priority)

triggerType Enum Değerleri

DeğerAdAçıklamaZorunlu Alanlar
0ManualKullanıcı tarafından tetiklenir
1AutomaticOtomatik tetiklenirrule zorunlu (triggerKind: 10 hariç)
2ScheduledZamanlayıcı ile tetiklenirtimer zorunlu
3EventOlay ile tetiklenir

triggerKind Enum Değerleri

DeğerAdAçıklama
0Not applicableUygulanmaz (varsayılan)
10Default autoVarsayılan otomatik transition (rule opsiyonel)

versionStrategy Enum Değerleri

DeğerAçıklama
NoneVersiyon güncellemesi yok
PatchPatch versiyon artırımı
MinorMinor versiyon artırımı
MajorMajor versiyon artırımı

Annotations

annotations alanı, platform tarafından yorumlanmayan serbest key-value metadata'dır. UI SDK'ları ve istemci uygulamaları transition'ları filtrelemek, gruplamak veya koşullu render etmek için kullanır. Çakışmaları önlemek için namespace'li key'ler kullanılması önerilir.

Tanımlı Key'ler

KeyTipAçıklama
ui/visibility-channelstringPipe (|) ile ayrılmış kanal listesi. Yalnızca belirtilen kanallarda gösterilir
ui/priorityinteger (string)Sıralama önceliği. Düşük değer = yüksek öncelik
ui/intentstringGörsel davranış ipucu

ui/visibility-channel Değerleri

DeğerKanal
IbWebİnternet Bankacılığı
backofficeBackoffice
IbIvnAppCall Center

ui/intent Değerleri

DeğerAçıklama
cancelİptal aksiyonu
destructiveGeri alınamaz / yıkıcı aksiyon
closeEkran veya modal kapatma
confirmOnay gerektiren aksiyon

Örnek

"annotations": {
"ui/visibility-channel": "IbIvnApp|backoffice",
"ui/priority": "1",
"ui/intent": "cancel"
}

StartTransition Yapısı

AlanTipZorunluAçıklama
keystringEvetTransition key'i
targetstringEvetHedef state (Initial state olmalı)
triggerTypeintegerEvetSabit: 0 (yalnızca manual)
versionStrategystringEvetNone, Patch, Minor, Major
labelsarrayEvetÇoklu dil etiketleri
schemaobject | nullHayırStart request body validation schema'sı
onExecutionTasksarrayHayırBaşlangıçta çalıştırılacak task'lar
mappingobject | nullHayırInput mapping betiği
rolesarrayHayırYetkilendirme rolleri
annotations Newobject | nullHayırClient-side filtreleme ve UI bağlamı için key-value metadata (passthrough)

Özel Transition'lar

Cancel Transition

AlanTipZorunluAçıklama
keystringEvetCancel transition key'i
targetstringEvetHedef state (iptal state'i)
triggerTypeintegerEvetSabit: 0 (yalnızca manual)
versionStrategystringEvetVersiyon stratejisi
labelsarrayEvetÇoklu dil etiketleri
availableInstring[]HayırCancel'ın geçerli olduğu state'ler
view, schema, mapping, onExecutionTasks, rolesHayırStandart transition alanları
annotations Newobject | nullHayırClient-side filtreleme ve UI bağlamı için key-value metadata (passthrough)

Alt akışları varsa onlara da cancel bildirisi yayınlar. Alt akışlarda cancel tanımı yoksa bypass edilir.

Exit Transition

Cancel ile aynı yapıda. Client implementasyonlarında ekran çıkışları veya ekrandan ayrılma durumlarında aktif instance'ları sonlandırır.

Update Data Transition

Cancel ile aynı yapıda, tek fark: target her zaman $self olmalıdır. Alt akışlardan üst akış data'sını ara bloklarda güncellemek için kullanılır.

Shared Transitions

Birden fazla state'den erişilebilen ortak transition'lardır. Standart transition alanlarına ek olarak:

AlanTipZorunluAçıklama
availableIn Newstring[]HayırTransition'ın geçerli olduğu state key'leri. Tanımlanmazsa tüm state'lerden erişilebilir
annotations Newobject | nullHayırClient-side filtreleme ve UI bağlamı için key-value metadata (passthrough)

Timeout Yapısı

AlanTipZorunluAçıklama
keystringEvetTimeout tanımlayıcısı
targetstringEvetTimeout durumunda hedef state
versionStrategystringEvetVersiyon stratejisi
timerobjectEvetreset (string) + duration (ISO 8601, örn. PT30M)
mappingobject | nullHayırDinamik timeout hesaplama betiği. Başarısız olursa statik timer.duration kullanılır

Error Boundary Yapısı

Workflow (global), state ve task seviyesinde tanımlanabilir. Öncelik sırası: task > state > workflow.

Error Boundary Alanları

AlanTipAçıklama
onErrorarrayHata kuralları listesi. Priority sırasına göre (düşük değer = yüksek öncelik) değerlendirilir
onTimeoutobjectTimeout hatası politikası

onError Kural Yapısı (errorHandlerRule)

AlanTipZorunluAçıklama
actionintegerEvetHata aksiyonu — aşağıdaki enum tablosuna bakın
errorTypesstring[]HayırEşlenecek exception tipleri. * veya boş = tümü
errorCodesstring[]HayırEşlenecek hata kodları (örn. Task:400007, 500)
transitionstringKoşulluTetiklenecek transition key'i. Rollback ve Notify için zorunlu, Abort için yasak
priorityintegerHayırKural önceliği (minimum: 1, varsayılan: 100). Düşük değer = yüksek öncelik
retryPolicyobjectKoşulluRetry konfigürasyonu. action: 1 (Retry) ise zorunlu
logOnlybooleanHayırtrue ise yalnızca log yazar, akışı etkilemez. Varsayılan: false

errorAction Enum Değerleri

DeğerAdAçıklamaKısıtlar
0Abortİşlemi durdurtransition belirtilmemeli
1RetryYeniden deneretryPolicy zorunlu
2RollbackTelafi state'ine döntransition zorunlu
3IgnoreHatayı yoksay, devam et
4NotifyBildirim gönder ve transition yaptransition zorunlu
5LogYalnızca logla, akışı etkilemez

Retry Policy

AlanTipZorunluVarsayılanAçıklama
maxRetriesintegerHayır3Maksimum yeniden deneme sayısı
initialDelaystringEvetİlk deneme öncesi bekleme süresi (ISO 8601, örn. PT5S)
backoffTypeintegerHayır10 = Fixed, 1 = Exponential
backoffMultipliernumberHayır2.0Exponential backoff çarpanı (minimum: 1)
maxDelaystringHayırDenemeler arası maksimum bekleme süresi (ISO 8601)
useJitterbooleanHayırtrueDeneme gecikmesine rastgele jitter eklenip eklenmeyeceği

Diğer Yapılar

MasterSchema

attributes.schema alanı, workflow'un instance data ana yapısını belirler. Gelişmiş filtreleme ve instance data'nın her değişim noktasında tutarlılık kontrolü sağlar. Bkz. Schema component.

Functions ve Extensions

attributes.functions ve attributes.extensions alanları, workflow'a bağlı function ve extension reference listelerini içerir. Her öğe standart reference yapısındadır.

Query Roles

attributes.queryRoles yetkilendirme mekanizmasıdır. Workflow ve instance içindeki state'leri kimlerin sorgulayabileceği bilgisini tutar. State seviyesinde queryRoles tanımlıysa root seviyeyi override eder.

AlanTipZorunluAçıklama
rolestringEvetRol adı
grantstringEvetallow veya deny. DENY her zaman ALLOW'u geçersiz kılar

İlgili