2 votes

Camunda/Tâches de Service d'Activité

Nous modélisons des processus avec BPM et exécutons ledit BPM avec le moteur Camunda dans un environnement Spring. Dans un scénario, j'aimerais exécuter du code Java personnalisé entre deux tâches utilisateur. Ma conclusion de la lecture de nombreuses documentations de Camunda est que je suis mieux avec le concept de tâche de service.

J'aimerais faire deux choses, l'une est de stocker plus d'une variable de processus avec la tâche de service et deux, de définir de manière dynamique quelles variables de processus correspondent à quel paramètre d'entrée de la tâche de service.

À ma connaissance, Camunda propose deux façons d'intégrer du code Java avec des tâches de service :

1.) Déclarer un Spring-Bean implémentant l'interface JavaDelegate. (La méthode reçoit un DelegateExecution en tant que paramètre). Celui-ci me permettrait de stocker autant de variables de résultat que je le souhaite, mais je ne vois pas d'option pour définir une correspondance variable de processus -> variable d'entrée.

2.) Déclarer un bean Spring générique pour être accessible par Camunda et définir que la méthode de ce bean doit être exécutée par la tâche système. Cela me permet de spécifier le modèle de correspondance variable de processus -> variable d'entrée via la définition BPM, mais stocke au plus une variable de résultat.

Alors, y a-t-il un moyen d'atteindre les deux?

Clarification

Pour clarifier mes exigences, parfois mes tâches système peuvent détecter un état incohérent (dans la base de données ou les variables de processus). J'aimerais que les tâches stockent un code d'erreur (similaire aux codes d'erreur des programmes "exit(1)") dans les variables de processus afin que les tâches utilisateur suivantes aient la possibilité de corriger l'erreur. Ce code d'erreur pourrait également être stocké à un emplacement fixe dans les variables de processus, cependant je veux pouvoir au moins mettre un "résultat réel" dans un emplacement désigné.

2voto

nre Points 1279

Vous devriez être en mesure de mettre en œuvre le comportement dans un bean Spring qui utilise l'exécution actuelle pour lire et mettre à jour les variables.

Vous relieriez le bean Spring nommé myErrorHandler avec une tâche de service comme ceci

La variable execution est disponible dans l'expression par défaut et pointe vers une instance de DelegateExecution qui vous donne accès aux variables du processus actuel.

L'implémentation du bean Spring peut ressembler à ce qui suit :

@Component
public class MyErrorHandler {

  /**
   * Gestionnaire d'erreur effectif invoqué en tant que service
   */
  public void checkError(DelegateExecution execution) {

    execution.getVariables(); // Map des variables

    execution.setVariable("errorCode", 500); // mise à jour de la variable
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X