Tipps & Tricks

Best Practice

Aktivität

Basisklasse

Ableitung einer WMS-Aktivität (siehe Basisklassen für Aktivitäten)

Array, List und andere Collections

  • List statt Array: So kann der Anwender einfacher mit der Auflistung weiterarbeiten (z.B. Einträge hinzufügen und entfernen mit den Auflistungs-Aktivitäten)

  • InArgument<ICollection<string>>: So bleibt es dem Anwender überlassen, ob er eine Liste oder ein Array angibt

Inhalt

 


FAQ

Entwicklung

Anforderungen an die Aktivität

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); } } }