Zum Ende der Metadaten springen
Zum Anfang der Metadaten

Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 7 Nächste Version anzeigen »

Entwicklung

  1. 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 IfForEachSELECT-Abfrage). Weitere Informationen finden Sie hier: www.docs.microsoft.com/designing-and-implementing-custom-activities

Anforderungen an die Aktivität

  1. Wie kann ich in meiner Aktivität Variablen anlegen?
Aktivität mit Variablen
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

  1. 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.
Aktivität mit einer Liste an Argumenten
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);
        }
    }
}

...


  • Keine Stichwörter