Поделиться через


Императивная проверка Code-Based

Императивная проверка на основе кода предоставляет простой способ для выполнения проверки самого действия и доступен для действий, производных от CodeActivity, AsyncCodeActivityи NativeActivity. Код проверки, определяющий любые ошибки проверки или предупреждения, добавляется в активность.

Использование валидации Code-Based

Проверка на основе кода поддерживается действиями, производными от CodeActivity, AsyncCodeActivityи NativeActivity. Код проверки можно поместить в метод переопределения CacheMetadata, а ошибки или предупреждения проверки можно добавить в аргумент метаданных. В следующем примере, если значение Cost больше Price, ошибка проверки будет добавлена в метаданные.

Замечание

Обратите внимание, что Cost и Price не являются аргументами действия, но являются свойствами, которые задаются во время разработки. Именно поэтому их значения можно валидировать там, где происходит CacheMetadata переопределение. Значение данных, поступающих через аргумент, невозможно проверить на этапе проектирования, так как данные не передаются до времени выполнения, но аргументы операций можно проверить, чтобы убедиться, что они связаны с помощью атрибутов и групп перегрузки. В этом примере код отображает 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.

Проверка возникает, когда рабочий процесс изменяется в конструкторе рабочих процессов, а все ошибки проверки или предупреждения отображаются в конструкторе рабочих процессов. Проверка также возникает во время выполнения при вызове рабочего процесса и при возникновении ошибок проверки вызывается InvalidWorkflowException логикой проверки по умолчанию. Дополнительные сведения о вызове проверки и доступе к любым предупреждениям или ошибкам проверки см. в разделе "Вызов проверки действия".

Любые исключения, которые выбрасываются из CacheMetadata, не считаются ошибками проверки. Эти исключения будут выходить из вызова Validate и должны обрабатываться вызывающей стороной.

Проверка на основе кода полезна для проверки действия, содержащего код, но не имеет видимости других действий в рабочем процессе. Декларативная проверка ограничений обеспечивает возможность проверки связей между действием и другими действиями в рабочем процессе и рассматривается в разделе декларативных ограничений .