문제

WF 4.0의 사용자 정의 활동/커스텀 활동 공장/사용자 정의 디자이너에서 언제 어떻게 검증을 수행 해야하는지에 대해 불분명합니다.

내 활동 내에서 유효성 검사 오류 지원을 제공하는 유일한 장소는 다음과 같습니다. Cachemetadata 방법 (디자인 프로세스 중에 여러 번이라고 생각합니다). 이것이 내가 검증을 해야하는 곳입니까? ActivityDesigner 내에서 유효성 검사에 대한 지원이 있습니까?

도움이 되었습니까?

해결책

예, 활동의 CacheMetadata는 귀하가 검증을 수행 해야하는 곳입니다. 검증은 워크 플로 런타임과 디자이너에 적용되는 개념입니다. (유효성 검사 오류가있는 워크 플로, 컴파일 또는 선언적 인 워크 플로를 실행하려고 시도 할 수 있지만 예외가 발생하면이를 볼 수 있습니다.)

예시:

protected override void CacheMetadata(ActivityMetadata metadata)
{
   if (this.Body == 0) metadata.AddValidationError(
     new ValidationError(
       "You forgot to supply a body for (this activity)",
       /*iswarning = */ true, 
       "Body"));
}

(보다 ActivityMetadata.AddValidationError)

보조 질문은 ActivityDesigner 측에서 검증을 추가하는 데 도움이되는 것입니다. 대답은 '아니요, 실제로는 아닙니다' - 활동 디자이너 위에 '사용자 정의 검증'을 추가하는 몇 가지 사용자 정의 WPF 및 데이터 바인딩을 수행 할 수 있습니다. AttackedProperTiesservice를 사용하여 활동 클래스에서 자신의 만족 구조 속성을 정의 할 수도 있습니다. . 그러나 추가 작업이며 런타임 유효성 검사와 일관되게 묶이지 않으므로 제한된 가치 아이디어입니다.

다른 팁

public class SalesCommissionValidation : CodeActivity<decimal>
{
    public decimal NetSales { get; set; }
    public decimal Percentage { get; set; }

    protected override decimal Execute(CodeActivityContext context)
    {
        var commission = NetSales * (Percentage / 100);
        return commission;
    }

    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);

        if (NetSales <= 0)
            metadata.AddValidationError("Sales cannot be less than 0!");
        else if (Percentage <= 0)
            metadata.AddValidationError("Sales percentgage cannot be less than 0!");
        else
        {
            if (Percentage > 20)
                metadata.AddValidationError(string.Format("Sales percentgage {0} cannot be greater than 20%", Percentage));
        }

    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top