다음을 통해 공유


이 항목은 Windows Workflow Foundation 4에 적용됩니다.

Windows WF(Workflow Foundation) 식은 결과를 반환하는 활동입니다. 모든 식 활동은 활동의 반환 값으로 Result라는 OutArgument 속성을 포함하는 Activity에서 간접적으로 파생됩니다. WF는 연산자 활동을 통해 단일 워크플로 변수에 대한 액세스를 제공하는 VariableValueVariableReference과 같은 단순한 활동부터 결과를 생성하도록 전체 Visual Basic 언어에 대한 액세스를 제공하는 VisualBasicReferenceVisualBasicValue과 같은 복잡한 활동까지 광범위한 식 활동과 함께 제공됩니다. CodeActivity 또는 NativeActivity에서 파생시켜서 추가 식 활동을 만들 수 있습니다.

식 사용

Workflow Designer는 모든 식에 VisualBasicValueVisualBasicReference을 사용합니다. 따라서 디자이너의 식 텍스트 상자에는 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)
                }
            }
        }
    }
};

코드에서 식 사용에 대한 자세한 내용은 명령 코드를 사용하여 워크플로 제작을 참조하십시오.