다음을 통해 공유


활동 유효성 검사 논리 개요

활동의 유효성 검사기 구성 요소에는 모든 디자인 타임 및 런타임 유효성 검사 논리가 저장됩니다. 이를 통해 활동의 메타데이터에 정의된 활동의 속성이 적절하게 구성됩니다.

활동 프레임워크는 광범위한 기본 유효성 검사 기능을 제공하므로 많은 경우에 활동에 대한 사용자 지정 유효성 검사기를 작성할 필요가 없습니다. 사용자 지정 유효성 검사기 클래스를 작성하는 경우 사용자 지정 클래스는 Validator에서 상속해야 합니다.

참고

기본적으로 활동 인스턴스 속성은 ValidationOptionAttributeValidationOption.Required로 설정하는 경우에도 유효성이 검사되지 않습니다. 사용자 지정 활동에 있는 인스턴스 속성의 유효성을 검사하려면 이를 수행할 사용자 지정 유효성 검사기를 만들어야 합니다.

유효성 검사는 워크플로를 컴파일하는 동안과 활동에 대한 유효성 검사기 구성 요소의 Validate 메서드가 해당하는 활동 메타데이터 개체를 매개 변수로 사용하여 호출될 때마다 자동으로 발생합니다. 이를 통해 워크플로 제작 도구에서 "생성에 의한 올바름(correct-by-construction)" 패러다임을 선택하여 사용할 수 있습니다.

또한 워크플로를 변경할 때 런타임에 워크플로 인스턴스에 대한 유효성 검사가 발생합니다. 이 유효성 검사는 컴파일 타임에 수행되는 유효성 검사와 다를 수 있습니다. 이 기능은 실행 중인 워크플로 인스턴스의 활동 트리에서 활동을 추가하거나 대체하는 것과 같은 런타임 작업의 안전성을 보장합니다.

다음 예제에서는 사용자 지정 유효성 검사 코드를 추가하기 위해 ActivityValidator 클래스에서 파생시키고 Validate 메서드를 재정의하여 사용자 지정 활동 유효성 검사기를 만드는 방법을 보여 줍니다.

Public Class CustomActivityValidator
    Inherits ActivityValidator
    Public Overrides Function Validate(ByVal manager As ValidationManager, ByVal obj As Object) As ValidationErrorCollection
        Dim activity As Activity1 = CType(obj, Activity1)
        If activity.Parent IsNot Nothing Or activity.Activities.Count <> 0 Then
            Dim errors As ValidationErrorCollection = New ValidationErrorCollection()
            errors.AddRange(MyBase.Validate(manager, obj))
            Return errors
        End If
        Return New ValidationErrorCollection()
    End Function
End Class
public class CustomActivityValidator : ActivityValidator
{
    public override ValidationErrorCollection Validate(ValidationManager manager, object obj)
    {
        Activity1 activity = obj as Activity1;
        if (activity.Parent != null || activity.Activities.Count != 0)
        {
            ValidationErrorCollection errors = new ValidationErrorCollection();
            errors.AddRange(base.Validate(manager, obj));
            return errors;
        }
    return new ValidationErrorCollection();
    }
}

사용자 지정 유효성 검사기를 활동에 사용하려면 다음 예제와 같이 활동을 ActivityValidatorAttribute로 데코레이트해야 합니다.

<ActivityValidator(GetType(CustomActivityValidator))> _
Public Class Activity1
    Inherits SequenceActivity

    Public Shared MyPropertyProperty As DependencyProperty = System.Workflow.ComponentModel.DependencyProperty.Register("MyProperty", GetType(String), GetType(Activity1))

    <DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)> _
    Public Property MyProperty() As String
        Get
            Return (CType((MyBase.GetValue(Activity1.MyPropertyProperty)), String))
        End Get
        Set(ByVal Value As String)
            MyBase.SetValue(Activity1.MyPropertyProperty, value)
        End Set
    End Property
End Class
[ActivityValidator(typeof(CustomActivityValidator))]
public partial class Activity1: SequenceActivity
{
    public Activity1()
    {
        InitializeComponent();
    }

    public static DependencyProperty MyPropertyProperty = System.Workflow.ComponentModel.DependencyProperty.Register("MyProperty", typeof(string), typeof(Activity1));

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public string MyProperty
    {
        get
        {
            return ((string)(base.GetValue(Activity1.MyPropertyProperty)));
        }
        set
        {
            base.SetValue(Activity1.MyPropertyProperty, value);
        }
    }
}

참고 항목

참조

Validator

개념

사용자 지정 활동 만들기

기타 리소스

워크플로 활동 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.