Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Windows Workflow Foundation (WF)-Ausdruck ist jede Aktivität, die ein Ergebnis zurückgibt. Alle Ausdrucksaktivitäten leiten sich indirekt von Activity<TResult> ab, das eine OutArgument-Eigenschaft namens Result als Rückgabewert der Aktivität enthält. WF wird mit einer Vielzahl von Ausdrucksaktivitäten geliefert, von einfachen Aktivitäten wie VariableValue<T> und VariableReference<T>, die den Zugriff auf eine einzelne Workflowvariable über Operatoraktivitäten ermöglichen, bis hin zu komplexen Aktivitäten wie VisualBasicReference<TResult> und VisualBasicValue<TResult>, die Zugriff auf die gesamte Bandbreite der Visual-Basic-Sprache bieten, um das Ergebnis zu erzielen. Zusätzliche Ausdrucksaktivitäten können durch Ableitungen von CodeActivity<TResult> oder NativeActivity<TResult> erstellt werden.
Verwenden von Ausdrücken
Workflow-Designer verwendet VisualBasicValue<TResult> und VisualBasicReference<TResult> für alle Ausdrücke in Visual Basic-Projekten und CSharpValue<TResult>CSharpReference<TResult> für Ausdrücke in C#-Workflowprojekten.
Hinweis
Unterstützung für C#-Ausdrücke in Workflowprojekten wurde in .NET Framework 4.5 eingeführt. Weitere Informationen finden Sie unter C#-Ausdrücke.
Workflows, die vom Designer erstellt werden, werden in XAML gespeichert, wobei Ausdrücke wie im folgenden Beispiel in eckige Klammern eingeschlossen angezeigt werden.
<Sequence xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<Variable x:TypeArguments="x:Int32" Default="1" Name="a" />
<Variable x:TypeArguments="x:Int32" Default="2" Name="b" />
<Variable x:TypeArguments="x:Int32" Default="3" Name="c" />
<Variable x:TypeArguments="x:Int32" Default="0" Name="r" />
</Sequence.Variables>
<Assign>
<Assign.To>
<OutArgument x:TypeArguments="x:Int32">[r]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:Int32">[a + b + c]</InArgument>
</Assign.Value>
</Assign>
</Sequence>
Beim Definieren eines Workflows im Code können alle Ausdrucksaktivitäten verwendet werden. Das folgende Beispiel zeigt die Verwendung einer Komposition von Operatoraktivitäten, um drei Zahlen hinzuzufügen:
Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);
Sequence w = new Sequence
{
Variables = { a, b, c, r },
Activities =
{
new Assign {
To = new OutArgument<int>(r),
Value = new InArgument<int> {
Expression = new Add<int, int, int> {
Left = new Add<int, int, int> {
Left = new InArgument<int>(a),
Right = new InArgument<int>(b)
},
Right = new InArgument<int>(c)
}
}
}
}
};
Derselbe Workflow kann kompakter ausgedrückt werden, indem C#-Lambda-Ausdrücke verwendet werden, wie im folgenden Beispiel gezeigt:
Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);
Sequence w = new Sequence
{
Variables = { a, b, c, r },
Activities =
{
new Assign {
To = new OutArgument<int>(r),
Value = new InArgument<int>((ctx) => a.Get(ctx) + b.Get(ctx) + c.Get(ctx))
}
}
};
Erweitern verfügbarer Ausdrücke mit benutzerdefinierten Ausdrucksaktivitäten
Ausdrücke in .NET Framework 4.6.1 sind erweiterbar, sodass zusätzliche Ausdrucksaktivitäten erstellt werden können. Das folgende Beispiel zeigt eine Aktivität, die eine Summe von drei ganzzahligen Werten zurückgibt.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;
namespace ExpressionsDemo
{
public sealed class AddThreeValues : CodeActivity<int>
{
public InArgument<int> Value1 { get; set; }
public InArgument<int> Value2 { get; set; }
public InArgument<int> Value3 { get; set; }
protected override int Execute(CodeActivityContext context)
{
return Value1.Get(context) +
Value2.Get(context) +
Value3.Get(context);
}
}
}
Mit dieser neuen Aktivität können Sie den vorherigen Workflow neu schreiben, der drei Werte hinzugefügt hat, wie im folgenden Beispiel gezeigt:
Variable<int> a = new Variable<int>("a", 1);
Variable<int> b = new Variable<int>("b", 2);
Variable<int> c = new Variable<int>("c", 3);
Variable<int> r = new Variable<int>("r", 0);
Sequence w = new Sequence
{
Variables = { a, b, c, r },
Activities =
{
new Assign {
To = new OutArgument<int>(r),
Value = new InArgument<int> {
Expression = new AddThreeValues() {
Value1 = new InArgument<int>(a),
Value2 = new InArgument<int>(b),
Value3 = new InArgument<int>(c)
}
}
}
}
};
Weitere Informationen zur Verwendung von Ausdrücken im Code finden Sie unter "Erstellungsworkflows", "Aktivitäten" und "Ausdrücke mit imperativem Code".