Inhalt |
---|
Fügen Sie Ihrem Projekt eine neue Klasse hinzu und benennen passend und eiten Sie von einer Aktivitätsklasse ab (CodeActivity, NativeActivity, AsyncActivity).
Von welcher Klasse muss ich ableiten?
- CodeActivity
- NativeActivity, wenn einer dieser Punkte zutrifft:
- Die Aktivität soll den Workflow pausieren
- Die Aktivität kann weitere "Unteraktivitäten" enthalten (wie z.B. ForEach-Aktivität)
(Link zu einem Beispiel von Microsoft)
- AsyncCodeActivity: Zur asynchronen Ausführung von Aktivitäten (Details in der Microsoft Dokumentation)
Codeblock | ||||||
---|---|---|---|---|---|---|
| ||||||
public Activityclass HelloWorldActivity: CodeActivity { } |
Welche Methoden muss ich implementieren?
- Execute
Wird ausgeführt, sobald die Aktivität aus einer Workflow-Instanz ausgeführt wird. - (optional) CacheMetadata
Wird vor jeder Ausführung und bei jeder Änderung im Workflow-Designer ausgeführt.
Hier können Sie Fehler und Warnungen für den Designer ausgeben.
Solange Fehler vorhanden ist, kann der Workflow nicht gestartet werden
Codeblock | ||||||
---|---|---|---|---|---|---|
| ||||||
public Activity HelloWorldActivity: CodeActivity { protected override void CacheMetadata(CodeActivityMetadata metadata) { //Zusätzliche Validierungen base.CacheMetadata(a_oMetadata); } protected override void Execute(CodeActivityContext context) { //Eigentliche Implementierung der Logik und Funktion der Aktivität } } |
Wie definiere ich Argumente und Eigenschaften?
Für jede Eigenschaft Ihrer Aktivität (siehe Eigenschaftsfenster) müssen Sie in Ihrer Aktivitäts-Klasse ein Property mit einem getter und einem setter hinzufügen.
Was ist der Unterschied zwischen einem "Argument" und einer "Eigenschaft"?
Argumente (In, Out und InOut) erlauben dem Anwender im Workflow Designer VisualBasic-Ausdrücke des angegeben Typen einzutragen.
- InArgument: Ein eingehendes Argument.
- OutAgument: Ein ausgehendes Argument (hier kann nur eine Variable eingetragen werden).
- InOutArgument: Ein Argument, das sowohl eingehen, als auch ausgehend verwendet wird.
Ist kein VisualBasic-Ausdruck nötig (z.B. bei einfachen Option wie in der Dateien ermitteln-Aktivität), reicht es eine normale Eigenschaft (engl. Property) des gewünschten Typen hinzuzufügen (Zeile 5 im Beispiel rechts)
Wie und wann greife ich auf Argumente zu?
Die Inhalte der Argumente können nur in der Execute-Methode verwendet werden, da erst zur Laufzeit bekannt ist, was in einer Variable oder einem anderen VisualBasic-Ausdruck steht. In der CacheMetadata-Methode können Sie lediglich prüfen, ob der Anwender ein Argument "befüllt" hat. Verwenden Sie zum Ermitteln / Setzen des Wertes eines Arguments die Get bzw. Set-Methode.
Eigenschaften können Sie bereits in der CacheMetadata-Methode verwenden, da hier der Wert bereits zur Design-Zeit bekannt ist.
Codeblock | ||||||
---|---|---|---|---|---|---|
| ||||||
public Activity HelloWorldActivity: CodeActivity { public InArgument<string> StringArgument { get; set; } public bool BoolProperty { get; set; } public OutArgument<string> Result { get; set; } protected override void CacheMetadata(CodeActivityMetadata metadata) { if (StringArgument?.Expression == null) a_oMetadata.AddValidationError("Geben Sie einen Wert für StringArgument an."); } protected override void Execute(CodeActivityContext context) { string sText = StringArgument.Get(context); Result.Set(context, "Hallo " + sText); } } |