Baza danych procesów
Procesy działają w oparciu o własne tabele w bazie danych biznesowych – transakcje tworzone przez maszynę stanów obejmują dane biznesowe przetwarzane przez operacje w procesie oraz persystencję. Pozostałe dane (aktywacja, moniotorwanie i lockowanie, tracking, zadania) związane z procesami zapisywane są odrębnymi transakcjami. Szczegółowe informacje dotyczące danych przechowywanych w konkretnych kolumnach wymienionych poniżej tabel można znaleźć w opisach tych kolumn w bazie danych. Instancje procesów w bazie danych identyfikowane są przez identyfikator typu uniqueidentifier.
Aktywacja, monitorowanie i lockowanie
WORKFLOW_ACTIVATION_REQUEST– zawiera dane związane z aktywacją (zleceniem utworzenia instancji procesu) takie jak wersja definicji procesu, parametry wejściowe, kontekst uruchomienia (instancja rodzica, właściciel i host, typ uruchomienia InProc/Remote, itp.)WORKFLOW_MONITOR– zawiera dane związane z monitorowaniem i blokowaniem instancji takie jak status, data blokady, pieczęć wątku wykonawcy, wyjątek, operacja wyjątku itp.
Persystencja
WORKFLOW_INSTANCE– zawiera informacje o stanie procesu takie jak nazwa stanu, wartości zmiennych procesu (w postaci XML oraz danych identyfikujących powiązane dane biznesowe, identyfikator aktora itp.). Dane w tej tabeli zapisywane są w transakcji głównej procesu dedykowanej dla kolejnych operacji wykonywanych pomiędzy stanami.WORKFLOW_DEFINITION_SNAPSHOT– zawiera migawki (snapshoty) definicji uruchamianych procesów.
Tracking
WORKFLOW_TRACKING– zawiera informacje o wszystkich zdarzeniach mających miejsce podczas wykonywania procesu (rozpoczęcie, zakończenie procesu, operacji, wyjątki, przejścia, akcje sterujące z zewnątrz, itp.)WORKFLOW_TRACKING_DATA– zawiera dodatkowe, szczegółowe informacje zapisywane podczas wykonywania operacji takie jak dane wejściowe, wyjściowe, zmienne, błędy
Zadania, NLB
WORKFLOW_WORKER_TASK– tabela dedykowana dla potrzeb przesyłania zadań do wykonania przez usługę Workflow.HostWORKFLO\_COMPONENT– tabela zawierająca listę komponentów w infrastrukturze NLB Workflow
Oprócz powyższych tabel w bazie danych zostały utworzone widoki ułatwiające wgląd w dane o procesach:
- Słowniki (widoki przedstawiające liczbowo zapisane wartości statusów, typów itd. w formie przyjaznej)
-
vwActivationStatus– statusy aktywacji procesu -
vwComponentType– typy komponentów w infrastrukturze NLB Workflow -
vwExecutionStatus– statusy procesu w monitorze i w operacji trackingu -
vwInvokeType– typy aktywacji procesu -
vwTaskPriority– priorytety zadań -
vwTaskStatus– statusy zadań -
vwTaskType– typy zadań
- Aktywacja, monitorowanie i lockowanie
vwWorkflowActivationRequest– widok na tabelę aktywacji z dołączonymi słownikamivwWorkflowMonitor– widok na tabelę monitora z dołączonymi słownikami
- Persystencja
vwWorkflowInstance– widok na tabelę persystencji z dołączonymi słownikamivwWorkflowInstanceData- widok na tabelę persystencji z dołączonymi słownikami oraz z wartościami sperzystowanych zmiennych w XML w postaci tabelarycznejvwWorkflowDefinitionSnapshot– widok na tabelę snapshot z definicją w formie XML
- Tracking
vwWorkflowTracking– widok na tabelę trackingu z dołączonymi słownikamivwWorkflowTrackingData– widok na tabelę trackingu z dołączonymi słownikami i danymi szczegółowymivwWorkflowEvents– widok prezentujący zdarzenia w trackingu dotyczące całego procesuvwWorkflowOperations– widok prezentujący zdarzenia w trackingu dotyczące poszczególnych operacji w procesievwWorkflowExecutions– widok prezentujący zdarzenia w procesie z podziałem na iteracje
- Zadania, NLB
vwWorkflowWorkerTask- widok na tabelę zadań z dołączonymi słownikamivwWorkflowComponent- widok na tabelę komponentów z dołączonymi słownikami
- Statystyki
vwWorkflowStatistics– widok prezentujący statystyki ilościowe procesów w formie tabelarycznej z podziałem na typy procesu, typy aktywacji i statusy procesuvwWorkflowActivationStatistics– widok prezentujący statystyki ilościowe aktywacji procesów w formie tabelarycznej z podziałem na typy procesu, typy aktywacji i statusy aktywacji

