Imperative codebasierte Validierung
Die imperative codebasierte Validierung stellt eine einfache Möglichkeit für eine Aktivität dar, eine Eigenvalidierung bereitzustellen. Dies ist für Aktivitäten verfügbar, die von CodeActivity, AsyncCodeActivity und NativeActivity abgeleitet werden. Der Validierungscode, der sämtliche Validierungsfehler und -warnungen bestimmt, wird der Aktivität hinzugefügt.
Verwenden von codebasierter Validierung
Die codebasierte Validierung wird von Aktivitäten unterstützt, die von CodeActivity, AsyncCodeActivity und NativeActivity abgeleitet werden. Der Validierungscode kann in der CacheMetadata-Überschreibung eingefügt und die Validierungsfehler oder -warnungen dem Metadatenargument hinzugefügt werden. Im folgenden Beispiel wird den Metadaten ein Validierungsfehler hinzugefügt, wenn das Cost
-Element größer als das Price
-Element ist.
Hinweis
Beachten Sie, dass Cost
und Price
keine Argumente der Aktivität sind, sondern Eigenschaften darstellen, die zur Entwurfszeit festgelegt werden. Daher können ihre Werte in der CacheMetadata-Überschreibung überprüft werden. Der Wert der Daten, die ein Argument durchlaufen, kann zur Entwurfszeit nicht überprüft werden, weil der Datenfluss erst zur Laufzeit erfolgt. Aktivitätsargumente können jedoch mit dem RequiredArgument
-Attribut und Überladungsgruppen überprüft werden, um ihre Bindung sicherzustellen. Mit diesem Beispielcode wird das RequiredArgument
-Attribut auf das Description
-Argument überprüft, und wenn es nicht gebunden ist, wird ein Validierungsfehler generiert. Erforderliche Argumente werden unter Erforderliche Argumente und Überladungsgruppen behandelt.
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.
}
}
Standardmäßig wird den Metadaten ein Validierungsfehler hinzugefügt, wenn der AddValidationError aufgerufen wird. Verwenden Sie zum Hinzufügen einer Validierungswarnung die AddValidationError-Überladung, die einen ValidationError akzeptiert, und geben Sie an, dass der ValidationError eine Warnung darstellt, indem sie die IsWarning-Eigenschaft festlegen.
Eine Validierung wird ausgeführt, wenn ein Workflow im Workflow-Designer geändert und Validierungsfehler oder -warnungen im Workflow-Designer angezeigt werden. Die Validierung findet auch zur Laufzeit statt, wenn ein Workflow aufgerufen wird. Wenn Validierungsfehler auftreten, löst die Standardvalidierungslogik eine InvalidWorkflowException aus. Weitere Informationen zum Aufrufen der Validierung und zum Zugreifen auf Validierungswarnungen oder -fehler finden Sie unter Aufrufen der Aktivitätsvalidierung.
Von CacheMetadata ausgelöste Ausnahmen werden nicht als Validierungsfehler behandelt. Diese Ausnahmen werden im Aufruf von Validate nicht verarbeitet und müssen vom Aufrufer behandelt werden.
Codebasierte Validierung ist nützlich beim Validieren der Aktivität, die den Code enthält. Es besteht jedoch keine Sichtbarkeit für die anderen Aktivitäten im Workflow. Die Validierung von deklarativen Einschränkungen stellt eine Möglichkeit dar, die Beziehungen zwischen einer Aktivität und anderen Aktivitäten im Workflow zu validieren. Dieses Thema wird unter Deklarative Beschränkungen behandelt.