Code

Wie bereits zuvor erläutert muss jede als eine Zuteilungsfunktion angegebene GPO-Methode eine Struktur des Typs curam.util.workflow.struct.AllocationTargetList zurückgeben.

Ähnlich wie bei mit automatischen Aktivitäten verknüpften Geschäftsmethoden führt das Fehlschlagen der Zuteilungsstrategie beim Ausführen einer manuellen Aktivität dazu, dass die Strategie zur Handhabung von Workflow-Fehlern aufgerufen wird. Dies kann beispielsweise dazu führen, dass mehrmals versucht wird, die der fehlgeschlagenen Methode zugeordnete Aktivität erneut auszuführen. Basierend auf dieser Tatsache sollten für die Zuteilungsfunktionen, die den Zuteilungsstrategien von manuellen Aktivitäten oder Entscheidungsaktivitäten zugeordnet sind, möglichst keine Ausnahmen auftreten, es sei denn, es liegt eine nicht wiederherstellbare Situation vor.

Die Anwendung muss die Rückrufschnittstelle curam.util.workflow.impl.WorkResolver implementieren, um festzulegen, wie Aufgaben in der Anwendung zugeteilt werden. Die Anwendungseigenschaft 'curam.custom.workflow.workresolver' muss sich auf die Implementierungsklasse curam.util.workflow.impl.WorkResolver in der Anwendung beziehen, da die Workflow-Engine diese Eigenschaft zum Ermitteln der richtigen Funktion zum Zuteilen der Aufgabe verwendet.

Die Klasse curam.util.workflow.impl.WorkResolver verfügt über die überladene Methode resolveWork, da die verschiedenen Zuteilungsstrategietypen die Zuteilungsziele in unterschiedlichen Formaten zurückgeben. Dies ist jedoch ein Aspekt der Implementierung, der für einen Entwickler von angepassten geschäftlichen Resolver-Klassen nicht von Bedeutung sein sollte, da die Geschäftsverarbeitung für alle Versionen der Methode gleich sein sollte.

package curam.util.workflow.impl;
      
      ...
      
      public interface WorkResolver {
      
        void resolveWork(
          final TaskDetails taskDetails,
          final Object allocationTargets,
          final boolean previouslyAllocated);
      
        void resolveWork(
            final TaskDetails taskDetails,
            final Map allocationTargets,
            final boolean previouslyAllocated);
      
        void resolveWork(
            final TaskDetails taskDetails,
            final String allocationTargetID,
            final boolean previouslyAllocated);
            
            ...
      }

Um diesem Problem entgegenzuwirken, stellt die Klasse curam.core.sl.impl.DefaultWorkResolverAdapter einen weitaus effizienteren Mechanismus zur Implementierung eines geschäftlichen Resolvers bereit. Diese Klasse implementiert die unterschiedlichen Methoden und konvertiert deren Eingabeparameter in Zuteilungsziellisten. Dadurch können Entwickler von Logiken für den angepassten Resolver diese Klasse erweitern und eine Methode implementieren, die unabhängig von der Quelle der Zuteilungsziele aufgerufen wird.

package curam.core.sl.impl;
      
      ...
      
      public abstract class DefaultWorkResolverAdapter
        implements curam.util.workflow.impl.WorkResolver {
      
        public abstract void resolveWork(
          final TaskDetails taskDetails,
          final AllocationTargetList allocationTargets,
          final boolean previouslyAllocated);
            
            ...
      }

Neben dieser Adapterklasse ist im Lieferumfang dieser Anwendung auch eine sofort einsatzfähige Implementierung für einen geschäftliche Resolver enthalten. Die Klasse heißt curam.core.sl.impl.DefaultWorkResolver und dient ebenfalls als Beispiel zur Erweiterung des Adapters.