식
이 항목은 Windows Workflow Foundation 4에 적용됩니다.
Windows WF(Workflow Foundation) 식은 결과를 반환하는 활동입니다. 모든 식 활동은 활동의 반환 값으로 Result라는 OutArgument 속성을 포함하는 Activity에서 간접적으로 파생됩니다. WF는 연산자 활동을 통해 단일 워크플로 변수에 대한 액세스를 제공하는 VariableValue 및 VariableReference과 같은 단순한 활동부터 결과를 생성하도록 전체 Visual Basic 언어에 대한 액세스를 제공하는 VisualBasicReference 및 VisualBasicValue과 같은 복잡한 활동까지 광범위한 식 활동과 함께 제공됩니다. CodeActivity 또는 NativeActivity에서 파생시켜서 추가 식 활동을 만들 수 있습니다.
식 사용
Workflow Designer는 모든 식에 VisualBasicValue 및 VisualBasicReference을 사용합니다. 따라서 디자이너의 식 텍스트 상자에는 Visual Basic 구문을 사용해야 합니다. 디자이너에서 생성된 워크플로는 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>
코드에서 워크플로를 정의하면 모든 식 활동을 사용할 수 있습니다. 다음 예에서는 연산자 활동의 구성을 사용하여 숫자 세 개를 추가하는 방법을 보여 줍니다.
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의 식을 확장하여 추가 식 활동을 만들 수 있습니다. 다음 예에서는 정수 값 세 개의 합을 반환하는 활동을 보여 줍니다.
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);
}
}
}
다음 예와 같이 이 새로운 활동을 사용하여 값 세 개를 추가한 이전 워크플로를 다시 쓸 수 있습니다.
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)
}
}
}
}
};
코드에서 식 사용에 대한 자세한 내용은 명령 코드를 사용하여 워크플로 제작을 참조하십시오.