Share via


명령 코드 기반 유효성 검사

명령형 코드 기반 유효성 검사를 이용하면 활동 자체에서 활동 유효성 검사를 간단히 실행할 수 있으며 CodeActivity, AsyncCodeActivityNativeActivity의 파생 활동에도 사용할 수 있습니다. 유효성 검사 오류 또는 경고를 판단하는 유효성 검사 코드가 활동에 추가됩니다.

코드 기반 유효성 검사 사용

코드 기반 유효성 검사는 CodeActivity, AsyncCodeActivityNativeActivity의 파생 활동에서 지원됩니다. CacheMetadata 재정의에 유효성 검사 코드를 배치할 수 있으며, 메타데이터 인수에 유효성 검사 오류 또는 경고를 추가할 수 있습니다. 다음 예에서 CostPrice보다 크면 메타데이터에 유효성 검사 오류가 추가됩니다.

참고 항목

CostPrice는 활동에 대한 인수는 아니지만 디자인 타임에 설정되는 속성입니다. 따라서 이러한 값은 CacheMetadata 재정의에서 유효성을 검사할 수 있습니다. 인수를 통해 흐르는 데이터 값은 런타임이 될 때가지 흐르지 않으므로 디자인 타임에서 유효성을 검사할 수 없습니다. 활동 인수는 RequiredArgument 특성 및 오버로드 그룹을 사용하여 바인딩되도록 유효성을 검사할 수 있습니다. 이 예제 코드에서는 RequiredArgument 인수에 대한 Description 특성을 확인하여 바인딩되어 있지 않을 경우 유효성 검사 오류가 발생합니다. 필수 인수는 필수 인수 및 오버로드 그룹에서 다룹니다.

public sealed class CreateProduct : CodeActivity  
{  
    public double Price { get; set; }  
    public double Cost { get; set; }  
  
    // [RequiredArgument] attribute will generate a validation error
    // if the Description argument is not set.  
    [RequiredArgument]  
    public InArgument<string> Description { get; set; }  
  
    protected override void CacheMetadata(CodeActivityMetadata metadata)  
    {  
        base.CacheMetadata(metadata);  
        // Determine when the activity has been configured in an invalid way.  
        if (this.Cost > this.Price)  
        {  
            // Add a validation error with a custom message.  
            metadata.AddValidationError("The Cost must be less than or equal to the Price.");  
        }  
    }  
  
    protected override void Execute(CodeActivityContext context)  
    {  
        // Not needed for the sample.  
    }  
}  

기본적으로 AddValidationError가 호출되면 메타데이터에 유효성 검사 오류가 추가됩니다. 유효성 검사 경고를 추가하려면 AddValidationError를 취하는 ValidationError 오버로드를 사용하고 ValidationError 속성을 설정하여 IsWarning가 경고를 나타내도록 지정합니다.

Workflow Designer에서 워크플로를 수정하면 유효성 검사가 수행되어 Workflow Designer에 유효성 검사 오류 또는 경고가 표시됩니다. 워크플로를 호출하면 런타임에도 유효성 검사가 수행되며 유효성 검사 오류가 발생할 경우 기본 유효성 검사 논리에 따라 InvalidWorkflowException이 throw됩니다. 유효성 검사 호출 및 유효성 검사 경고 또는 오류 액세스에 대한 자세한 내용은 활동 유효성 검사 호출을 참조하세요.

CacheMetadata에서 throw된 모든 예외는 유효성 검사 오류로 처리되지 않습니다. 이러한 예외는 Validate 호출에서 이스케이프되며 호출자가 처리해야 합니다.

코드 기반 유효성 검사는 해당 코드가 포함된 활동의 유효성을 검사하는 데 유용하지만 워크플로의 다른 활동은 볼 수 없습니다. 선언적 제약 조건 유효성 검사는 워크플로에서 특정 활동과 다른 활동 간의 관계 유효성을 검사할 수 있으며 선언적 제약 조건 토픽에서 다룹니다.