다음을 통해 공유


필수 인수 및 오버로드 그룹

활동을 실행하기 위해 특정 인수를 바인딩해야 하므로 활동을 구성할 수 있습니다. 이 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, City, 및 State가 포함되어 있습니다. G3StreetZip를 포함합니다. Name 은 필수 인수이기도 하지만 오버로드 그룹의 일부가 아닙니다. 이 작업이 유효하려면 Name 은 하나의 오버로드 그룹의 모든 인수와 함께 바인딩되어야 합니다.

다음 예제에서는 데이터베이스 액세스 활동 샘플에서 가져온 두 오버로드 그룹이 ConnectionStringConfigFileSectionName있습니다. 이 작업이 유효하려면 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; }
}

오버로드 그룹을 정의하는 경우:

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

    비고

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

  • 오버로드 그룹은 겹칠 수 있지만 그룹의 교집합에 하나 또는 두 오버로드 그룹의 필수 인수가 모두 포함되어 있으면 오류가 발생합니다. 이전 예제 G2G3 에서는 과부하 그룹이 겹쳤지만 교차에 하나 또는 두 그룹의 인수가 모두 포함되지 않았기 때문에 유효했습니다.

오버로드 그룹에서 인수를 바인딩하는 경우:

  • 오버로드 그룹은 그룹의 모든 인수가 RequiredArgument 바인딩된 경우 바인딩된 것으로 간주됩니다.
  • 그룹에 인수가 0 RequiredArgument 개이고 하나 이상의 인수가 바인딩된 경우 그룹은 바인딩된 것으로 간주됩니다.
  • 인수가 없는 오버로드 그룹 하나를 제외하고, 오버로드 그룹이 바인딩되지 않은 경우 유효성 검사 오류가 발생합니다.
  • 오버로드 그룹이 둘 이상 바인딩되어 있으면 오류가 발생합니다. 즉, 한 오버로드 그룹의 모든 필수 인수가 바인딩되고 다른 오버로드 그룹의 인수도 바인딩됩니다.