命令式程式代碼型驗證為活動提供簡單的方式來提供本身的驗證,而且適用於衍生自 CodeActivity、 AsyncCodeActivity和 NativeActivity的活動。 驗證代碼會被加到活動中,用於判斷任何驗證錯誤或警告。
使用 Code-Based 驗證
衍生自 CodeActivity、 AsyncCodeActivity和 NativeActivity的活動支援以程式代碼為基礎的驗證。 驗證程式碼可以放在重寫CacheMetadata中,而驗證錯誤或警告可以新增至元數據參數。 在下列範例中,如果 Cost 大於 Price,則會將驗證錯誤新增至元數據。
備註
請注意, Cost 和 Price 不是活動的自變數,而是在設計時間設定的屬性。 為什麼可以在CacheMetadata 覆寫中驗證其值就是這樣的原因。 在設計時無法驗證流經參數的資料值,因為資料直到執行時才會流動,但活動參數可以透過屬性 RequiredArgument 與過載群組來驗證,確保它們被綁定。 此範例程式碼會檢查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為警告。
當工作流程設計工具中修改工作流程,且工作流程設計工具中顯示任何驗證錯誤或警告時,就會發生驗證。 驗證也會在執行時執行,當工作流被呼叫時,若發生任何驗證錯誤,預設驗證邏輯會拋出 A InvalidWorkflowException 。 如需叫用驗證和存取任何驗證警告或錯誤的詳細資訊,請參閱 叫用活動驗證。
從 CacheMetadata 丟出的任何例外狀況都不會被視為驗證錯誤。 這些例外狀況將從 Validate 呼叫中逸出,並需要由呼叫者處理。
程式代碼型驗證對於驗證包含程式碼的活動很有用,但無法查看工作流程中的其他活動。 宣告式條件約束驗證可讓您驗證活動與工作流程中其他活動之間的關聯性,並涵蓋在 宣告式條件約束 主題中。