WF 4.0 のカスタム アクティビティ/カスタム アクティビティ ファクトリ/カスタム デザイナーでいつ、どのように検証を行うべきかがわかりません。
検証エラーのサポートを提供していると思われる私のアクティビティ内の唯一の場所は、CacheMetadataメソッド内です (これは設計プロセス中に複数回呼び出されると思います)。これは、検証を行うべき場所ですか? ActivityDesigner 内での検証のサポートはありますか?
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を参照)
2 つ目の質問は、ActivityDesigner 側から検証を追加するためのサポートはありますか? 答えは「いいえ、そうではありません」です。ActivityDesigner の上に「カスタム検証」を追加するカスタム WPF とデータ バインディングを実行することは可能です。AttachedPropertiesService を使用して、アクティビティ クラスで独自の SatisfiesConstraints プロパティを定義することもできます. しかし、それは余分な作業であり、実行時検証と一貫して結び付くことはないため、価値が限定されたアイデアです。