Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windows Workflow Foundation (WF) kifejezés minden olyan tevékenység, amely eredményt ad vissza. Az összes kifejezési tevékenység közvetett módon a Activity<TResult>-ból származik, amely egy OutArgument-t tartalmaz, amelynek van egy Result nevű tulajdonsága, mint a tevékenység visszatérési értéke. A WF az egyszerű előtagoktól, mint például VariableValue<T> és VariableReference<T>, amelyek operátori tevékenységek révén biztosítanak hozzáférést az egyes munkafolyamat-változókhoz, egészen az olyan összetett tevékenységekig terjed, mint a VisualBasicReference<TResult> és VisualBasicValue<TResult>, amelyek a Visual Basic nyelv teljes körű használatát lehetővé teszik az eredmény elérése érdekében. További kifejezési tevékenységek hozhatók létre a CodeActivity<TResult> vagy a NativeActivity<TResult> származtatásával.
Kifejezések használata
A munkafolyamat-tervező a Visual Basic-projektekben minden kifejezéshez VisualBasicValue<TResult> és VisualBasicReference<TResult> használ, míg a C# munkafolyamat-projektekben lévő kifejezésekhez CSharpValue<TResult> és CSharpReference<TResult> alkalmaz.
Megjegyzés:
A munkafolyamat-projektek C#-kifejezéseinek támogatása a .NET Framework 4.5-ben jelent meg. További információ: C#-kifejezések.
A tervező által létrehozott munkafolyamatok XAML-ben vannak mentve, ahol a kifejezések szögletes zárójelben jelennek meg, ahogyan az alábbi példában is látható.
<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>
A munkafolyamat kódban való definiálásakor bármely kifejezési tevékenység használható. Az alábbi példa az operátori tevékenységek összetételének használatát mutatja be három szám hozzáadásához:
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)
}
}
}
}
};
Ugyanez a munkafolyamat tömörebben fejezhető ki C# lambda kifejezésekkel, ahogy az alábbi példában is látható:
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))
}
}
};
Elérhető kifejezések kiterjesztése egyéni kifejezési tevékenységekkel
A .NET-keretrendszer 4.6.1-ben lévő kifejezések bővíthetőek, így további kifejezési tevékenységek hozhatók létre. Az alábbi példa egy olyan tevékenységet mutat be, amely három egész számból álló értéket ad vissza.
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);
}
}
}
Ezzel az új tevékenységgel átírhatja az előző munkafolyamatot, amely három értéket adott hozzá az alábbi példában látható módon:
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)
}
}
}
}
};
További információ a kifejezések kódban való használatáról: Munkafolyamatok, tevékenységek és kifejezések készítése imperatív kóddal.