Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Windows Workflow Foundation (WF) zvyšuje úroveň abstrakce pro vývoj interaktivních dlouhotrvajících aplikací. Jednotky práce jsou zakomponované jako aktivity. Aktivity běží v prostředí, které poskytuje zařízení pro řízení toku, zpracování výjimek, šíření chyb, trvalost stavových dat, načítání a uvolňování probíhajících pracovních postupů z paměti, sledování a toku transakcí.
Struktura aktivit
Činnosti se vyvíjejí jako typy CLR, které jsou odvozeny buď z Activity, CodeActivity, AsyncCodeActivity, nebo NativeActivity, nebo jejich variant, které vracejí hodnotu, Activity<TResult>, CodeActivity<TResult>, AsyncCodeActivity<TResult>, nebo NativeActivity<TResult>. Vývoj aktivit odvozených od Activity umožňuje uživatelům rychle sestavit existující aktivity a vytvořit tak pracovní jednotky, které se spouštějí v prostředí pracovního postupu. CodeActivity, na druhé straně umožňuje vytvářet logiku spouštění ve spravovaném kódu, a to především CodeActivityContext pro přístup k argumentům aktivity. AsyncCodeActivity je podobný CodeActivity s tím rozdílem, že lze použít k implementaci asynchronních úloh. Vyvíjení aktivit odvozených od NativeActivity umožňuje uživatelům přistupovat k modulu runtime prostřednictvím NativeActivityContext k funkcím, jako je plánování podřízených položek, vytváření záložek, vyvolání asynchronní práce, registrace transakcí a další.
Aktivity vytváření, které jsou odvozeny z Activity, jsou deklarativní a tyto aktivity mohou být vytvořeny v XAML. V následujícím příkladu je vytvořena aktivita Prompt pomocí dalších aktivit pro sestavení těla provádění.
<Activity x:Class='Prompt'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'
xmlns:z='http://schemas.microsoft.com/netfx/2008/xaml/schema'
xmlns:my='clr-namespace:XAMLActivityDefinition;assembly=XAMLActivityDefinition'
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns="http://schemas.microsoft.com/2009/workflow">
<z:SchemaType.Members>
<z:SchemaType.SchemaProperty Name='Text' Type='InArgument(s:String)' />
<z:SchemaType.SchemaProperty Name='Response' Type='OutArgument(s:String)' />
</z:SchemaType.Members>
<Sequence>
<my:WriteLine Text='[Text]' />
<my:ReadLine BookmarkName='r1' Result='[Response]' />
</Sequence>
</Activity>
Kontext aktivity
Toto ActivityContext je rozhraní autora aktivity k modulu runtime pracovního postupu a poskytuje přístup k mnoha funkcím modulu runtime. V následujícím příkladu je definována aktivita, která používá kontext spuštění k vytvoření záložky (mechanismus, který aktivitě umožňuje zaregistrovat bod pokračování ve svém spuštění, který lze obnovit hostitelem předávající data do aktivity).
public sealed class ReadLine : NativeActivity<string>
{
[RequiredArgument]
public InArgument<string> BookmarkName { get; set; }
protected override void Execute(NativeActivityContext context)
{
// Create a Bookmark and wait for it to be resumed.
context.CreateBookmark(BookmarkName.Get(context),
new BookmarkCallback(OnResumeBookmark));
}
// NativeActivity derived activities that do asynchronous operations by calling
// one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext
// must override the CanInduceIdle property and return true.
protected override bool CanInduceIdle
{
get { return true; }
}
public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
{
// When the Bookmark is resumed, assign its value to
// the Result argument.
Result.Set(context, (string)obj);
}
Životní cyklus aktivity
Aktivita začne ve stavu Executing. Pokud nejsou zjištěny výjimky, zůstane v tomto stavu, dokud nejsou dokončeny všechny podřízené aktivity a veškerá čekající práce (například objekty Bookmark), načež přejde do stavu Closed. Nadřazená aktivita může požádat o zrušení podřízené položky; pokud je možné podřízenou položku zrušit, dokončí se ve Canceled stavu. Pokud během provádění dojde k vyvolání výjimky, modul runtime umístí aktivitu do Faulted stavu a rozšíří výjimku do nadřazeného řetězce aktivit. Toto jsou tři stavy dokončení aktivity:
Uzavřeno: Aktivita dokončila svou práci a ukončila se.
Zrušený: Aktivita řádně opustila svou práci a ukončila ji. Při zadání tohoto stavu není práce explicitně vrácena zpět.
Pochybení: Aktivita zjistila chybu a skončila bez dokončení své práce.
Aktivity zůstávají ve Executing stavu, kdy jsou uchovány nebo odloženy.