WF(Windows Workflow Foundation)에서 변수는 데이터 스토리지를 나타내고 인수는 작업 내부 및 외부의 데이터 흐름을 나타냅니다. 활동에는 인수의 집합이 있으며, 이들은 활동의 서명을 구성합니다. 또한 활동은 개발자가 워크플로를 디자인하는 동안 변수를 추가하거나 제거할 수 있는 변수 목록을 유지할 수 있습니다. 인수는 값을 반환하는 식을 사용하여 바인딩됩니다.
변수
변수는 데이터의 스토리지 위치입니다. 변수는 워크플로 정의의 일부로 선언됩니다. 변수는 런타임에 값을 사용하며 이러한 값은 워크플로 인스턴스의 상태의 일부로 저장됩니다. 변수 정의는 변수의 형식을 지정하고 필요에 따라 이름을 지정합니다. 다음 코드에서는 변수를 선언하고, 활동을 사용하여 Assign<T> 변수에 값을 할당한 다음, 활동을 사용하여 WriteLine 콘솔에 해당 값을 표시하는 방법을 보여줍니다.
// Define a variable named "str" of type string.
Variable<string> var = new Variable<string>
{
Name = "str"
};
// Declare the variable within a Sequence, assign
// a value to it, and then display it.
Activity wf = new Sequence()
{
Variables = { var },
Activities =
{
new Assign<string>
{
To = var,
Value = "Hello World."
},
new WriteLine
{
Text = var
}
}
};
WorkflowInvoker.Invoke(wf);
기본값 식은 필요에 따라 변수 선언의 일부로 지정할 수 있습니다. 변수에는 한정자가 있을 수도 있습니다. 예를 들어 변수가 읽기 전용인 경우 읽기 전용 VariableModifiers 한정자를 적용할 수 있습니다. 다음 예제에서는 기본값이 할당된 읽기 전용 변수를 만듭니다.
// Define a read-only variable with a default value.
Variable<string> var = new Variable<string>
{
Default = "Hello World.",
Modifiers = VariableModifiers.ReadOnly
};
변수 범위 지정
런타임에 변수의 수명은 변수를 선언하는 활동의 수명과 같습니다. 작업이 완료되면 해당 변수가 정리되고 더 이상 참조할 수 없습니다.
주장들
활동 작성자는 인수를 사용하여 데이터가 활동 내부 및 외부로 흐르는 방식을 정의합니다. 각 인수에는 지정된 방향 In( , Out또는 InOut.)이 있습니다.
워크플로 런타임은 활동 내/외부로의 데이터 이동 타이밍에 대해 다음과 같이 보장합니다.
작업이 실행되기 시작하면 모든 입력 및 입력/출력 인수의 값이 계산됩니다. 예를 들어 호출 시기 Get 와 관계없이 반환되는 값은 호출 전에 런타임에서 계산한 값입니다
Execute
.Set 호출되면 런타임은 값을 즉시 설정합니다.
필요에 따라 인수를 EvaluationOrder 지정할 수 있습니다. EvaluationOrder 는 인수가 계산되는 순서를 지정하는 0부터 시작하는 값입니다. 기본적으로 인수의 계산 순서는 지정되지 않으며 값과 같습니다 UnspecifiedEvaluationOrder . 이 인수에 대한 평가 순서를 지정하려면 0보다 크거나 같은 값으로 설정합니다 EvaluationOrder . Windows Workflow Foundation은 지정된 평가 순서로 인수를 오름차순으로 평가합니다. 지정되지 않은 평가 순서가 있는 인수는 지정된 평가 순서를 가진 인수 앞에 평가됩니다.
활동 작성자는 강력한 형식의 메커니즘을 사용하여 인수를 노출할 수 있습니다. 이 작업은 형식 InArgument<T>OutArgument<T>및 InOutArgument<T>.의 속성을 선언하여 수행됩니다. 이렇게 하면 활동 작성자가 활동으로 들어오고 나가는 데이터에 대한 특정 계약을 설정할 수 있습니다.
활동에 대한 인수 정의
활동에서 인수를 정의하려면 InArgument<T>, OutArgument<T>, 및 InOutArgument<T> 형식의 속성을 지정해야 합니다. 다음 코드에서는 사용자에게 표시할 문자열을 사용하고 사용자의 응답이 포함된 문자열을 반환하는 작업에 대한 Prompt
인수를 정의하는 방법을 보여 줍니다.
public class Prompt : Activity
{
public InArgument<string> Text { get; set; }
public OutArgument<string> Response { get; set; }
// Rest of activity definition omitted.
}
비고
단일 값을 반환하는 활동은 Activity<TResult>, NativeActivity<TResult>, 또는 CodeActivity<TResult>에서 파생될 수 있습니다. 이러한 활동에는 반환 값이 포함된 OutArgument<T>가 잘 정의된 Result라는 이름이 있습니다.
워크플로에서 변수 및 인수 사용
다음 예제에서는 워크플로에서 변수와 인수를 사용하는 방법을 보여 줍니다. 워크플로는 var1
, var2
, var3
세 개의 변수를 선언하는 시퀀스입니다. 워크플로의 첫 번째 작업은 변수 값을 변수 Assign
var1
에 할당하는 작업입니다var2
. 그 다음에 WriteLine
활동이 var2
변수 값을 출력합니다. 다음은 변수 Assign
의 값을 변수 var2
에 할당하는 또 다른 var3
활동입니다. 마지막으로 WriteLine
활동으로서 var3
변수의 값을 출력하는 작업이 있습니다. 첫 번째 Assign
활동은 활동의 인수에 대한 바인딩을 명시적으로 나타내는 InArgument<string>
및 OutArgument<string>
개체를 사용합니다.
InArgument<string>
는 Value에 사용됩니다. 이는 값이 Assign<T> 인수를 통해 Value 활동으로 흐르기 때문이며, OutArgument<string>
는 To에 사용됩니다. 이는 값이 인수 To에서 변수로 흐르기 때문입니다. 두 번째 Assign
작업은 암시적 캐스트를 사용하는 더 작지만 동등한 구문을 사용하여 동일한 작업을 수행합니다. 작업에서는 WriteLine
압축 구문도 사용합니다.
// Declare three variables; the first one is given an initial value.
Variable<string> var1 = new Variable<string>()
{
Default = "one"
};
Variable<string> var2 = new Variable<string>();
Variable<string> var3 = new Variable<string>();
// Define the workflow
Activity wf = new Sequence
{
Variables = { var1, var2, var3 },
Activities =
{
new Assign<string>()
{
Value = new InArgument<string>(var1),
To = new OutArgument<string>(var2)
},
new WriteLine() { Text = var2 },
new Assign<string>()
{
Value = var2,
To = var3
},
new WriteLine() { Text = var3 }
}
};
WorkflowInvoker.Invoke(wf);
Code-Based 활동에서 변수 및 인수 사용
이전 예제에서는 워크플로 및 선언적 활동에서 인수 및 변수를 사용하는 방법을 보여 줍니다. 인수 및 변수는 코드 기반 활동에도 사용됩니다. 개념적으로 사용법은 매우 유사합니다. 변수는 활동 내의 데이터 스토리지를 나타내고 인수는 작업 내 또는 외부로의 데이터 흐름을 나타내며 워크플로 작성자가 데이터가 흐르는 위치를 나타내는 워크플로의 다른 변수 또는 인수에 바인딩됩니다. 활동에서 변수 또는 인수의 값을 얻거나 설정하려면 활동의 현재 실행 환경을 나타내는 활동 컨텍스트를 사용해야 합니다. 워크플로 런타임이 활동의 Execute 메서드로 전달합니다. 이 예제에서는 두 개의 Add
인수가 있는 사용자 지정 In 작업이 정의됩니다. 인수 값에 액세스하기 위해 메서드가 Get 사용되고 워크플로 런타임에서 전달된 컨텍스트가 사용됩니다.
public sealed class Add : CodeActivity<int>
{
[RequiredArgument]
public InArgument<int> Operand1 { get; set; }
[RequiredArgument]
public InArgument<int> Operand2 { get; set; }
protected override int Execute(CodeActivityContext context)
{
return Operand1.Get(context) + Operand2.Get(context);
}
}
코드에서 인수, 변수 및 식을 사용하는 방법에 대한 자세한 내용은 명령적 코드 및 필수 인수 및 오버로드 그룹을사용하여 워크플로, 활동 및 식 작성을 참조하세요.
.NET