Windows Workflow Foundation - Korelacja parametrów

Czasami tworząc diagram jest potrzeba uzyskania pewnych informacji lub wykonanie pewnych akcji równolegle wykorzystują np kontrolkę Parallel.



Jak widzimy w tym przypadku chce wykorzystać tę samą funkcjonalność aby uzyskać zgodę na daną płatność od dwóch menedżerów. W obu "gałęziach" diagram jest identyczny. Najpierw uruchamiam metodę ConfirmPayment interfejsu IManagerConfirmService aby uzyskać zgodę a następnie czekam na reakcje ze strony menadżera określone poprzez wywołanie jednego z dwóch zdarzeń.Te dwa diagramy są wykonywane jednocześnie. Więc jeśli w odpowiedzi zostanie uruchomione zdarzenie do którego diagramu zostanie przypisane, jeśli oba czekają na te same zdarzenia ?.
Twórcy WF pomyśleli też o tym. Najpierw musimy ustalić nazwę parametru który będzie służył do rozpoznawania kontekstu. Ustala się go na interfejsie w poprzez użycia atrybutu CorrelationParameter:

[ExternalDataExchange]
[CorrelationParameter("alias")]
internal interface IManagerConfirmService
{
[CorrelationAlias("alias", "e.Alias")]
event EventHandler Approve;

[CorrelationAlias("alias", "e.Alias")]
event EventHandler Reject;

[CorrelationInitializer]
void ConfirmPayment(string alias);
}

Na każdym zdarzeniu który ma być obsługiwany w kontekście należy zastosować atrybut CorrelationAlias. Jest stosowany aby poinformować WF jaka właściwość klasy przekazywanej w obsłudze zdarzenia przechowuje informacje o wspólnym parametrze. Na koniec musimy przyozdobić jedną metodę lub zdarzenie atrybutem CorrelationInitializer umożliwiają utworzenie kontekstu. Pierwsze uruchomienie tak oznaczonej metody lub zdarzenia, uruchomi w WF utworzenie kontekstu w którym kluczem będzie wartość tego parametru określonego poprzez ten atrybut CorrelationParameter. W tym momencie trzeba przygotować jeszcze kontrolki na diagramie poprzez ustawienie na wszystkich kontrolkach atrybutu CorrelationToken na wspólną wartość. Po ustawieniu tej wartości uaktywni się nam dodatkowe pole OwnerActivityName gdzie trzeba wybrać kontrolkę która zawiera w sobie diagram realizowany w wspólnym kontekście. Używają np zdarzenia z powyższego interfejsu, jego właściwość e.Alias zostanie przekazane do parametru alias przez co zostanie rozpoznany odpowiedni kontekst i zostanie obsłużony odpowiednia część diagramu.

Przykład który to wykorzystuje jest dostępny tutaj CommunicationsWorkflow.zip

0 komentarze:

Prześlij komentarz