활동을 실행하기 위해 특정 인수를 바인딩해야 하므로 활동을 구성할 수 있습니다. 이 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<T> 액티비티를 사용하여 덧셈 작업을 수행합니다.
<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
은 하나의 오버로드 그룹의 모든 인수와 함께 바인딩되어야 합니다.
다음 예제에서는 데이터베이스 액세스 활동 샘플에서 가져온 두 오버로드 그룹이 ConnectionString
ConfigFileSectionName
있습니다. 이 작업이 유효하려면 ProviderName
인수와 ConnectionString
인수가 바인딩되거나 ConfigName
인수가 바인딩되어야 하며, 두 가지 모두 바인딩되어서는 안 됩니다.
public class DbUpdate: AsyncCodeActivity
{
[RequiredArgument]
[OverloadGroup("ConnectionString")]
[DefaultValue(null)]
public InArgument<string> ProviderName { get; set; }
[RequiredArgument]
[OverloadGroup("ConnectionString")]
[DependsOn("ProviderName")]
[DefaultValue(null)]
public InArgument<string> ConnectionString { get; set; }
[RequiredArgument]
[OverloadGroup("ConfigFileSectionName")]
[DefaultValue(null)]
public InArgument<string> ConfigName { get; set; }
[DefaultValue(null)]
public CommandType CommandType { get; set; }
[RequiredArgument]
public InArgument<string> Sql { get; set; }
[DependsOn("Sql")]
[DefaultValue(null)]
public IDictionary<string, Argument> Parameters { get; }
[DependsOn("Parameters")]
public OutArgument<int> AffectedRecords { get; set; }
}
오버로드 그룹을 정의하는 경우:
오버로드 그룹은 하위 집합이나 다른 오버로드 그룹의 동등한 집합일 수 없습니다.
비고
이 규칙에는 한 가지 예외가 있습니다. 오버로드 그룹이 다른 오버로드 그룹의 하위 집합이고 하위 집합에 인수
RequiredArgument
false
만 포함된 경우 오버로드 그룹은 유효합니다.오버로드 그룹은 겹칠 수 있지만 그룹의 교집합에 하나 또는 두 오버로드 그룹의 필수 인수가 모두 포함되어 있으면 오류가 발생합니다. 이전 예제
G2
G3
에서는 과부하 그룹이 겹쳤지만 교차에 하나 또는 두 그룹의 인수가 모두 포함되지 않았기 때문에 유효했습니다.
오버로드 그룹에서 인수를 바인딩하는 경우:
- 오버로드 그룹은 그룹의 모든 인수가
RequiredArgument
바인딩된 경우 바인딩된 것으로 간주됩니다. - 그룹에 인수가 0
RequiredArgument
개이고 하나 이상의 인수가 바인딩된 경우 그룹은 바인딩된 것으로 간주됩니다. - 인수가 없는 오버로드 그룹 하나를 제외하고, 오버로드 그룹이 바인딩되지 않은 경우 유효성 검사 오류가 발생합니다.
- 오버로드 그룹이 둘 이상 바인딩되어 있으면 오류가 발생합니다. 즉, 한 오버로드 그룹의 모든 필수 인수가 바인딩되고 다른 오버로드 그룹의 인수도 바인딩됩니다.
.NET