Procedury bazodanowe
Procesy udostępniają szereg procedur składowanych, które pozwalają w łatwy sposób zarządzać pojedynczymi instancjami procesów jak i wykonywać na nich operacje masowe. Procedury, których zadaniem jest zmiana statusu pojedynczego procesu zwracają informację o powodzeniu wykonania danej akcji w postaci informacji o nowym statusie lub w przypadku niepowodzenia zwracają aktualny status procesu (lub NULL jeśli podano nieistniejący identyfikator instancji).
Dostępne procedury:
[dbo].[AbortWorkflowInstance] - Przerywanie procesu (możliwe w statusach Created, Idle, Running, Stopping). Procedura zwraca status instancji po zmianie:
- (Created,Idle) => Aborted
- (Running, Stopping) => Aborting
- (Inny) => (Inny)
- Proces nie istnieje => NULL
DECLARE @WorkflowInstanceId uniqueidentifier
-- TODO: Set parameter values here.
EXECUTE [dbo].[AbortWorkflowInstance]
@WorkflowInstanceId
GO
[dbo].[StopWorkflowInstance] - Zatrzymywanie procesu (możliwe w statusach Created, Idle, Running). Procedura zwraca status instancji po zmianie:
- (Created,Idle) => Stopped
- (Running) => Stopping
- (Inny) => (Inny)
- Proces nie istnieje => NULL
DECLARE @WorkflowInstanceId uniqueidentifier
-- TODO: Set parameter values here.
EXECUTE [dbo].[StopWorkflowInstance]
@WorkflowInstanceId
GO
[dbo].[DestroyWorkflowInstance] - Niszczenie procesu (możliwe w statusach Completed, Exception, Stopped, Aborted). Procedura zwraca:
- 1 – Proces usunięty całkowicie
- 0 – Proces nie istnieje lub nie został usunięty
DECLARE @WorkflowInstanceId uniqueidentifier
-- TODO: Set parameter values here.
EXECUTE [dbo].[DestroyWorkflowInstance]
@WorkflowInstanceId
GO
[dbo].[RestartWorkflowInstance] - Restartowanie procesu (możliwe w statusach Exception, Stopped, Aborted). Procedura zwraca status instancji po zmianie:
- (Exception, Stopped, Aborted) => Created
- (Inny) => NULL
- Proces nie istnieje => NULL
DECLARE @WorkflowInstanceId uniqueidentifier
DECLARE @Data nvarchar(max) -- parametry wejściowe procesu
-- TODO: Set parameter values here.
EXECUTE [dbo].[RestartWorkflowInstance]
@WorkflowInstanceId
,@Data
GO
[dbo].[ResumeWorkflowInstance] - Wznawianie procesu bez zmiany stanu (możliwe w statusach Exception, Stopped, Aborted). Procedura zwraca status instancji po zmianie:
- (Exception,Stopped,Aborted) => Idle (lub Created jeśli proces nie ma ustawionego stanu – np. wystąpił wyjątek przed pierwszym zatwierdzeniem transakcji)
- (Inny) => NULL
- Proces nie istnieje => NULL
DECLARE @WorkflowInstanceId uniqueidentifier
DECLARE @State varchar(8000) –- stan procesu po wzbudzeniu
DECLARE @WorkerStamp varchar(255)
-- TODO: Set parameter values here.
EXECUTE [dbo].[ResumeWorkflowInstance]
@WorkflowInstanceId
,@State OUTPUT
,@WorkerStamp OUTPUT
GO
[dbo].[ResumeWorkflowInstanceAt] - Wznawianie procesu połączone ze zmianą stanu na inny (możliwe w statusach Exception, Stopped, Aborted). Procedura zwraca status instancji po zmianie:
- (Exception, Stopped, Aborted) => Idle
- (Inny) => NULL
- Proces nie istnieje => NULL
DECLARE @WorkflowInstanceId uniqueidentifier
DECLARE @State varchar(8000) –- stan procesu po wznowieniu
DECLARE @Data nvarchar(max) –- wartości zmiennych procesu po wznowieniu
DECLARE @PrimaryDataElementId int –- id elementu danych na których proces będzie działał po wznowieniu
DECLARE @PrimaryDataElementTable varchar(128) –- tabela danych biznesowych na których proces będzie działał po wznowieniu
DECLARE @PrimaryDataElementVersionId uniqueidentifier –- struktura danych biznesowych na których proces będzie działał po wznowieniu
DECLARE @FormId uniqueidentifier –- identyfikator wersji formularza podglądu procesu dla stanu procesu po wznowieniu
DECLARE @UserId varchar(64) –- identyfikator wykonawcy procesu po wznowieniu (aktora, który może dokonać wzbudzenia)
DECLARE @NextTimer datetime –- w przypadku wznawiania w stanie z wyjściem czasowym określa datę i czas samoczynnego wzbudzenia procesu
DECLARE @PreviousState varchar(8000) –- stan procesu przed wznowieniem
DECLARE @WorkerStamp varchar(255) –- pieczęć procesu przed wznowieniem
-- TODO: Set parameter values here.
EXECUTE [dbo].[ResumeWorkflowInstanceAt]
@WorkflowInstanceId
,@State
,@Data
,@PrimaryDataElementId
,@PrimaryDataElementTable
,@PrimaryDataElementVersionId
,@FormId
,@UserId
,@NextTimer
,@PreviousState OUTPUT
,@WorkerStamp OUTPUT
GO
[dbo].[UpdateWorkflowInstance] - Aktualizacja definicji działającego procesu (możliwe w statusach Exception, Stopped, Aborted). Procedura zwraca:
- Przekazaną wartość @TypeId – aktualizacja powiodła się
- NULL – proces nie istnieje, ma niewłaściwy status lub aktualną definicję
DECLARE @WorkflowInstanceId uniqueidentifier
DECLARE @TypeId uniqueidentifier –- identyfikator docelowego snapshota procesu
-- TODO: Set parameter values here.
EXECUTE [dbo].[UpdateWorkflowInstance]
@WorkflowInstanceId
,@TypeId
GO
W przypadku aktualizacji definicji działającego procesu wymagane jest utworzenie nowego snapshota procesu (w przypadku aktualizacji wielu procesów tego samego typu procedurę wystarczy wywołać jeden raz) w bazie danych – służy do tego procedura przedstawiona poniżej.
DECLARE @VersionId uniqueidentifier
DECLARE @WorkflowDefinition nvarchar(max)
DECLARE @Id uniqueidentifier
-- TODO: Set parameter values here.
EXECUTE [dbo].[InsertWorkflowSnapshot]
@VersionId –- identyfikator wersji procesu
,@WorkflowDefinition –- nowa definicja XML procesu
,@Id OUTPUT –- identyfikator utworzonego (istniejącego jeśli zgodne wersja i definicja XML) snapshota procesu
GO
[dbo].[UpdateWorkflowUser] - Ustawianie wykonawcy procesu (możliwe w statusie Idle). Procedura zwraca:
- Przekazaną wartość @UserId – ustawienie powiodło się
- NULL – proces nie istnieje, ma niewłaściwy status lub tego samego wykonawcę, innego wykonawcę a flaga @Reassign = 0 lub nie ma ustawionego wykonawcy a flaga @Reassing = 1
DECLARE @WorkflowInstanceId uniqueidentifier
DECLARE @WorkerStamp varchar(255) –- migawka aktualna procesu
DECLARE @CurrentState varchar(8000) –- aktualny stan procesu
DECLARE @DecisionMakerId varchar(64) –- identyfikator użytkownika ustawiającego wykonawcę procesu
DECLARE @UserId varchar(64) –- identyfikator użytkownika, który może zostać wykonawcą procesu
DECLARE @Reassign bit –- flaga określająca czy mamy do czynienia ze zmianą (1) przypisanego wcześniej wykonawcy czy z ustawieniem nowego (0)
-- TODO: Set parameter values here.
EXECUTE [dbo].[UpdateWorkflowUser]
@WorkflowInstanceId
,@WorkerStamp
,@CurrentState
,@DecisionMakerId
,@UserId
,@Reassign
GO
[dbo].[ClearWorkflowUser] - Usuwanie wykonawcy procesu (możliwe w statusie Idle). Procedura zwraca:
- Ustawionego wcześniej wykonawcę – usunięcie powiodło się
- NULL – proces nie istnieje, ma niewłaściwy status lub wykonawca nie był ustawiony
DECLARE @WorkflowInstanceId uniqueidentifier
DECLARE @WorkerStamp varchar(255) –- migawka aktualna procesu
DECLARE @CurrentState varchar(8000) –- aktualny stan procesu
DECLARE @DecisionMakerId varchar(64) –- identyfikator użytkownika usuwającego ograniczenie wykonującego proces
-- TODO: Set parameter values here.
EXECUTE [dbo].[ClearWorkflowUser]
@WorkflowInstanceId
,@WorkerStamp
,@CurrentState
,@DecisionMakerId
GO
