Code

Comme indiqué précédemment, n'importe quelle méthode d'objet de processus métier indiquée comme une fonction d'allocation doit renvoyer une structure de type curam.util.workflow.struct.AllocationTargetList.

Comme c'est le cas avec les méthodes métier associées à des activités automatiques, un échec de la fonction d'allocation lorsqu'une activité manuelle est exécutée entraîne l'appel de la stratégie de gestion des erreurs de flux de travaux. Ainsi, l'activité associée à la méthode en échec peut, par exemple, être réessayée plusieurs fois. De ce fait, les fonctions d'allocation associées aux stratégies d'allocation des activités de décision ou manuelles doivent généralement ne pas émettre d'exceptions à moins qu'une situation irrémédiable ne se produise.

L'application doit implémenter l'interface de rappel curam.util.workflow.impl.WorkResolver afin de déterminer comment les tâches seront affectées dans l'application. La propriété de l'application curam.custom.workflow.workresolver doit faire référence à la classe d'implémentation curam.util.workflow.impl.WorkResolver dans l'application étant donné que le moteur de flux de travaux utilisera cette propriété pour déterminer la fonction correcte pour attribuer la tâche.

La classe curam.util.workflow.impl.WorkResolver contient une méthode resolveWork surchargée car les différents types de stratégie d'allocation renvoient les cibles d'allocation dans différents formats. Toutefois, il s'agit d'un détail d'implémentation que les développeurs des classes de programme de résolution de travail personnalisées ne doivent pas avoir à traiter, notamment parce que le traitement métier pour toutes les versions de la méthode doit être le même.

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

Pour atténuer ce problème, curam.core.sl.impl.DefaultWorkResolverAdapter fournit un mécanisme plus pratique pour l'implémentation d'un programme de résolution de travail. Cette classe implémente les différentes méthodes et convertit leurs paramètres d'entrée en listes de cible d'allocation permettant aux développeurs de logique de résolution de travail personnalisé d'étendre cette classe et d'implémenter une méthode qui est appelée quelle que soit la source de cibles d'allocation.

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

Outre cette classe d'adaptateur, l'application est livrée avec une implémentation de résolution de travail prête à l'emploi. Cette classe est appelée curam.core.sl.impl.DefaultWorkResolver et elle sert d'exemple sur la manière d'étendre l'adaptateur.