式
このトピックの内容は、Windows Workflow Foundation 4 に該当します。
Windows Workflow Foundation (WF) 式は結果を返す任意のアクティビティです。すべての式アクティビティは間接的に Activity から派生します。このアクティビティには、アクティビティの戻り値として Result という OutArgument プロパティが含まれます。WF には幅広い式アクティビティが用意されています。たとえば、演算子アクティビティを介して単一のワークフロー変数にアクセスできる VariableValue や VariableReference などの単純なアクティビティから、結果を生成する Visual Basic 言語一式にアクセスできる VisualBasicReference や VisualBasicValue などの複雑なアクティビティまでが用意されています。追加の式アクティビティは、CodeActivity または NativeActivity から派生して作成できます。
式の使用
ワークフロー デザイナーはすべての式に VisualBasicValue と VisualBasicReference を使用します。そのため、デザイナーの式テキスト ボックスに Visual Basic 構文を使用する必要があります。デザイナーによって生成されたワークフローは XAML に保存されます。XAML には、次の例のように、式が角かっこに囲まれて表示されます。
<Sequence xmlns="https://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="https://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>
コードでワークフローを定義すると、任意の式アクティビティを使用できます。次のコードは、3 つの数を追加する演算子アクティビティの使用例です。
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)
}
}
}
}
};
C# のラムダ式を使用すると、次の例のように、同じワークフローをよりコンパクトに表現できます。
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))
}
}
};
次の例のように、Visual Basic の式アクティビティを使用してワークフローを表現することもできます。
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>(new VisualBasicValue<int>("a + b + c"))
}
}
};
カスタム式アクティビティによる使用可能な式の拡張
.NET Framework 4 の式には、追加の式アクティビティを作成できる拡張性があります。次のコードは、3 つの整数値の合計を返すアクティビティの例です。
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);
}
}
}
次の例のように、この新しいアクティビティを使用して、3 つの値を追加した前のワークフローを書き直すことができます。
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)
}
}
}
}
};
コードで式を使用する方法詳細情報、「命令型コードを使用してワークフローを作成する方法」を参照してください。