필수 인수 및 오버로드 그룹
이 항목은 Windows Workflow Foundation 4에 적용됩니다.
활동을 실행하기 위해 특정 인수를 바인딩하도록 활동을 구성할 수 있습니다. RequiredArgument 특성은 활동의 특정 인수가 필수 인수임을 나타내고 OverloadGroup 특성은 필수 인수 범주를 그룹화하는 데 사용됩니다. 활동 작성자는 특성을 사용하여 단순 활동 유효성 검사 구성 또는 복합 활동 유효성 검사 구성을 제공할 수 있습니다.
필수 인수 사용
활동에서 RequiredArgument 특성을 사용하려면 RequiredArgumentAttribute를 사용하여 원하는 인수를 나타냅니다. 이 예제에서는 두 필수 인수를 가진 Add
활동을 정의합니다.
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);
}
}
XAML에서는 또한 RequiredArgumentAttribute를 사용하여 필수 인수를 나타냅니다. 이 예제에서 Add
활동은 세 인수를 사용하여 정의되며 Assign 활동을 사용하여 추가 작업을 수행합니다.
<Activity x:Class="ValidationDemo.Add" ...>
<x:Members>
<x:Property Name="Operand1" Type="InArgument(x:Int32)">
<x:Property.Attributes>
<RequiredArgumentAttribute />
</x:Property.Attributes>
</x:Property>
<x:Property Name="Operand2" Type="InArgument(x:Int32)">
<x:Property.Attributes>
<RequiredArgumentAttribute />
</x:Property.Attributes>
</x:Property>
<x:Property Name="Result" Type="OutArgument(x:Int32)" />
</x:Members>
<Assign>
<Assign.To>
<OutArgument x:TypeArguments="x:Int32">[Result]</OutArgument>
</Assign.To>
<Assign.Value>
<InArgument x:TypeArguments="x:Int32">[Operand1 + Operand2]</InArgument>
</Assign.Value>
</Assign>
</Activity>
활동을 사용할 때 필수 인수가 바인딩되지 않을 경우 다음 유효성 검사 오류가 반환됩니다.
필수 작업 인수 'Operand1'의 값을 제공하지 않았습니다.
![]() |
---|
유효성 검사 오류 및 경고를 검사하고 처리하는 방법에 대한 자세한 내용은 활동 유효성 검사 호출을 참조하십시오. |
오버로드 그룹 사용
오버로드 그룹은 활동에서 유효한 인수 조합을 나타내는 메서드를 제공합니다. 인수는 OverloadGroupAttribute를 사용하여 그룹화됩니다. 각 그룹에는 OverloadGroupAttribute에 의해 지정되는 이름이 주어집니다. 활동은 오버로드 그룹의 인수 집합 하나만 바인딩되는 경우에 유효합니다. 다음 예제에서는 CreateLocation
클래스를 정의합니다.
class CreateLocation: Activity
{
[RequiredArgument]
public InArgument<string> Name { get; set; }
public InArgument<string> Description { get; set; }
[RequiredArgument]
[OverloadGroup("G1")]
public InArgument<int> Latitude { get; set; }
[RequiredArgument]
[OverloadGroup("G1")]
public InArgument<int> Longitude { get; set; }
[RequiredArgument]
[OverloadGroup("G2")][OverloadGroup("G3")]
public InArgument<string> Street { get; set; }
[RequiredArgument]
[OverloadGroup("G2")]
public InArgument<string> City { get; set; }
[RequiredArgument]
[OverloadGroup("G2")]
public InArgument<string> State { get; set; }
[RequiredArgument]
[OverloadGroup("G3")]
public InArgument<int> Zip { get; set; }
}
이 활동의 목적은 미국 내 위치를 지정하는 데 있습니다. 활동 사용자는 세 인수 그룹 중 하나를 사용하여 위치를 지정할 수 있습니다. 유효한 인수 조합을 지정하려면 세 오버로드 그룹을 정의합니다. G1
에는 Latitude
및 Longitude
인수가 포함되어 있고, G2
에는 Street
, City
및 State
인수가 포함되어 있고, G3
에는 Street
및 Zip
인수가 포함되어 있습니다. Name
은 필수 인수이지만 오버로드 그룹에 포함되지 않습니다. 이 활동이 유효하려면 Name
을 한 오버로드 그룹의 모든 인수와 함께 바인딩해야 합니다.
오버로드 그룹은 다른 오버로드 그룹의 하위 집합 또는 이와 동등한 집합이 될 수 없습니다. 이 규칙에 대한 유일한 예외는 RequiredArgument가 false인 인수만 포함하는 하위 집합입니다. 오버로드 그룹은 겹칠 수 있지만 그룹의 교집합에 오버로드 그룹 중 하나 또는 둘 다의 모든 필수 인수가 포함되는 경우 오류가 발생합니다. 오버로드 그룹은 그룹의 모든 RequiredArgument 인수가 바인딩되는 경우 바인딩된 것으로 간주됩니다. 그룹에 RequiredArgument 인수가 없고 하나 이상의 인수가 바인딩되는 경우 그룹은 바인딩된 것으로 간주됩니다. 하나의 오버로드 그룹에 RequiredArgument 인수가 없는 경우가 아니면 그룹이 바인딩되지 않은 경우 오류가 발생합니다. 두 개 이상의 오버로드 그룹에서 RequiredArgument 인수를 바인딩할 수 없습니다. 두 개 이상의 오버로드 그룹이 바인딩되는 경우, 즉 한 오버로드 그룹의 모든 필수 인수가 바인딩되고 다른 오버로드 그룹의 인수도 바인딩되는 경우 오류가 발생합니다.