--- title: "Configuration d'un circuit d'approbation (code)" slug: "configuration-dun-circuit-dapprobation-code" updated: 2022-11-20T14:47:55Z published: 2022-11-20T14:47:55Z canonical: "help.cooperlink.io/configuration-dun-circuit-dapprobation-code" --- > ## Documentation Index > Fetch the complete documentation index at: https://help.cooperlink.io/llms.txt > Use this file to discover all available pages before exploring further. # Configuration d'un circuit d'approbation (code) Cet article s'applique aux licences DELIVER EMPOWER ## Objet de l'article Cet article explique comment créer et modifier des workflows en vue de leur utilisation pour des circuits d'approbation de documents, à l'aide de l'interface code JSON de Cooperlink. NOTE IMPORTANTECet exemple de configuration est réalisé sur la base du tutoriel Fiches techniques et dossier As-Built et du document de référence disponible en bas de cet article. ## **Qu'est-ce qu'un workflow?** Cooperlink dispose d'un moteur qui permet de générer une succession d'actions automatisées ou à destination de l'utilisateur final (le workflow). Nous allons étudier ici la configuration du workflow en vue de son utilisation pour les circuits d'approbation de documents. ## **Prérequis** - La connaissance du code, et du JSON en particulier est nécessaire. [Bases de la notation JSON](/v2/docs/bases-de-la-notation-json). - Le moteur de workflow utilise le concept de carte. Veuillez vous référer à la section correspondante pour plus d'information en [cliquant ici](/docs/quest-ce-quune-carte). - Une espace de travail doit préalablement exister. Pour plus d'information, voir [Configurer un nouvel espace de travail en mode manuel (+ checklist)](/v2/docs/creer-un-nouvel-espace-de-travail-en-mode-manuel). - La connaissance des principes de base des workflows est requise. Voir article [Généralités sur les workflows et terminologie](/v2/docs/generalites-sur-les-workflows-et-terminologie). ## **Préparation à la création d'un circuit d'approbation** ### Demande du client Dans cet exemple, nous allons créer un **circuit d'approbation pour documents d'architecture** en deux étapes : - A la **première étape**, l'architecte (AR), le BE Stabilité (STAB) et le BE Techniques spéciales (MEP) sont invités à consulter le document et à y répondre. Ils peuvent chacun approuver, approuver avec remarques, refuser ou indiquer ne pas être concerné par le document. Ils peuvent également commenter leur réponse, ajouter une pièce jointe ou annoter le document (PDF uniquement). En cas de réponse négative (au moins une pour l'ensemble des contributeurs de cette étape), le workflow s'arrête. - A la **deuxième étape**, l'auteur de projet (PM) est invité à consulter le document et à y répondre. Il ne peut qu'accepter ou refuser le document. Il peut également commenter sa réponse. En cas de réponse positive, le workflow est clôturé avec succès. - Dans tous les cas, en cas de réponse avec commentaire, celle-ci est considérée comme acceptée. - Seuls l'architecte et l'auteur de projet sont obligatoires dans ce circuit d'approbation. Les autres contributeurs peuvent être consultés à la demande. ![](https://cdn.document360.io/c21b52e3-341e-4ea9-8692-3488bd21cd8d/Images/Documentation/image-1668951706102.png) ### Etape 1. Créer une carte espace de travail Créez une carte espace de travail, ou éditez une carte existante. La carte espace de travail va permettre de pré-configurer certaines valeurs par défaut lors du démarrage du workflow (voir [Pré-remplissage des données - Héritage entre cartes](/v2/docs/preremplissages-donnees-heritage-cartes)). Associez cette carte à l'espace de travail concerné et attribuez des valeurs à ces champs en vous rendez dans les paramètres de l'espace de travail, section aperçu. Pour notre exemple de circuit d'approbation, la carte espace de travail contient les champs suivants : | **Nom** | **Type** | **Clé** | **Liste de valeurs** | **Paramètres** | | --- | --- | --- | --- | --- | | Architecte | User | company_project_ar | | | | BE Stabilité | User | company_project_stab | | | | BE Techniques spéciales | User | company_project_mep | | | | Auteur de projet | User | company_project_pm | | | | Conformité | Value list | company_project_conformity | Y\|Oui N\|Non | | | Echantillon | Value list | company_project_sample | Y\|Oui N\|Non | | | Impact financier | Value list | company_project_financial_impact | Y\|Oui N\|Non | | | Statut d'archivage | Value list | company_project_workflow_status | AA\|Actif AB\|Archive pour As-Built AC\|Archive pour mémoire | | ### Etape 2. Créer une carte documents Créez une carte documents, ou éditez une carte existante. La carte documents est la fiche d'identité du document sujet du circuit d'approbation. Les informations contenues dans cette carte documents pourront être réutilisées dans la carte de démarrage du workflow (voir [Pré-remplissage des données - Héritage entre cartes](/v2/docs/preremplissages-donnees-heritage-cartes)). Associez cette carte documents à l'espace de travail concerné. Pour notre exemple de circuit d'approbation, la carte documents contient les champs suivants : | **Nom** | **Type** | **Clé** | **Liste de valeurs** | **Paramètres** | | --- | --- | --- | --- | --- | | Révision | Value list | company_project_revision | 0\|Initial revision (0) A\|Revision A B\|Revision B C\|Revision C D\|Revision D X\|Placeholder (X) | | | Type de document | Value List | company_project_document_type | AD\|Administration (AD) TF\|Technical sheet (TF) CN\|Calculation note (CN) PL\|Detailed drawing / plan (PL) SA\|Sample (SA) CO\|Correspondence (CO) PI\|Picture (PI) FI\|Finance (FI) | Obligatoire | | Discipline | Value list | company_project_package | GENE\|General (GENE) ARCH\|Achitecture (ARCH) STAB\|Stability (STAB) ELEC\|Electricity (ELEC) SANI\|Sanitary (SANI) HVAC\|HVAC (HVAC) LIFT\|Lift (LIFT) INFR\|Infrastructure (INFR) | Obligatoire | | Numéro | Numeric | company_project_number | | Numérotation automatique Obligatoire | | Description | Text | company_project_description | | | | Ref. specifications | Text | company_project_specifications | | Sélection multiple | | Fabricant | Text | company_project_manufacturer | | | | Fournisseur | Text | company_project_supplier | | | | Produit | Text | company_project_product | | | ### Etape 3. Créer la carte de démarrage workflow Créez une carte workflows, ou éditez une carte existante. La carte de démarrage est le formulaire affiché au démarrage d'un circuit d'approbation. Les informations de cette carte de démarrage seront partiellement pré-complétées (voir [Pré-remplissage des données - Héritage entre cartes](/v2/docs/preremplissages-donnees-heritage-cartes)). Notez l'identifiant (ID) de cette carte. Pour notre exemple de circuit d'approbation, la carte de démarrage contient les champs suivants : | **Nom** | **Type** | **Clé** | **Liste de valeurs** | **Paramètres** | | --- | --- | --- | --- | --- | | Révision | Value list | company_project_revision | Répeter la liste de valeurs de la carte documents | | | Commentaire de revue | Text | company_project_review_description | | | | Type de document | Value List | company_project_document_type | Répeter la liste de valeurs de la carte documents | Obligatoire | | Discipline | Value list | company_project_package | Répeter la liste de valeurs de la carte documents | Obligatoire | | Numéro | Numeric | company_project_number | | Numérotation automatique Obligatoire | | Titre | Text | company_project_title | | Obligatoire | | Description | Text | company_project_description | | | | Ref. specifications | Value list | company_project_specifications | 10\|10 Earthworks 11\|11 Foundations 12\|12 Reinforcement 13\|13 Masonry 14\|14 Insulation 15\|15 Roof 16\|16 Doors and windows 17\|17 Electricity 18\|18 HVAC 19\|19 Carpentry | Sélection multiple | | Fabricant | Text | company_project_manufacturer | | | | Fournisseur | Text | company_project_supplier | | | | Produit | Text | company_project_product | | | | Conformité | Value list | company_project_conformity | Y\|Oui N\|Non | Obligatoire | | Echantillon | Value list | company_project_sample | Y\|Oui N\|Non | Obligatoire | | Impact financier | Value list | company_project_financial_impact | Y\|Oui N\|Non | Obligatoire | | Localisation | Text | company_project_plan | | | | Annexes | Text | company_project_annexes | | | | Architecte | User | company_project_ar | | Obligatoire Activé par défaut | | BE Stabilité | User | company_project_stab | | Désactivé par défaut | | BE Techniques spéciales | User | company_project_mep | | Désactivé par défaut | | Auteur de projet | User | company_project_pm | | Obligatoire Activé par défaut | | Statut d'archivage | Value list | company_project_workflow_status | AA\|Actif AB\|Archive pour As-Built AC\|Archive pour mémoire | Obligatoire | ### Etape 4a. Créer la carte de réponse workflow pour la première étape Créez une seconde carte workflows, ou éditez une carte existante. La carte de réponse est la carte transmis aux contributeurs pour réponse. Notez l'identifiant (ID) de cette carte. Pour notre exemple de circuit d'approbation, la carte de réponse contient les champs suivants : | **Nom** | **Type** | **Clé** | **Liste de valeurs** | **Paramètres** | | --- | --- | --- | --- | --- | | Votre réponse | Value list | company_project_answer | A\|Accepté (A) B\|Accepté avec commentaire (B) C\|Refusé (C) D\|Non concerné (D) | Obligatoire Résultats: A, B, D | | Commentaire optionnel | Text | company_project_comment | | | ### Etape 4b. Créer la carte de réponse workflow pour la seconde étape Créez une seconde carte workflows, ou éditez une carte existante. La carte de réponse est la carte transmis aux contributeurs pour réponse. Notez l'identifiant (ID) de cette carte. Pour notre exemple de circuit d'approbation, la carte de réponse contient les champs suivants : | **Nom** | **Type** | **Clé** | **Liste de valeurs** | **Paramètres** | | --- | --- | --- | --- | --- | | Votre réponse | Value list | company_project_answer | A\|Accepté (A) B\|Accepté avec commentaire (B) C\|Refusé (C) | Obligatoire Résultats: A, B | | Commentaire optionnel | Text | company_project_comment | | | ## Configurer un nouveau modèle de workflow ### Etape 5. Créer un nouveau workflow Accédez aux Paramètres de l'application, section Modèles de workflow. Créez un nouveau modèle de workflow. Editez le label et la description comme suit : COMPANY - Workflow Example![](https://cdn.document360.io/c21b52e3-341e-4ea9-8692-3488bd21cd8d/Images/Documentation/image-1668951451157.png) Dans l'éditeur de code JSON, sélectionnez le mode Code. Sélectionnez tout le code (CTRL+A), copiez-le (CTRL+C) et collez le dans un éditeur de texte ou un éditeur de code (p.ex. Komodo Edit, Notepad++). ![](https://cdn.document360.io/c21b52e3-341e-4ea9-8692-3488bd21cd8d/Images/Documentation/image-1668948762332.png) ### Etape 6a. Configurer le workflow - INTRODUCTION Le code d'un workflow est décomposé en 4 grandes sections : - Les propriétés de base du workflow - Les étapes (states) - Les actions (actions) - Les séquences (sequences) A LIRE - Propriétés du workflowPour plus d'informations sur les propriétés du workflow, voir [Propriété des workflows](/v2/docs/propriete-des-workflows)CONSEILPour créer un nouveau workflow, utilisez un workflow existant et éditez les valeurs souhaitées. Un code exemple est repris en bas de cet article. Attention, les propriétés non éditables du workflow nouvellement créé ne doivent pas être altérées. ### Etape 6a. Configurer le workflow - PROPRIETES DE BASE Cette section contient tout d'abord un ensemble de **propriétés non éditables**. Elles sont calculés automatiquement par Cooperlink. ```json "id": 117, "creationUserId": 509, "creationDate": "2022-11-11T09:40:00.938815Z", "lastUpdateUserId": 509, "lastUpdateDate": "2022-11-14T11:28:08.036529Z", "templateId": 123, ``` Ensuite s'ajoutent une série de **propriétés éditables selon les besoins du workflow**. Voir [Propriété des workflows](/v2/docs/propriete-des-workflows) pour plus d'informations à ce sujet. - Indiquez l'identifiant (ID) de la carte de démarrage à la propriété startCardDesignId - Adaptez le masque de label pour nommer votre workflow selon votre souhait ```json "label": "COMPANY - Workflow Example", "description": "COMPANY - Workflow Example", "targetType": "LIBRARY_MAPPING", "startCardDesignId": 189, "usePreviousStartCard": true, "labelMask": "{{company_project_document_type}}-{{company_project_package}}-{{company_project_number}}-rev{{company_project_revision}}-{{company_project_title}}", "longCommentsItem": "company_project_comment", "longCommentsLimit": 150, "longCommentsWarning": "Long comment. Please read next page.", "icon": "fa-building", ``` ### Etape 6b. Configurer le workflow - STATES La propriété States constitue un tableau JSON. Le workflow est découpé en macro-étapes auxquelles nous donnons un titre sous forme de texte libre. ```json "states": [ { "name": "Approval Council" }, { "name": "Approval PM" }, { "name": "Approved" } ], ``` ### Etape 6c. Configurer le workflow - ACTIONS (structure) Précédemment, nous avons créé des cartes de réponse que nous allons attribuer aux intervenants. Pour ce faire, nous allons créer une ou plusieurs actions de type *.actions.createCard*. Cette action est non bloquante, c'est-à-dire que si elle n'est pas assignée à un utilisateur/partenaire, elle est ignorée. Ensuite, nous allons créer une action *.actions.waitForOpenCard* dans l'attente des actions utilisateurs. Cette action *waitFor* attend le résultat de ensemble des cartes de l'étape *state* avant d'être exécutée. Pour l'exemple, nous allons créer la structure de code suivante à l'aide des étapes 6d et suivantes. ```json "actions": [ // actions first state // waitFor actions first state // actions second state // waitFor actions second state // waitFor action final state } ``` ### Etape 6d. Configurer le workflow - ACTIONS STATE 1 (en parallèle) Nous allons ici créer les actions de la première étape (state). Une action de type .createCard est assignée à l'architecte, le BE Stabilité et le BE Techniques spéciales. Nous observons la structure suivante : - Un objet JSON qui représente l'action createCard pour l'architecte - Un objet JSON qui représente l'action createCard pour le BE Stabilité - Un objet JSON qui représente l'action createCard pour le BE Techniques spéciales Parallèle ou série ?Tant qu'aucune instruction .waitForOpenCards n'est rencontrée, cela signifie que ces actions s'exécutent parallèle. Pour créer des instructions en série, il faut donc les séparer par des instructions .waitForOpenCards. ```json { "objectType": ".actions.CreateCard", "key": "company_project_action_ar", "title": { "literal": "AR" }, "description": { "literal": "Please consult document and fill in form" }, "assignedUser": { "metaDataDefinition": { "elementType": "CARD", "name": "company_project_ar" } }, "dueDate": { "remainingDays": 7, "metaDataDefinition": null, "onlyWorkingDays": false }, "addTask": true, "cardDesignId": 190 }, { "objectType": ".actions.CreateCard", "key": "company_project_action_stab", "title": { "literal": "STAB" }, "description": { "literal": "Please consult document and fill in form" }, "assignedUser": { "metaDataDefinition": { "elementType": "CARD", "name": "company_project_stab" } }, "dueDate": { "remainingDays": 7, "metaDataDefinition": null, "onlyWorkingDays": false }, "addTask": true, "cardDesignId": 190 }, { "objectType": ".actions.CreateCard", "key": "company_project_action_mep", "title": { "literal": "MEP" }, "description": { "literal": "Please consult document and fill in form" }, "assignedUser": { "metaDataDefinition": { "elementType": "CARD", "name": "company_project_mep" } }, "dueDate": { "remainingDays": 7, "metaDataDefinition": null, "onlyWorkingDays": false }, "addTask": true, "cardDesignId": 190 }, ``` ### Etape 6e. Configurer le workflow - WAITFOR STATE 1 Chaque étape est terminée par une action de type .actions.WaitForOpenCards. Le moteur de workflows Cooperlink attend donc les réponses aux différentes cartes précédemment attribuées. ```json { "objectType": ".actions.WaitForOpenCards", "key": "company_project_wait_state1", "stateName": "Approval Council", "completeIfNOK": true }, ``` **IMPORTANT :** le *stateName* doit être strictement identique à l'un des states créés à l'étape 6b ### Etape 6f. Configurer le workflow - STATE 2 (en série) Nous allons répétez une opération similaire pour la deuxième étape (*state*). Ici il n'y a qu'une seule action avant l'instruction .waitForOpenCards, cela signifie que cette instruction est exécutée en série, c'est-à-dire après que les autres actions ont été clôturées. ```json { "objectType": ".actions.CreateCard", "key": "company_project_action_pm", "title": { "literal": "PM" }, "description": { "literal": "Please consult document and fill in form" }, "assignedUser": { "metaDataDefinition": { "elementType": "CARD", "name": "company_project_pm" } }, "dueDate": { "remainingDays": 7, "metaDataDefinition": null, "onlyWorkingDays": false }, "addTask": true, "cardDesignId": 190 }, ``` ### Etape 6g. Configurer le workflow - WAITFOR STATE 2 Nous ajoutons également une instruction d'attente pour la seconde étape (state). ```json { "objectType": ".actions.WaitForOpenCards", "key": "company_project_wait_state2", "stateName": "Approval PM", "completeIfNOK": true }, ``` ### Etape 6h. Configurer le workflow - ACTION FINALE Lorsqu'un workflow se termine, il affiche par défaut le nom du dernier *state*. Afin d'afficher dans l'application un nom convivial à l'utilisateur lorsque le workflow s'est terminé avec succès, il est de bonne pratique de créer un state ainsi qu'une action de finalisation du workflow comme suit : ```json { "objectType": ".actions.WaitForOpenCards", "key": "company_project_wait_final", "stateName": "Approved" } ``` 🔥 SYNTAXE JSONNotez l'absence de virgule après la parenthèse fermante. Le dernier objet en synthase JSON ne contient jamais de virgule. En présence d'une virgule fermante, le moteur Cooperlink ne pourra pas exécuter correctement les requêtes. ### Etape 6i. Configurer le workflow - SEQUENCES Les séquences définissent les relations entre les actions (c'est-à-dire les flèches entre les actions). Il faut donc indiquer au moteur de workflow l'ordre d'exécution des actions. ```json "sequences": [ { "endPoint": null, "from": "company_project_action_ar", "to": "company_project_action_stab" }, { "endPoint": null, "from": "company_project_action_stab", "to": "company_project_action_mep" }, { "endPoint": null, "from": "company_project_action_mep", "to": "company_project_wait_state1" }, { "endPoint": null, "from": "company_project_wait_state1", "to": "company_project_action_pm" }, { "endPoint": null, "from": "company_project_action_pm", "to": "company_project_wait_state2" }, { "endPoint": null, "from": "company_project_wait_state2", "to": "company_project_wait_final" } ] ``` Sur base du schéma ci-avant, les actions company_project_actions_ar, company_project_actions_stab et company_project_actions_mep sont exécutées en parallèle. L'action company_project_actions_pm est par contre exécutée après que les autres actions ont été clôturées (en série). ## Félicitations! Vous avez terminé la configuration du workflow. ## Attachments - [Company Project Workflow Example.json](https://cdn.document360.io/c21b52e3-341e-4ea9-8692-3488bd21cd8d/Images/Documentation/Company Project Workflow Example.json) - [COMPANY PROJECT Cooperlink Configuration Request.xlsx](https://cdn.document360.io/c21b52e3-341e-4ea9-8692-3488bd21cd8d/Images/Documentation/COMPANY PROJECT Cooperlink Configuration Request.xlsx)