Modèles de document

Cet article détaille l’utilisation de modèle et leur génération afin de fluidifier la production des documents et de garantir le respect de la charte graphique ou encore des informations obligatoires.
Modèles de document

08/03/2021

Dans le cadre de système de GED produisant des documents, les entreprises peuvent avoir besoin d’utiliser des modèles de documents assurant un cadre identique à l’ensemble de leurs collaborateurs et garantissant la présence de l’ensemble des informations obligatoires.
FlowerDocs permet de définir le modèle de données associé à ce besoin et propose la suite technologique permettant d’y répondre.

Modèle de document

En utilisant les propriétés personnalisées de la suite Microsoft Office, il est possible de concevoir des modèles de documents faciles à prendre en main et à personnaliser.
Afin de simplifier encore la génération de ces documents par les utilisateurs finaux, FlowerDocs propose les outils permettant de générer le document directement avec les données propres au contexte métier sous la forme d’un service REST. Ainsi une application tierce pourrait également faire appel à ce service sur étagère.

Utilisation du modèle de document

Voici un exemple de cinématique possible concernant l’utilisation de modèle de documents, il s’agit de la production de réponse à la suite de la réception d’un courrier entrant. FlowerDocs offre la possibilité de personnaliser entièrement cet usage.

L’utilisateur sélectionne le modèle de document dans la liste des modèles disponibles. Des informations métier peuvent être ajoutées afin de guider l’utilisateur dans son choix (ex : type de document).

Sélection du modèle de document
Sélection du modèle de document

L’utilisateur peut indexer le modèle de document afin de définir les propriétés qui lui sont propres.

Indexation du nouveau document
Indexation du nouveau document

Le nouveau document est généré. L’ensemble des propriétés personnalisées (qui correspondent aux propriétés de la tâche dans FlowerDocs) a été automatiquement peuplé et mis à jour au sein du document.

Génération du document
Génération du document

Administration du modèle de document

Les administrateurs peuvent créer/modifier/supprimer les modèles de document directement depuis la partie Administration.

Administration technique des modèles de document
Administration technique des modèles de document


Pour une visualisation plus fonctionnelle, il est également possible d’utiliser un profil utilisateur dédié permettant la gestion des modèles de documents au sein d’un onglet de l’application.


Administration fonctionnelle des modèles de document
Administration fonctionnelle des modèles de document

Intégration

Cette intégration dans FlowerDocs peut être faite côté client via un script en JavaScript.


JSAPI.get().getCardAPI().registerForAttachment(function(card, task, definition, component){
    addModelActionOnCard(card, task, definition, component);
});

function addModelActionOnCard(card, task, definition, originalDocument){
    var action = JSAPI.get().getActionFactoryAPI().buildIcon("searchModelDocument","Ajouter depuis un modèle", "fa fa-file-alt", function(actionPresenter){
        openSearchModelTemplate(card, definition.getId(), task, originalDocument);
    });   
    card.getActions().add(action);
}

function openSearchModelTemplate(card, attachmentId, task, originalDocument){
    var popup = JSAPI.get().getPopupAPI().buildSearch('DOCUMENT', "DefaultSearch" , function(component){
        generate(component.getId(), task);      
    });
    popup.setTitle("Recherche de modèle de documents");
    popup.show();
}

function generate(modelId, component){
    var url = "./plugins/rest/template/msoffice/"+modelId;
    var xhr = new XMLHttpRequest();
    xhr.open('POST', url, true);
    xhr.responseType = 'arraybuffer';
    xhr.onload = function () {
        if (this.status === 200) {
            var filename = "";
            var disposition = xhr.getResponseHeader('Content-Disposition');
            if (disposition && disposition.indexOf('attachment') !== -1) {
                var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
                var matches = filenameRegex.exec(disposition);
                if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
            }
            var type = xhr.getResponseHeader('Content-Type');

            var blob = typeof File === 'function'
                ? new File([this.response], filename, { type: type })
                : new Blob([this.response], { type: type });
            if (typeof window.navigator.msSaveBlob !== 'undefined') {
                window.navigator.msSaveBlob(blob, filename);
            } else {
                var URL = window.URL || window.webkitURL;
                var downloadUrl = URL.createObjectURL(blob);

                if (filename) {
                    var a = document.createElement("a");
                    if (typeof a.download === 'undefined') {
                        window.location = downloadUrl;
                    } else {
                        a.href = downloadUrl;
                        a.download = filename;
                        document.body.appendChild(a);
                        a.click();
                    }
                } else {
                    window.location = downloadUrl;
                }

                setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
          }
        }
    };
    xhr.setRequestHeader('Content-type', "application/json; charset=utf-8");

    var data=new Array();
    component.getTags().forEach(function(tag){
        data.push({"name": tag, "value": [component.getTagValue(tag)]});
    });
    xhr.send(JSON.stringify(data));
}