Delegates

Dans un processus, l’enchaînement des étapes utilisateurs nécessite souvent l’ajout d’une certaine logique. La notion d’étape technique est ainsi évoquée : des étapes non visibles par les utilisateurs permettant d’assurer la logique entre les étapes utilisateurs.

Une étape technique peut être de différentes sortes :

  • ScriptTask
  • ServiceTask

FlowerDocs simplifie les tâches personnalisées en mettant à disposition des ServiceTask.

Java Delegate

Principe

Que ce soit pour des questions de traçabilité ou de suivi, certains processus requièrent la conservation de certaines informations au-delà de la vie d’un processus. Pour cela, FlowerDocs fournit un Delegate permettant de générer une empreinte d’un processus à partir de la tâche stockée dans la variable Camunda ${component} mise à jour automatiquement au fur et à mesure des étapes utilisateurs.

Configuration

La configuration de la génération d’empreinte est basée sur l’identifiant d’une classe de tâches. Lors de la génération de l’empreinte, les informations de la tâche sont automatiquement filtrées en fonction de la configuration de la classe de tâches.

Paramètre Valeur Obligatoire Description
Name Expression Non Nom de la tâche empreinte créée
Component Expression Oui Composant à partir duquel la tâche est créée (exemple : ${component})
classId String Oui classId de la tâche Empreinte


Exemple BPMN

<bpmn:endEvent id="fingerPrint" camunda:modelerTemplate="fingerPrint">
      <bpmn:extensionElements>
        <camunda:inputOutput>
          <camunda:inputParameter name="component">${component}</camunda:inputParameter>
          <camunda:inputParameter name="name">fingerprint task name</camunda:inputParameter>
          <camunda:inputParameter name="classId">FingerPrint</camunda:inputParameter>
        </camunda:inputOutput>
        <camunda:executionListener event="start">
          <camunda:script scriptFormat="JavaScript">${saveFingerPrintDelegate.execute(execution)};</camunda:script>
        </camunda:executionListener>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_1gpxbbi</bpmn:incoming>
</bpmn:endEvent>


L’empreinte générée est stockée comme une tâche avec le statut CLOSE interdisant toute modification de cette tâche par les utilisateurs.

Extraction d’un tag

A partir d’un composant, ce délégué permet d’extraire la valeur d’un de ses tags. La valeur extraite est stockée dans une variable et peut ainsi être exploitée dans la suite du processus.

Si le tag est monovalué, la valeur extraite est une chaîne de caractères. Si le tag est multi-valué, la valeur extraite est une liste de chaînes de caractères contenant les différentes valeurs.

Paramètre Valeur Obligatoire Description
Name String Oui Nom du tag
Component Expression Oui Composant à partir duquel le tag doit être extrait (exemple : ${component})
Output variable String Oui Nom de la variable de sortie dans laquelle est stockée la valeur du tag extraite


Exemple BPMN

<bpmn:serviceTask id="ServiceTask_23thl7w" name="Get tag value" camunda:delegateExpression="${getTagValueDelegate}">
    <bpmn:extensionElements>
        <camunda:field name="tagName">
            <camunda:expression>${tagNameExp}</camunda:expression>
        </camunda:field>
        <camunda:field name="output">
            <camunda:expression>tagResult</camunda:expression>
        </camunda:field>
        <camunda:field name="component">
            <camunda:expression>${componentExp}</camunda:expression>
        </camunda:field>
    </bpmn:extensionElements>
</bpmn:serviceTask>

Ajout d’un composant dans un dossier

Ce délégué permet d’ajouter un composant dans un dossier.

Paramètre Valeur Obligatoire Description
Folder identifier String Oui Identifiant du dossier auquel ajouter un composant
Child category String Oui Catégorie du composant à ajouter au dossier
Child identifier Expression Oui Identifiant du composant à ajouter au dossier (exemple: ${component.getId().getValue()})


Exemple BPMN

<bpmn:serviceTask id="ServiceTask_23thl7w" name="Add folder child" camunda:delegateExpression="${addFolderChildDelegate}">
    <bpmn:extensionElements>
    <camunda:field name="id">
        <camunda:expression>${folderId}</camunda:expression>
    </camunda:field>
    <camunda:field name="category">
        <camunda:expression>DOCUMENT</camunda:expression>
    </camunda:field>
    <camunda:field name="childId">
        <camunda:expression>${documentId}</camunda:expression>
    </camunda:field>
    </bpmn:extensionElements>
</bpmn:serviceTask>

Génération de contenu

Ce délégué permet de générer :

Le fichier généré est stocké comme un fichier temporaire et est donc accessible pendant une durée limitée. Son identifiant est de la forme tmp_<uuid>.

Paramètre Valeur Obligatoire Description
Template String Oui Nom du template à utiliser
Name String Oui Nom du fichier généré
Output variable String Oui Nom de la variable de sortie dans laquelle est stockée l’identifiant du fichier généré


Exemple BPMN

