FAQ
Entwicklung
Wann verwenden ich eine CodeActivity und wann eine NativeActivity?
Eine NativeActivity benötigen Sie, wenn Ihre Aktivität Variablen oder weitere Aktivitäten enthalten soll (Beispiel If, ForEach, SELECT-Abfrage). Weitere Informationen finden Sie hier: https://docs.microsoft.com/en-us/dotnet/framework/windows-workflow-foundation/designing-and-implementing-custom-activitiesWie prüfe, ob der Mandant das Verzeichnis verwenden darf?
Verwenden Sie dazu die Methode "IsInTenantFolder" des Interface "IWmsApiExtension" aus der WmsActivityContracts.dll.
Anforderungen an die Aktivität
Wie lege ich Icons für meine Aktivität fest?
Fügen Sie Ihrer Aktivität das ToolboxIconAttribute oder das ToolboxBitmapAttribute hinzu. Details finden Sie hier: Icons und Bilder zur AktivitätWie kann ich in dem Bereich meiner Aktivität Variablen anlegen? (wie bei einer Sequenz)
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); } }
In welcher Gruppe soll meine Aktivität angezeigt werden?
Die Gruppe, in der die Aktivität sich befinden soll, definieren Sie über das ActivityGroupAttribute. Gruppen der [accantum] WMS Aktivitäten können Sie verwenden, indem Sie auf die Resources der WmsActivityContracts.dll zugreifen
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.
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); } } }