다음을 통해 공유


식(WF)

WF(Windows Workflow Foundation) 식은 결과를 반환하는 모든 작업입니다. 모든 표현 활동은 간접적으로 Activity<TResult>에서 파생되며, Activity<TResult>에는 활동의 반환 값으로 Result라는 이름의 속성이 포함되어 있습니다. WF는 연산자 활동을 통해 단일 워크플로 변수에 대한 액세스를 제공하는 간단한 VariableValue<T>VariableReference<T>활동부터 결과를 생성하는 Visual Basic 언어의 전체 범위에 대한 액세스를 제공하는 복잡한 활동까지 VisualBasicReference<TResult>VisualBasicValue<TResult> 다양한 식 활동을 제공합니다. 추가 표현 활동은 CodeActivity<TResult>로부터 파생하거나 NativeActivity<TResult>로부터 파생시켜 만들 수 있습니다.

수식 사용

워크플로 디자이너는 Visual Basic 프로젝트의 모든 식에 VisualBasicValue<TResult>VisualBasicReference<TResult>를 사용하고, C# 워크플로 프로젝트의 식에는 CSharpValue<TResult>CSharpReference<TResult>를 사용합니다.

비고

워크플로 프로젝트의 C# 식에 대한 지원은 .NET Framework 4.5에서 도입되었습니다. 자세한 내용은 C# 식을 참조하세요.

디자이너에서 생성한 워크플로는 다음 예제와 같이 식이 대괄호로 묶인 XAML에 저장됩니다.

<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>

코드에서 워크플로를 정의할 때 모든 식 활동을 사용할 수 있습니다. 다음 예제에서는 연산자 활동의 컴퍼지션을 사용하여 세 개의 숫자를 추가하는 방법을 보여 줍니다.

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))
        }
    }
};

사용자 지정 식 활동을 사용하여 사용 가능한 식 확장

.NET Framework 4.6.1의 식은 확장 가능하여 추가 식 활동을 만들 수 있습니다. 다음 예제에서는 세 개의 정수 값의 합계를 반환하는 작업을 보여 있습니다.

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)
                }
            }
        }
    }
};

코드에서 식을 사용하는 방법에 대한 자세한 내용은 명령적 코드를 사용하여 워크플로, 활동 및 식 작성을 참조하세요.