Zum Ende der Metadaten springen
-
Angelegt von Former user, zuletzt geändert am 06.02.2020
Zum Anfang der Metadaten
Entwicklung
- Wann verwenden ich eine CodeActivity und wann eine NativeActivity?
Eine NativeActivity benötigen Sie, wenn Ihre Aktivät Variablen oder weitere Aktivitäten enthalten soll (Beispiel If, ForEach, SELECT-Abfrage). Weitere Informationen finden Sie hier: www.docs.microsoft.com/designing-and-implementing-custom-activities
Anforderungen an die Aktivität
- Wie kann ich in meiner Aktivität Variablen anlegen?
public class DemoNativeActivity : NativeActivity
{
public DemoNativeActivity()
{
Variables = new Collection<Variable>();
}
[Browsable(false), ExcludeInAnnotation]
public Collection<Variable> Variables { get; }
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.SetVariablesCollection(Variables);
base.CacheMetadata(metadata);
}
}
Fehlermeldungen der Workflow Engine
- InvalidOperationException: Das Argument des Typs 'System.String' kann nicht verwendet werden. Stellen Sie sicher, dass es für eine Aktivität deklariert ist.
Alle Argumente (In oder Out) einer Aktivität müssen in der CacheMetadata-Methode deklariert werden. In der Regel übernimmt das die Basisklasse (CodeActivity bzw. NativeActivity).
→ Stellen Sie sicher, dass Sie in der CacheMetadata-Methode Ihrer Aktivität die BasisKlasse aufrufen.
→ Sie verwenden eine Auflistung an Argumente (z.B. List<InArgument> oder Dicitonary<string, OutArgument>) oder einen komplexen Typ mit weiteren Argumenten? Dann müssen Sie die Argumente selbst deklarieren.
public List<InArgument<string>> ListOfArguments { get; set; }
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
//!!! Liste mit Argumenten erst nach base.CacheMetadata setzen, da sie sonst verworfen werden !!!
int i = 0;
foreach (var argument in ListOfArguments)
{
//Name muss eindeutig sein
var argumentName = $"argument{++i}";
var runtimeArg = new RuntimeArgument(argumentName, typeof(string), ArgumentDirection.In, false);
metadata.Bind(argument, runtimeArg);
metadata.AddArgument(runtimeArg);
}
protected override void Execute(CodeActivityContext a_oContext)
{
foreach (InArgument<string> item in ListOfArguments)
{
string s = item.Get(a_oContext);
}
}
}
...