<bpmn:serviceTask id="ServiceTask_23thl7w" name="Generate HTML File" camunda:delegateExpression="${generateFileDelegate}">
    <bpmn:extensionElements>
        <camunda:field name="template">
            <camunda:expression>document-template.html</camunda:expression>
        </camunda:field>
        <camunda:field name="outputFormat">
            <camunda:expression>HTML</camunda:expression>
        </camunda:field>
        <camunda:field name="name">
            <camunda:expression>generated-document.html</camunda:expression>
        </camunda:field>
        <camunda:field name="outputVariable">
            <camunda:expression>output</camunda:expression>
        </camunda:field>
    </bpmn:extensionElements>
</bpmn:serviceTask>

Export des résultats de recherche

Ce délégué permet d’exporter les résultats d’une recherche au format CSV. En sortie, l’identifiant du fichier temporaire contenant les résultats de recherche est fourni dans une variable.

Paramètre Valeur Obligatoire Description
Search Search Oui Recherche utilisée
Locale String Oui Locale à laquelle les resultats s’adaptent
Output variable String Oui Nom de la variable de sortie dans laquelle est stocké l’identifiant du fichier d’exportation généré


Exemple BPMN

<bpmn:serviceTask id="Task_9cu64ie" name="Export search results" camunda:modelerTemplate="com.flower.docs.bpmn.ExportSearchResults" camunda:delegateExpression="${exportSearchResultsDelegate}">
	<bpmn:extensionElements>
		<camunda:field name="search">
			<camunda:expression>${search}</camunda:expression>
		</camunda:field>
		<camunda:field name="locale">
          <camunda:string>fr</camunda:string>
        </camunda:field>
		<camunda:field name="output">
          <camunda:expression>fileId</camunda:expression>
		</camunda:field>
	</bpmn:extensionElements>
</bpmn:serviceTask>

Ce délégué nécessite un objet Search en entrée. Cet objet peut être instancié depuis une tâche de type Script avec le code Javascript suivant :

var name = com.flower.docs.domain.FlowerFields.NAME;
var creationDate = com.flower.docs.domain.FlowerFields.CREATION_DATE;
var documentCategory = com.flower.docs.domain.component.Category.DOCUMENT;
var request = com.flower.docs.common.search.SearchRequestBuilder.init().display(name).display(creationDate).start(0).max(10).build();
var search = com.flower.docs.common.virtualfolder.SearchBuilder.init(documentCategory).build();
search.setRequest(request);
search

Conversion PDF

La conversion de fichiers en PDF est réalisée à l’aide d’un serveur de rendition ARender.

Pour pouvoir être converti, le format doit être :

  • supporté par le serveur de rendition utilisé configuré au niveau du Core
  • défini dans les formats pouvant être convertis dans le fichier core.properties à l’aide de la propriété convert.pdf.formats

Contenu de document

Ce délégué permet de convertir le contenu (ou fichier) d’un document au format PDF. Le fichier converti au format PDF est stocké comme un fichier temporaire et son identifiant est stocké dans une variable du processus.

Paramètre Valeur Obligatoire Description
Document identifier String Oui Identifiant du document à convertir
File identifier String Oui Identifiant du fichier à convertir
Locale String Oui Locale utilisée pour la conversion
Output variable String Oui Nom de la variable de sortie dans laquelle est stocké l’identifiant du fichier converti


Exemple BPMN

<bpmn:serviceTask id="ServiceTask_89ald2t" name="Convert document file" camunda:delegateExpression="${convertDocumentFileDelegate}">
	<bpmn:extensionElements>
		<camunda:field name="documentId">
			<camunda:expression>${documentIdExp}</camunda:expression>
		</camunda:field>
		<camunda:field name="fileId">
			<camunda:expression>${fileIdExp}</camunda:expression>
		</camunda:field>
		<camunda:field name="locale">
			<camunda:expression>${localeExp}</camunda:expression>
		</camunda:field>
		<camunda:field name="output">
			<camunda:expression>convertResult</camunda:expression>
		</camunda:field>
	</bpmn:extensionElements>
	<bpmn:incoming>SequenceFlow_56thj6z</bpmn:incoming>
	<bpmn:outgoing>SequenceFlow_73dtn5i</bpmn:outgoing>
</bpmn:serviceTask>

Fichier temporaire

Ce délégué permet de convertir un fichier temporaire au format PDF. Le fichier converti au format PDF est stocké comme un fichier temporaire et son identifiant est stocké dans une variable du processus.

Paramètre Valeur Obligatoire Description
File identifier String Oui Identifiant du ficher temporaire à convertir
Locale String Oui Locale utilisée pour la conversion
Output variable String Oui Nom de la variable de sortie dans laquelle est stocké l’identifiant du fichier converti


Exemple BPMN

<bpmn:serviceTask id="ServiceTask_89ald2t" name="Convert temporary file" camunda:delegateExpression="${convertTempFileDelegate}">
	<bpmn:extensionElements>
		<camunda:field name="fileId">
			<camunda:expression>${fileIdExp}</camunda:expression>
		</camunda:field>
		<camunda:field name="locale">
			<camunda:expression>${localeExp}</camunda:expression>
		</camunda:field>
		<camunda:field name="output">
			<camunda:expression>convertResult</camunda:expression>
		</camunda:field>
	</bpmn:extensionElements>
	<bpmn:incoming>SequenceFlow_56thj6z</bpmn:incoming>
	<bpmn:outgoing>SequenceFlow_73dtn5i</bpmn:outgoing>
</bpmn:serviceTask>