다음을 통해 공유


필수 인수 및 오버로드 그룹

활동을 실행하기 위해 특정 인수를 바인딩하도록 활동을 구성할 수 있습니다. 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에는 LatitudeLongitude 인수가 포함됩니다. G2에는 Street, CityState가 포함됩니다. G3에는 StreetZip이 포함됩니다. Name도 필수 인수이지만 오버로드 그룹에 속하지는 않습니다. 이 활동이 유효하려면 Name을 한 오버로드 그룹의 모든 인수와 함께 바인딩해야 합니다.

다음 예제에서는 데이타베이스 액세스 활동 샘플에서 가져온 두 오버로드 그룹인 ConnectionStringConfigFileSectionName이 있습니다. 이 활동이 유효하려면 ProviderNameConnectionString 인수가 바인딩되어 있거나 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; }
}  

오버로드 그룹 사용을 정의할 경우

  • 오버로드 그룹은 다른 오버로드 그룹의 하위 집합 또는 이와 동등한 집합이 될 수 없습니다.

    참고 항목

    그러나 이 규칙에는 한 가지 예외가 있습니다. 오버로드 그룹이 다른 오버로드 그룹의 하위 집합이고, 하위 집합에 RequiredArgumentfalse인 인수만 있을 경우 오버로드 그룹은 유효합니다.

  • 오버로드 그룹은 겹칠 수 있지만 그룹의 교집합에 오버로드 그룹 중 하나 또는 둘 다의 모든 필수 인수가 포함되는 경우 오류가 발생합니다. 이전 예제에서 G2G3 오버로드 그룹은 겹쳤지만 교집합에 오버로드 그룹 중 하나 또는 둘 다의 모든 인수가 포함되지 않았으므로 유효했습니다.

오버로드 그룹에서 인수를 바인딩할 경우

  • 오버로드 그룹은 그룹의 모든 RequiredArgument 인수가 바인딩되는 경우 바인딩된 것으로 간주됩니다.

  • 그룹에 RequiredArgument 인수가 없고 하나 이상의 인수가 바인딩되는 경우 그룹은 바인딩된 것으로 간주됩니다.

  • 하나의 오버로드 그룹에 RequiredArgument 인수가 없는 경우가 아니면 오버로드 그룹이 바인딩되지 않은 경우 유효성 검사 오류가 발생합니다.

  • 두 개 이상의 오버로드 그룹이 바인딩되는 경우, 즉 한 오버로드 그룹의 모든 필수 인수가 바인딩되고 다른 오버로드 그룹의 인수도 바인딩되는 경우 오류가 발생합니다.