命令型コードに基づく検証Imperative Code-Based Validation

命令型コードに基づく検証は、アクティビティでアクティビティ自身に関する検証を可能にする簡単な方法を提供し、CodeActivityAsyncCodeActivity、および NativeActivity から派生するアクティビティで使用できます。Imperative code-based validation provides a simple way for an activity to provide validation about itself, and is available for activities that derive from CodeActivity, AsyncCodeActivity, and NativeActivity. 検証のエラーまたは警告を判断する検証コードがアクティビティに追加されます。Validation code that determines any validation errors or warnings is added to the activity.

コードに基づく検証の使用Using Code-Based Validation

コードに基づく検証は、CodeActivityAsyncCodeActivity、および NativeActivity から派生するアクティビティでサポートされています。Code-based validation is supported by activities that derive from CodeActivity, AsyncCodeActivity, and NativeActivity. 検証コードは CacheMetadata オーバーライドに配置できます。また、検証エラーまたは警告はメタデータ引数に追加できます。Validation code can be placed in the CacheMetadata override, and validation errors or warnings can be added to the metadata argument. 次の例では、CostPrice よりも高い場合、検証エラーがメタデータに追加されます。In the following example, if the Cost is greater than the Price, a validation error is added to the metadata.

注意

CostPrice はこのアクティビティの引数ではありませんが、デザイン時に設定されるプロパティです。Note that Cost and Price are not arguments to the activity, but are properties that are set at design time. その理由は、これらの値は CacheMetadata オーバーライドで検証できるためです。That is why their values can be validated in the CacheMetadata override. 引数に流入するデータの値は、データが実行時まで流れないのでデザイン時には検証できません。しかし、RequiredArgument 属性とオーバーロード グループを使用してアクティビティの引数を検証すると、それらの引数にバインドされていることが確認できます。The value of the data flowing through an argument cannot be validated at design time because the data does not flow until run time, but activity arguments can be validated to ensure that they are bound by using the RequiredArgument attribute and overload groups. このコード例では、RequiredArgument 引数の Description 属性を確認します。これがバインドされていなければ、検証エラーが生成されます。This example code sees the RequiredArgument attribute for the Description argument, and if it is not bound then a validation error is generated. 必須の引数は、「ために必要な引数とオーバー ロード グループします。Required arguments are covered in Required Arguments and Overload Groups.

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 が呼び出されたときです。By default, a validation error is added to the metadata when AddValidationError is called. 検証の警告を追加するには、AddValidationError を受け取る ValidationError オーバーロードを使用し、ValidationError プロパティを設定することで IsWarning が警告を表すことを示します。To add a validation warning, use the AddValidationError overload that takes a ValidationError, and specify that the ValidationError represents a warning by setting the IsWarning property.

検証が発生するのは、ワークフローがワークフロー デザイナーで修正され、検証エラーまたは警告がワークフロー デザイナーに表示されたときです。Validation occurs when a workflow is modified in the workflow designer and any validation errors or warnings are displayed in the workflow designer. ワーク フローの呼び出し時に検証も行われます。検証エラーが発生すると、既定の検証ロジックによって InvalidWorkflowException がスローされます。Validation also occurs at run time when a workflow is invoked and if any validation errors occur, an InvalidWorkflowException is thrown by the default validation logic. 検証の呼び出しと検証の警告やエラーへのアクセスの詳細については、次を参照してください。アクティビティの検証を呼び出すします。For more information about invoking validation and accessing any validation warnings or errors, see Invoking Activity Validation.

CacheMetadata からスローされる例外は、検証エラーとして処理されません。Any exceptions that are thrown from CacheMetadata are not treated as validation errors. これらの例外は、Validate への呼び出しからエスケープされ、呼び出し元によって処理される必要があります。These exceptions will escape from the call to Validate and must be handled by the caller.

コードに基づく検証は、コードを含み、ワークフロー内の他のアクティビティから表示できないアクティビティを検証するときに役立ちます。Code-based validation is useful for validating the activity that contains the code, but it does not have visibility into the other activities in the workflow. 宣言の制約の検証アクティビティとワークフローの他のアクティビティ間の関係を検証する機能を提供し、については、宣言の制約トピック。Declarative constraints validation provides the ability to validate the relationships between an activity and other activities in the workflow, and is covered in the Declarative Constraints topic.