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).
L’utilisateur peut indexer le modèle de document afin de définir les propriétés qui lui sont propres.
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.
Administration du modèle de document
Les administrateurs peuvent créer/modifier/supprimer les modèles de document directement depuis la partie Administration.
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));
}