Esup-Signature

Arborescence des pages

Vous regardez une version antérieure (v. /wiki/spaces/SIGN/pages/992837646/Gestion+des+circuits) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 2) afficher la version suivante »

Esup-signature permet de créer des circuits de signatures puissants dont les paramètres pour chaque l'étape sont :

  • la liste des signataires,
  • le type de signature,
  • si tous les signataires doivent signer à une étape donnée.

Un utilisateur peut se construire son propre circuit à l'aide de l'assistant (voir : https://www.esup-portail.org/wiki/display/SIGN/Documentation+utilisateur#Documentationutilisateur-Assistantdecr%C3%A9ationd'unedemande)

Les administrateurs peuvent, eux, créer des circuits dont les paramètres sont plus poussés :

  • Configuration des autorisations sur les circuit (qui peut démarrer un circuit) à l'aide de rôles (voir : Configuration de la sécurité)
  • Configuration des entrées/sorties pour une récupération et/ou un dépôts automatique des documents
  • Activation ou non de la fonction de scan des documents PDF (dans ce cas la description du circuit se trouve dans les métas-données du PDF)

Dans "Admin" puis "Circuit", vous avez accès à l'outil permet de consulter et de modifier les circuits de signatures. Il est possible de filtrer les circuits présents dans esup-signature :

  • Workflows globaux (définis pas les administrateurs)
  • Classes workflow (définies par les développeurs)
  • Workflows Utilisateurs (définis pas les utilisateurs)

Création d'un circuit classique

Pour ajouter un nouveau circuit via l'interface graphique, cliquez sur le bouton bleu "+" puis saisissez un nom et un prefix (utilisé pour le nommage des documents lors des imports).

Vous serez redirigé vers la page d'ajout des étapes circuit. Utilisez le bouton pour ajouter une étape :

Le formulaire d'ajout est simplifié. Il permet juste de configurer les paramètres suivants pour l'étape :

  • la description
  • laisser à l’utilisateur, qui démarre le circuit, la possibilité de modifier les participants de l'étape
  • les participants (si plusieurs participant, la possibilité d'imposer toutes les signatures est proposée)
  • le type de signature

Chaque étape ajoutée est représenté par un pavé reprenant les paramètre et donnant la possibilité des les modifier :

Chaque étape est indépendante. De ce fait, il faudra enregistrer vos modifications étape par étape.

Attention à l'ordre des étapes, il n'est pas possible d'en modifier l'ordre. Il faudra supprimer puis recréer les étapes si besoin

Dans cette vue il est possible d'activer la notion d'étape "infinie" en activant "L'utilisateur peut ajouter une étape avant la suivante". Si cette option est activée, vous donnerez la possibilité aux participants de cette étape, d'ajouter des étapes intermédiaires (non prévues à l'origine).

Chaque étape créée à la suite d'une étape "infinie" sera elle aussi une étape "infini". Cela se traduit, au niveau de l'interface utilisateur, par une question qui lui est posée lorsque qu'il s’apprête à signer : "Signer et passer à l'étape suivante" ou "signer et ajouter une étape"


Paramètres généraux d'un circuit

Dans l'onglet Paramètre de votre circuit, vous pourrez modifier sa configuration globale :

  • Titre
  • Description (celle qui apparaît sur le le bouton permettant de démarrer le circuit)
  • Le paramètre "Scanner les métadonnées" (valable seulement pour les documents provenant d'une source de donnée)

Définir les participants à un circuit à posteriori

Dans certains cas, les participants à une étape ne peuvent pas être prédéfinis dan esup-signature.

Dans le cas concret du circuit des bons de commande à l'université de Rouen, les signataires sont détermines en fonction de l'unité budgétaire (donc par l'application métier, SIFAC).

Le cas d'usage à Rouen est que les utilisateurs génèrent des bon de commande "à signer" au format PDF et les déposent dans leur dossier de travail.

Deux cas possible :

  • Mettre en place un script qui va calculer le workflow, utiliser les web-services pour configurer les participants du circuit des bons de commandes et injecter le document. (pour plus de détails sur les web services voir : Web services REST)

  • Mettre en place un script qui calcule le workflow, inscrit ce workflow dans les métas-données  du document (PDF) et le copie dans un dossier défini comme "source" au niveau d'Esup-signature.
    Pour cette dernière solution il faut donc créer un circuit comme vu précédemment, cocher la case "Scanner les metadonnées des PDF" et définir une source pour la récupération des documents au niveau des paramètres généraux

Les métas-données qui doivent être inscrite dans les document PDF sont les suivantes:

  • sign_type_default_val : contenant le type de signature (visa, pdfImageStamp, certSign ou nexuSign)
  • sign_step#<n> : contenant la liste des participant de l'étape n
  • sign_target : contenant le chemin de dépot des documents après signature

Lorsque le scheduler passera pour importer les documents, ceux-ci seront analysés, le circuit sera généré en fonction des informations trouvées dans les métas-données.

Exemple de code java permettant d'ajouter les métas-données à un fichier pdf :

PDDocument document = PDDocument.load(in);
PDDocumentInformation info = document.getDocumentInformation();
info.setCustomMetadataValue("sign_type_default_val", "pdfImageStamp");
info.setCustomMetadataValue("sign_step#1", "[machin@univ-ville.fr, truc@univ-ville.fr]");
info.setCustomMetadataValue("sign_target_key","smb://serveur_de_fichiers/la_destination/signed");

Utiliser les classes workflow

Pour les cas les plus spécifiques, il est possible d'ajouter, au sources originales, une classe qui décrira précisément un circuit.

L’intérêt de cette solution est de pouvoir mettre en place des mécanismes complexes de calcul des participants. On peut par exemple imaginer de calculer le n+1 de l'utilisateur courant. Cela nécessite d'avoir des compétences en développement et connaitre notamment le langage Java et le framework Spring

Une nouvelle classe workflow devra implémenter la classe "DefaultWorkflow". Des exemples sont déjà présent dans le code source original d'Esup-signature dans le dossier 

src/main/java/org/esupportail/esupsignature/service/workflow/impl/

Votre classe doit être construite comme suit :

package org.esupportail.esupsignature.service.workflow.impl;

import org.esupportail.esupsignature.entity.Data;
import org.esupportail.esupsignature.entity.User;
import org.esupportail.esupsignature.entity.WorkflowStep;
import org.esupportail.esupsignature.entity.enums.SignType;
import org.esupportail.esupsignature.exception.EsupSignatureUserException;
import org.esupportail.esupsignature.service.workflow.DefaultWorkflow;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class BasicWorkflow extends DefaultWorkflow {

   private String name = "BasicWorkflow";
   private String description = "Une signature";
   private List<WorkflowStep> workflowSteps;

   @Override
   public String getName() {
      return name;
   }

   @Override
   public String getDescription() {
      return description;
   }

   @Override
   public List<WorkflowStep> getWorkflowSteps() {
      if(this.workflowSteps == null) {
         try {
            this.workflowSteps = generateWorkflowSteps(userService.getCurrentUser(), null, null);
         } catch (EsupSignatureUserException e) {
            return null;
         }
      }
      return this.workflowSteps;
   }

   public void initWorkflowSteps() {
      this.workflowSteps = new ArrayList<>();
   }

   @Override
   public List<WorkflowStep> generateWorkflowSteps(User user, Data data, List<String> recipentEmailsStep) throws EsupSignatureUserException {
      List<WorkflowStep> workflowSteps = new ArrayList<>();
/* ici on construit la liste des étapes du circuit */
      WorkflowStep workflowStep = new WorkflowStep();
      workflowStep.setStepNumber(1);
      workflowStep.setSignType(SignType.pdfImageStamp);
      workflowStep.setDescription("Choix du signataire");
      workflowStep.setChangeable(true);
      if(data != null) {
         workflowStep.setRecipients(workflowService.getFavoriteRecipientEmail(1, data.getForm(), recipentEmailsStep, user));
      } else {
         workflowStep.getRecipients().add(recipientService.createRecipient(null, userService.getGenericUser("Utilisateur issue des favoris", "")));
      }
      workflowSteps.add(workflowStep);
      return workflowSteps;
   }
}


Il faut donc a minima :

  • Préciser un nom et une description (dans name et description)
  • Implémenter la fonction generateWorkflowSteps() qui retournera une liste de WorkFlowStep, les étapes calculée en fonction de l'utilisateur courant "user"


  • Aucune étiquette