Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wyrażenie programu Windows Workflow Foundation (WF) to dowolne działanie, które zwraca wynik. Wszystkie działania wyrażeń pochodzą pośrednio z klasy Activity<TResult>, która zawiera właściwość OutArgument o nazwie Result jako wartość zwracaną działania. WF jest dostarczany z szeroką gamą działań wyrażeń od prostych, takich jak VariableValue<T> i VariableReference<T>, które zapewniają dostęp do pojedynczej zmiennej przepływu pracy za pośrednictwem działań operatorów, do złożonych działań, takich jak VisualBasicReference<TResult> i VisualBasicValue<TResult> które oferują dostęp do pełnego zakresu języka Visual Basic w celu wygenerowania wyniku. Dodatkowe działania wyrażeniowe można utworzyć, wyprowadzając z CodeActivity<TResult> lub NativeActivity<TResult>.
Używanie wyrażeń
Projektant przepływu pracy używa VisualBasicValue<TResult> i VisualBasicReference<TResult> dla wszystkich wyrażeń w projektach Visual Basic oraz CSharpValue<TResult> i CSharpReference<TResult> dla wyrażeń w projektach przepływu pracy w języku C#.
Uwaga / Notatka
Obsługa wyrażeń języka C# w projektach przepływu pracy została wprowadzona w programie .NET Framework 4.5. Aby uzyskać więcej informacji, zobacz Wyrażenia języka C#.
Przepływy pracy generowane przez projektanta są zapisywane w języku XAML, gdzie wyrażenia są wyświetlane w nawiasach kwadratowych, jak w poniższym przykładzie.
<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>
Podczas definiowania przepływu pracy w kodzie można użyć dowolnych działań wyrażeń. W poniższym przykładzie pokazano użycie kompozycji działań operatora w celu dodania trzech liczb:
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)
}
}
}
}
};
Ten sam przepływ pracy można wyrazić bardziej zwartiej przy użyciu wyrażeń lambda języka C#, jak pokazano w poniższym przykładzie:
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))
}
}
};
Rozszerzanie dostępnych wyrażeń za pomocą działań wyrażeń niestandardowych
Wyrażenia w programie .NET Framework 4.6.1 można rozszerzać, umożliwiając tworzenie dodatkowych działań wyrażeń. W poniższym przykładzie pokazano działanie, które zwraca sumę trzech wartości całkowitych.
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);
}
}
}
Za pomocą tego nowego działania można ponownie napisać poprzedni przepływ pracy, który dodał trzy wartości, jak pokazano w poniższym przykładzie:
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)
}
}
}
}
};
Aby uzyskać więcej informacji na temat używania wyrażeń w kodzie, zobacz Tworzenie przepływów pracy, działań i wyrażeń przy użyciu kodu imperatywnego.