Sites


Lutece : guide développeur

Créer une tâche de workflow

Le plugin workflow permet de configurer les traitements que vous souhaitez voir exécuter lorsqu'une action est déclenchée sur une ressource.

Les différents traitements possibles appelés "tâche" sont proposés par les modules de workflow (Notification,génération de pdf... )

Dans le cas ou vous souhaitez créer des tâches spécifiques, il est nécessaire de développer son propre module de workflow.

Pré-requis au développement d'un module de workflow

Le module de workflow doit dépendre du plugin-workflow, pour ce faire il faut ajouter la section suivante dans le fichier pom.xml du module la dépendance suivante:

<dependency>
 <groupId>fr.paris.lutece.plugins</groupId>
 <artifactId>plugin-workflow</artifactId>
 <version>[3.0.0,)</version>
 <type>lutece-plugin</type>
</dependency>

Création d'une tâche de workflow 

 Pour pouvoir créer une tâche de workflow les classes ci-dessous doivent être développées :

  • Une classe MyTask étendant la classe Task de la librairie library-workflow-core et implémentant principalement la méthode processTask.C'est cette méthode qui sera appelée lors de l'exécution de la tâche
  • Une classe MyTaskConfig étendant la classe TaskConfig de la librairie library-workflow-core et destinéz à contenir la configuration de la tâche
  • Une classe MyTaskConfigDAO implémentant l'interface ITaskConfigDAO de la librairie library-workflow-core et stockant en base de données les propriétés de l'objet TaskConfig
  • Une classe  MyTaskConfigService étendant la classe TaskConfigService de la librairie library-workflow-core. Cette classe propose des méthodes de création, modification, suppression de configurations.
  • Une classe MyTaskComponent étendant la classe TaskComponent de la librairie library-workflow-core. Cette classe est utilisée principalement en back office pour afficher et enregistrer les informations de configuration  et en Front office pour intéragir avec l'utilisateur dans le cas ou la tâche a besoin d'un complément d'information avant de s'exécuter (Affichage d'un formulaire associé à la tâche)   
     

MyTask

  • Créer une classe au niveau de la couche service (fr.paris.lutece.plugins.workflow.modules.mymodule.service.MyTask).
  • La nouvelle classe doit étendre la classe abstraite Task définie dans la library-workflow-core :
public class MyTask extends Task
{
 ...
}

La library-workflow-core offre une classe abstraite SimpleTask  héritant de la classe Task et implémentant les méthodes de base de cette dernière.

Cette classe peut être utilisée afin de n'avoir à implémenter que les méthodes principales de la classe Task.

MyTaskConfig

  • Créer une classe au niveau de la couche business (fr.paris.lutece.plugins.workflow.modules.mymodule.business.MyTaskConfig).
  • La nouvelle classe doit étendre la classe abstraite TaskConfig définie dans la library-workflow-core :
public class MyTaskConfig extends TaskConfig
{
 ...
}

MyTaskConfigDAO 

  • Créer une classe au niveau de la couche business (fr.paris.lutece.plugins.workflow.modules.mymodule.business.MyTaskConfigDAO).
  • La nouvelle classe doit implémenter l'interface ITaskConfigDAO définie dans la library-workflow-core
public class MyTaskConfigDAO implements ITaskConfigDAO<MyTaskConfig>
{
 ...
}

MyTaskConfigService 

  • Créer une classe au niveau de la couche service (fr.paris.lutece.plugins.workflow.modules.mymodule.service.MyTaskConfigService).
  • La nouvelle classe doit étendre la classe abstraite TaskConfigService définie dans la library-workflow-core :
public class MyTaskConfigService extends TaskConfigService
{
 ...
}

MyTaskComponent 

  •  Créer une classe au niveau de la couche web (fr.paris.lutece.plugins.workflow.modules.mymodule.web.MyTaskTaskComponent). La nouvelle classe doit étendre la classe abstraite TaskComponent définie dans le plugin-workflow :
public class MyTaskComponent extends TaskComponent
{
 ...
}
  • La library-workflow-core offre deux classes abstraites :
    • TaskComponent: utilise BeanUtils pour enregistrer les configurations de façon automatique.
    • SimpleTaskComponent: peut étre utilisée dans le cas ou la tâche développée ne possède ni configuration ni formulaire intermédiaire.
  • Le plugin-workflow offre trois autres classes abstraites :
    • AbstractTaskComponent implémente une méthode pour valider les beans utilisant les annotations JSR303.
    • NoFormTaskComponent permettant à votre implémentation d'éviter d'implémenter les méthodes concernant le formulaire intermédiaire.
    • NoConfigTaskComponent permettant à votre implémentation d'éviter d'implémenter les méthodes concernant la configuration de la tâche.

Déclaration de la tâche dans le contexte Spring

Dans le fichier de contexte du module (fichier /WEB-INF/conf/plugins/workflow-mytask_context.xml) il faut déclarer les beans définissant la tâche, son type et sa configuration. 

<bean id="workflow-mytask.taskTypeMyTask" class="fr.paris.lutece.plugins.workflowcore.business.task.TaskType"
 p:key="taskMyTask"
 p:titleI18nKey="module.workflow.mytask.task_title"
 p:beanName="workflow-mytask.taskMyTask"
 p:configBeanName="workflow-mytask.taskMyTaskConfig"
 p:configRequired="true"
 p:formTaskRequired="true"
 p:taskForAutomaticAction="true" />

<bean id="workflow-mytask.taskMyTask" class="fr.paris.lutece.plugins.workflow.modules.mytask.service.MyTask" scope="prototype" />

Le bean définissant le type de la tâche doit comporter les attributs suivants

NomDescriptionExemple
key La clé technique de la tâche (doit être unique) taskMyTask
titleI18nKey La clé i18n contenat le titre de la tâche module.workflow.mytask.task_title
beanName Le nom du bean de la tâche (doit être identique à l'ID du bean définissant la tâche) workflow-mytask.taskMyTask
configBeanName Le nom du bean de la configuration de la tâche (doit être identique à l'ID du bean définissant la configuration de la tâche). Ne le définir que si la tâche de workflow a besoin d'une configuration workflow-mytask.taskMyTaskConfig
configRequired Attribut permettant de savoir si la tâche a besoin d'une configuration de l'administrateur technique ou non. Attribut optionnel si la tâche n'a pas besoin de configuration. true
formTaskRequired Attribut permettant de savoir si la tâche a besoin d'un formulaire intermédiaire lors de l'exécution de l'action. Attribut optionnel si la tâche n'a pas besoin de formulaire intermédiaire. true
taskForAutomaticAction Attribut permettant de savoir si la tâche peut être assignée à une action automatique. Attribut optionnel si la tâche ne peux pas être assignée à une action automatique. true 

Si la tâche de workflow nécessite une configuration dynamique alors il faut l'ajouter au fichier de contexte 

<bean id="workflow-mytask.taskMyTaskConfig" class="fr.paris.lutece.plugins.workflow.modules.mytask.business.MyTaskConfig" 
scope="prototype" />

<bean id="workflow-mytask.taskMyTaskConfigService"
class="fr.paris.lutece.plugins.workflow.modules.mytask.service.TaskMyTaskConfigService"
p:taskConfigDAO-ref="workflow-mytask.taskMyTaskConfigDAO" />

Si la tâche de workflow nécessite l'affichage d'un formulaire alors il faut l'ajouter au fichier de contexte 

<bean id="workflow-mytask.myTaskTaskComponent" class="fr.paris.lutece.plugins.workflow.modules.mytask.web.MyTaskTaskComponent"
 p:taskType-ref="workflow-mytask.taskTypeMyTask"
 p:taskConfigService-ref="workflow-mytask.taskMyTaskConfigService" />

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.