Skip to main content
Version: Next

Modèles Word/Excel dynamiques

Il est possible d**'insérer automatiquement un modèle bureautique** dans un document via des actions automatiques du workflow. La procédure est différente avant la version .Net 2014 et après. La différence réside dans le module bureautique qui est utilisé. On partira donc du principe suivant:

  • Version précédente à .Net 2014: Module bureautique avec ActiveX obligatoire
  • A partir de la version .Net 2014: Module bureautique avec ActiveX facultatif

Application d'une version supérieure ou égale à .Net 2014

Afin d'ajouter automatiquement un modèle il est nécessaire de créer une nouvelle action automatique qui sera ajoutée au workflow.

Cette action se paramètre de la façon suivante:

Indiquez dans le champ "templateName" le nom du modèle bureautique à ajouter.

Cette action ajoute uniquement le modèle mais ne met pas à jour les signets. Pour cela, il faudra ajouter une action de mise à jour après l'action d'insertion:

Application d'une version antérieure à .Net 2014

Indication des étapes de mise en place de cette fonctionnalité. Cela regroupe:

  • l'ajout d'un fichier UpdateDocumentUI.ashx qui sera utilisé dans l'une des actions.
  • La création de 4 actions

Ajout du fichier UpdateDocumentUI.ashx

Avant de créer les actions qui permettront d'ajouter automatiquement un modèle bureautique à un document, il est nécessaire de créer un fichier qui sera ajouté dans un répertoire Custom du site web.

a - Dans le répertoire du site web, créez un nouveau répertoire Custom_CLIENT où CLIENT est le nom de la société qui possède le site. b - A l'interieur de ce répertoire, créez un fichier UpdateDocumentUI.ashx dont voici le contenu ci-dessous:

<%@ WebHandler Language="C#" Class="UpdateDocumentUI" %>

using System;
using System.Web;

public class UpdateDocumentUI : IHttpHandler {

public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";

string sQuery = context.Request.QueryString["action"];
string idDocument = context.Request.QueryString["IdDoc"];

Avanteam.Documents.DataSource.DocumentManagerWrapper documentdataSource = new Avanteam.Documents.DataSource.DocumentManagerWrapper();

switch (sQuery)
{
case "MajModeleBureautiqueDerriere":
System.Text.StringBuilder builder = new System.Text.StringBuilder();
foreach (Avanteam.Documents.DocObject obj2 in documentdataSource.GetAllDocObjectByIdDocument(idDocument, true))
{
string str2 = (builder.Length > 0) ? "\x00a5" : "";
switch (obj2.Category)
{
case 1:
builder.AppendFormat(str2 + "O|{0}|{1}|{2}", obj2.IdObj, obj2.ObjectName, obj2.IdTemplate);
break;


case 2:
builder.AppendFormat(str2 + "F|{0}|{1}", obj2.IdObj, obj2.ObjectName);
break;


case 3:
builder.AppendFormat(str2 + "G|{0}|{1}", obj2.IdObj, obj2.ObjectName);
break;


case 4:
builder.AppendFormat(str2 + "S|{0}|{1}", obj2.IdObj, obj2.ObjectName);
break;
}
}
string finalCode = "window.parent.GetDocumentWindow().document.getElementById(window.parent.GetDocumentWindow().OfficeListName).value = \"" + builder.ToString() + "\";window.parent.GetDocumentWindow().Office_RunInit();";
context.Response.Write(finalCode);
break;
}
}

public bool IsReusable {
get {
return false;
}
}

}

Création des actions

Quatre actions devront être créées et lancées dans cet ordre: a - Définition du modèle à ajouter b - Insertion du modèle bureautique c - Préparation de la mise à jour d - Mise à jour des modèles

Création de l'action "Définition du modèle bureautique à ajouter"

Cette action permet d'indiquer quel modèle vous souhaitez ajouter. En effet, dans le cas où plusieurs modèles sont associés à votre formulaire, il est nécessaire de préciser lequel sera inséré.

Code C# de l'action:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

using Avanteam.Workflow.Runtime;
using Avanteam.Workflow.ComponentModel;
using Avanteam.Workflow.ComponentModel.Shared;
using Avanteam.Workflow.ComponentModel.Runtime;

using Avanteam.Application;
using Avanteam.Application.DataSource;

namespace Avanteam.Kernel.Scripting {

public class CSCode {

public bool Execute( Hashtable parameters ) {

ApplicationDataSource dataSource = parameters[ "ApplicationDataSource" ] as ApplicationDataSource ;
Instance instance = parameters[ "Instance" ] as Instance;

// TODO - Add your code here
// ...
string nom_du_modele = "DA_BonAchat";
instance.NavigateRootParent.InstanceProperties["APSInsertOfficeTemplateList" ] = nom_du_modele;
return true;

}
}
}
IMPORTANT

Il est nécessaire de remplacer le nom du modèle (ici DA_BonAchat) par le nom du modèle que vous souhaitez ajouter automatiquement.

Création de l'action "Insertion du modèle bureautique"

Cette action permet d'insérer le modèle indiqué dans l'action "Définition du modèle bureautique à ajouter". Pour le paramétrage, recopiez les informations indiquées ci-dessous.

Création de l'action "Préparation de la mise à jour"

Cette action permet de lancer une fonction de mise à jour qui est nécessaire à la mise à jour des champs du modèle.

Code Javascript de l'action:

var request;
var response = "";
if( window.ActiveXObject ) {
request = new ActiveXObject("Microsoft.XMLHTTP");
} else {
request = new XMLHttpRequest();
}

request.open( "GET", BaseSite + "Custom_CLIENT/UpdateDocumentUI.ashx?action=MajModeleBureautiqueDerriere&IdDoc=" + IdDoc, false );
request.send();
if( request.status == 200 ) {
response = request.responseText;
} else {
response = request.responseText;
alert( "Erreur d'insertion du modèle :" + response );
return;
}
eval( response );
Important

Avant de lancer cette action, il est nécessaire d'avoir suivi les instructions présentes dans le chapitre 1. Dans le code, remplacez sur la ligne :

request.open( "GET", BaseSite + "Custom_CLIENT/UpdateDocumentUI.ashx?action=MajModeleBureautiqueDerriere&IdDoc=" + IdDoc, false );

Remplacez Custom_CLIENT/UpdateDocumentUI.ashx par l'emplacement dans lequel vous avez ajouté le fichier UpdateDocumentUI.ashx.

Création de l'action "Mise à jour des modèles"

Cette action est présente par défaut dans toutes les applications AVANTEAM. Voici le paramétrage de l'action dans le cas où cette dernière aurait été malencontreusement effacée.

Paramétrage du workflow

Une fois les différentes actions créées, il est nécessaire de les ajouter dans une action automatique du workflow (attention à l'ordre des actions):

D'autres actions peuvent être ajoutées avant ou après ces dernières (exemple: Conversion au format PDF)