命令型のコード ベースの検証は、アクティビティ自体に関する検証を提供する簡単な方法を提供し、 CodeActivity、 AsyncCodeActivity、および NativeActivityから派生するアクティビティで使用できます。 検証エラーまたは警告を決定する検証コードがアクティビティに追加されます。
Code-Based 検証の使用
コードベースの検証は、 CodeActivity、 AsyncCodeActivity、および NativeActivityから派生するアクティビティによってサポートされます。 検証コードは CacheMetadata オーバーライドに配置でき、検証エラーまたは警告をメタデータ引数に追加できます。 次の例では、 Cost
が Price
より大きい場合、検証エラーがメタデータに追加されます。
注
Cost
とPrice
はアクティビティの引数ではなく、デザイン時に設定されるプロパティであることに注意してください。 そのため、 CacheMetadata オーバーライドで値を検証できます。 実行時までデータがフローしないため、引数を通過するデータの値をデザイン時に検証できませんが、アクティビティ引数を検証して、 RequiredArgument
属性とオーバーロード グループを使用してバインドされるようにすることができます。 このコード例では、Description
引数のRequiredArgument
属性が表示され、バインドされていない場合は検証エラーが生成されます。 必須引数については、「 必須引数」と「オーバーロード グループ」で説明します。
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 が呼び出されると、検証エラーがメタデータに追加されます。 検証の警告を追加するには、ValidationErrorを受け取るAddValidationErrorオーバーロードを使用し、IsWarning プロパティを設定してValidationErrorが警告を表すよう指定します。
検証は、ワークフロー デザイナーでワークフローが変更され、検証エラーまたは警告がワークフロー デザイナーに表示されるときに発生します。 検証は、ワークフローが呼び出されたときに実行時にも発生し、検証エラーが発生した場合は、既定の検証ロジックによって InvalidWorkflowException がスローされます。 検証の呼び出しと検証の警告またはエラーへのアクセスの詳細については、「 アクティビティ検証の呼び出し」を参照してください。
CacheMetadataからスローされた例外は、検証エラーとして扱われません。 これらの例外は、 Validate の呼び出しからエスケープされ、呼び出し元が処理する必要があります。
コードベースの検証は、コードを含むアクティビティを検証するのに役立ちますが、ワークフロー内の他のアクティビティを表示することはできません。 宣言型制約の検証では、アクティビティとワークフロー内の他のアクティビティの間のリレーションシップを検証する機能が提供され、「 宣言型制約」 トピックで説明されています。
.NET