Udostępnij za pośrednictwem


Opcje tworzenia działań w programie WF

.NET Framework 4.6.1 udostępnia kilka opcji tworzenia działań niestandardowych. Prawidłowa metoda używana do tworzenia danego działania zależy od tego, jakie funkcje czasu wykonywania są wymagane.

Wybieranie, która klasa działania bazowego ma być używana do tworzenia działań niestandardowych

W poniższej tabeli wymieniono funkcje dostępne w niestandardowych klasach bazowych działań.

Klasa działania podstawowego Dostępne funkcje
Activity Komponuje grupy działań dostarczanych przez system i działań niestandardowych do działania złożonego.
CodeActivity Implementuje funkcje imperatywne, udostępniając metodę Execute , którą można zastąpić. Zapewnia również dostęp do śledzenia, zmiennych i argumentów.
NativeActivity Udostępnia wszystkie funkcje CodeActivity, a także przerywanie wykonywania działań, anulowanie wykonywania działań podrzędnych, korzystanie z zakładek i planowanie działań, akcji działań i funkcji.
DynamicActivity Zapewnia podejście przypominające dom do konstruowania działań, które są interfejsami z projektantem WF i maszynami w czasie wykonywania za pośrednictwem ICustomTypeDescriptorprogramu , umożliwiając tworzenie nowych działań bez definiowania nowych typów.

Działania tworzenia przy użyciu działania

Działania pochodzące z Activity funkcji redagowania przez zebranie innych istniejących działań. Te działania mogą być istniejącymi działaniami niestandardowymi i działaniami z biblioteki działań .NET Framework 4.6.1. Tworzenie tych działań jest najbardziej podstawowym sposobem tworzenia funkcji niestandardowych. Takie podejście jest najczęściej podejmowane w przypadku korzystania ze środowiska projektowego wizualizacji do tworzenia przepływów pracy.

Działania tworzenia przy użyciu funkcji CodeActivity lub AsyncCodeActivity

Działania pochodzące z CodeActivity lub AsyncCodeActivity mogą implementować funkcje imperatywne przez zastąpienie Execute metody niestandardowym kodem imperatywnym. Kod niestandardowy jest wykonywany, gdy działanie jest wykonywane przez środowisko uruchomieniowe. Chociaż działania utworzone w ten sposób mają dostęp do funkcji niestandardowych, nie mają dostępu do wszystkich funkcji środowiska uruchomieniowego, takich jak pełny dostęp do środowiska wykonawczego, możliwość planowania działań podrzędnych, tworzenia zakładek lub obsługi metody Anuluj lub Przerwanie. Po wykonaniu CodeActivity ma dostęp do ograniczonej wersji środowiska wykonawczego (za pośrednictwem CodeActivityContext klasy lub AsyncCodeActivityContext ). Działania utworzone przy użyciu programu CodeActivity mają dostęp do rozpoznawania argumentów i zmiennych, rozszerzeń i śledzenia. Planowanie działań asynchronicznych można wykonać przy użyciu polecenia AsyncCodeActivity.

Tworzenie działań przy użyciu funkcji NativeActivity

Działania pochodzące z programu , takie jak te pochodzące z NativeActivityCodeActivityklasy , tworzą funkcje imperatywne przez zastąpienie Execute, ale także mają dostęp do wszystkich funkcji środowiska uruchomieniowego przepływu pracy za pośrednictwem NativeActivityContext metody , która jest przekazywana do Execute metody . Ten kontekst obsługuje planowanie i anulowanie działań podrzędnych, wykonywanie ActivityAction i ActivityFunc<TResult> obiekty, przepływanie transakcji do przepływu pracy, wywoływanie procesów asynchronicznych, anulowanie i przerywanie wykonywania, dostęp do właściwości i rozszerzeń wykonywania oraz zakładki (dojścia do wznawiania wstrzymanych przepływów pracy).

Działania tworzenia przy użyciu funkcji DynamicActivity

W przeciwieństwie do innych trzech typów działań, nowe funkcje nie są tworzone przez wyprowadzanie nowych typów z DynamicActivity (klasa jest zapieczętowana), ale zamiast tego przez zebranie funkcji w Properties właściwości i Implementation przy użyciu modelu obiektu dokumentu działania (DOM).

Działania tworzenia, które zwracają wynik

Wiele działań musi zwrócić wynik po wykonaniu. Chociaż w tym celu można zawsze zdefiniować niestandardowe OutArgument<T> działanie, zaleca się zamiast tego użycie elementu Activity<TResult>, lub pochodnego elementu CodeActivity<TResult> lub NativeActivity<TResult>. Każda z tych klas bazowych ma OutArgument<T> nazwę Result, którego działanie może używać dla wartości zwracanej. Działania zwracające wynik powinny być używane tylko wtedy, gdy tylko jeden wynik musi zostać zwrócony z działania; Jeśli należy zwrócić wiele wyników, należy zamiast tego użyć oddzielnych OutArgument<T> elementów członkowskich.