Aller au contenu | Aller au menu | Aller à la recherche

Ouverture & Innovation

Le blog de l'équipe VersusMind

articles

Fil des billets

vendredi, mars 13 2009

Gérer un site internet avec le WCM Alfresco

A travers cet article, nous allons étudier le fonctionnement de la partie Web Content Management d'Alfresco. Comme tout CMS, le WCM offre les fonctionnalités suivantes :

  • plusieurs personnes peuvent travailler sur un docuement
  • il existe une chaîne de publication
  • il y a un versioning des documents publiés
  • les opérations de gestion de forme et de contenu sont séparées

Le principe de fonctionnement du WCM est le suivant: un site internet peut-être enrichi de contenu grâce à l'utilisation de formulaires web classiques facilement utilisables pour des non-informaticiens et permettant de générer un résultat dans une multitude de formats (HTML, Texte, OpenOffice, PDF etc...).

D'un point de vue technique, le formulaire va générer un fichier XML et des templates seront chargés d'aller récupérer les informations qu'il contient pour créer l'affichage. Ces templates peuvent être codés en XSL, en XSL-FO ou bien en Freemarker.

Avant de se lancer dans la réalisation d'un site internet via Alfresco, il est nécessaire de répondre au moins à ces 3 questions :

  • Quel sera en détails le contenu du site internet, les rubriques à enrichir par des articles, des fiches etc...
  • Sous quels formats ces informations seront-elles disponibles ?
  • Quelles seront les personnes chargées d'écrire, de publier et de valider ces articles ?

Pour illustrer le fonctionnement, nous utiliserons un site web J2EE qui nous permettra de poster des informations puis nous verrons comment créer un formulaire web Alfresco et comment lier ces éléments pour gérer notre contenu en ligne.

Afin de faciliter la création du site web et permettre une gestion propre et facile quand il sera en ligne, il est intéressant de créer un répertoire propre à chaque catégorie d'informations où seront stockés les fichiers xml générés par les formulaires. Par exemple, pour une catégorie «informations », nous aurons un répertoire « infos / contenu».

Créer ensuite un Bean nommé "NewsReleaseBean", compilez-le et stockez-le dans le répertoire WEB-INF de votre application.

Une fois vos beans créés, créez un WAR de votre site web, il sera utilisé pour le déploiement par le WCM.

Passons maintenant au formulaire web. Ceux-ci sont générés via un schéma XSD :

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
	   xmlns:news="http://www.versusmind.eu/alfresco/news" 
           targetNamespace="http://www.versusmind.eu/alfresco/news" 
           elementFormDefault="qualified"> 

<xs:simpleType name="category"> 
    <xs:restriction base="xs:normalizedString"> 
      <xs:enumeration value="Produits"/> 
      <xs:enumeration value="Entreprise"/> 
      <xs:enumeration value="Général"/> 
      <xs:enumeration value="Téléchargement"/> 
    </xs:restriction> 
  </xs:simpleType> 

  <xs:element name="news_release"> 
    <xs:complexType> 
      <xs:sequence> 
        <xs:element name="title" type="xs:normalizedString"/> 
        <xs:element name="head" type="xs:normalizedString"/> 
        <xs:element name="body" type="xs:string" minOccurs="1" maxOccurs="1"/> 
		<xs:element name="category" type="news:category" default="Général"/> 
		<xs:element name="launch_date" type="xs:date"/> 
      </xs:sequence> 
    </xs:complexType> 
  </xs:element> 
</xs:schema>

On note que l'on peut utiliser des éléments énumérés très facilement. Notre objet « news_release » est composé d'un titre, d'un chapeau d'article, du corps de l'article, d'une catégorie et d'une date de publication. Le nom de l'élément « news_release » sera utilisé dans les autres fichiers.

Modifiez ensuite votre fichier WEB.XML pour y mapper votre fichier TLD correspondant au namespace news déclaré ci-dessus.

Créez ensuite deux fichiers template, le premier codé en XSL permettra l'affichage des données XML au format HTML, le second, codé en freemarker, génèrera un fichier OpenOffice.

Nous disposons donc maintenant d'un fichier WAR contenant notre site web, d'un fichier XSD qui est le squelette du formulaire web permettant de poster du contenu de type "News", d'un fichier XSL pour afficher les news au format HTML et d'un fichier Freemarker qui créera un fichier OpenOffice.

Connectez-vous maintenant à Alfresco en tant qu'admin et allez dans "Data Dictionnary" puis dans "Web Forms"

alfresco2.png

Allez chercher votre fichier XSD

alfresco3.png

Dans name et title, vous pouvez laisser « news-release », dans « Description », mettez « Formulaire permettant de poster une news ». Dans « output path pattern », laissez « ${name}.xml », cliquez ensuite sur « Next »

alfresco4.png

On arrive ensuite sur l'interface permettant de sélectionner les templates. Commencez par aller chercher votre fichier « news-releases.xsl »

alfresco5.png

Alfresco a automatiquement détecté que le template est du « XSLT ». Laissez « name » et « title » tels quels. Donnez une description. Dans « Rendition mimetype », il faut sélectionner HTML, laissez « output path pattern » tel quel. Enfin, cliquez sur « Add to List »

Faites la même chose avec le fichier « news-release-odt.ftl » qui gère le template ODT et sélectionnez « OpenDocument Text ». Ajoutez à la liste puis cliquez sur « Next ».

La phase suivante offre la configuration du « workflow » qui sera appliqué par défaut à chaque fois que le formulaire sera appelé. Les formulaires étant réutilisables par plusieurs sites web, il faut essayer d'être généraliste et être certain que l'action par défaut ne posera pas de problèmes. Pour le moment, sélectionnez « no not now », on le configurera spécifiquement pour notre site web tout à l'heure. Cliquez sur « Next » et finalisez la création en cliquant sur « Finish ».

Maintenant, cliquez sur « Web Projects » dans le menu de gauche puis cliquez sur « Create » et « Create web project »

Alfresco8.png

Dans « name », donnez un nom à votre site internet, dans « DNS name » mettez la même chose. Laissez « webapp » sur « ROOT ». Vous pouvez ensuite définir « Title » et « Description ». Laissez décochée la case « use as a template ».

La seconde étape permet de sélectionner la façon dont est créé le projet, soit on en crée un nouveau, soit on se base sur un projet déjà existant.

alfresco9.png

La troisième étape laisse la possibilité d'ajouter des serveurs de déploiement puis la quatrième étape va lier notre projet à des formulaires en les paramétrant. Cliquez sur « Add to List » pour ajouter le formulaire « news-release » à notre projet.

alfresco10.png

alfresco11.png

Cliquez sur "Web form details"

alfresco12.png

Dans « output pah pattern », il faut mettre le chemin vers le dossier dans lequel on stockera les fichiers XML.

${webapp} et ${name}.xml sont deux variables qui représentent le répertoire de l'application et le nom du fichier.

Dans « Workflow », sélectionnez celui proposé et validez.

alfresco13.png

On remarque que le bouton « Configure workflow » est devenu actif.

alfresco14.png

Ensuite, cliquez sur « Configure Templates »

alfresco15.png

Dans « output path pattern » il faut mettre les mêmes informations que précédemment mais on rajoute la variable ${extension} après le nom du fichier.

Validez et demandez ensuite à configurer le Workflow.

alfresco17.png

Il existe deux types de Workflow, « Serial » et « Parallel »

Le mode « Serial » va mettre en place une chaîne de validation du type « A valide, puis B valide, puis C valide etc... » où A, B et C sont des validateurs.

Le mode parallèle demande également une validation par A, B et C mais il n'y a pas d'ordre prédéfini.

Pour le moment, choisissez « Serial » puis cliquez sur « Search », la liste des utilisateurs apparaît. Sélectionnez ceux que vous souhaitez inclure dans la chaîne de validation et l'ordre dans lequel la validation se fera.

alfresco18.png

Ici, Adrien devra valider pour que Benoît reçoive une demande de validation. Lorsque Benoît aura validé, le processus sera terminé et le contenu sera en ligne.

L'étape cinq gère la configuration du workflow pour les éléments qui ne sont pas générés par des web-forms.

alfresco19.png

Faites « Add to list » puis « Configure workflow ». Comme précédemment, sélectionnez les utilisateurs qui devront valider les éléments. Le filename pattern match «  .* » permet de configurer précisément les fichiers qui devront être validés par ce workflow en remplaçant l'étoile par l'extension du ou des fichiers.

Validez votre choix puis passez à l'étape 6 qui va gérer les liens utilisateurs / rôles.

alfresco20.png

Sélectionnez un utilisateur et un rôle puis « Add to List ».

alfresco21.png

Adrien va être « Content Manager » il peut publier des articles, éditer le contenu du site etc... Benoît est « Content Reviewer », il peut relire les articles mais ne peut pas en écrire. Pierre est « Content Publisher » et pourra écrire et éditer du contenu.

A chaque utilisateur sera liée une « sandbox ». Cette fonctionnalité est extrêmement intéressante et nécessaire pour assurer un bon travail d'équipe et réduire les erreurs. Chaque utilisateur va pouvoir accéder à une copie du site web sur laquelle il pourra tester ses modifications avant de les soumettre à la publication. Par exemple, les développeurs pourront tester leur code, les rédacteurs visualiser leurs articles etc... A chaque modification validée, la copie présente dans chaque sandbox est mise à jour.

L'étape finale de création propose d'envoyer un email aux différents utilisateurs pour leur faire savoir qu'ils vont participer au projet. Validez la création, Alfresco affiche alors la partie « Web projects » où notre site est désormais présent.

alfresco22.png

Cliquez sur le titre du site, on arrive alors sur la page présentant les différents « sandboxes ». La « staging SandBox » est celle qui contient le site web en ligne, « My Sandbox », comme son nom l'indique, est l'espace au sein duquel il est possible de tester les modifications.

Nous allons maintenant importer notre site web. Dans la partie « My Sandbox », cliquez sur « Browse Website », ensuite cliquez sur « Create » puis « Bulk import »

alfresco23.png

Allez chercher votre fichier WAR contenant le site web puis cliquez sur « Ok », patientez quelques secondes le temps qu'Alfresco réalise le déploiement. Si tout se déroule correctement, le squelette du site web apparaît.

alfresco24.png

En cliquant sur « Preview Website », le site web apparaît dans une nouvelle fenêtre.

alfresco25.png

Il faut maintenant soumettre le site à la validation, des utilisateurs. Pour se faire, retournez dans votre sandbox puis cliquez sur « Modified Items ».

alfresco26.png

Sélectionnez tous les items et cliquez sur « submit selected ». Une page d'information apparaît, elle permet d'informer les utilisateurs chargés de la validation et si besoin de modifier le workflow.

alfresco27.png

Validez l'envoi, déconnectez-vous d'Alfresco et reconnectez-vous avec le ou les utilisateurs chargés de valider le contenu hors « formulaires ».

Sur la page d'accueil, la liste des tâches à réaliser est affichée. Il doit y avoir celle que nous venons de soumettre. Cliquez sur le titre, une page de détails s'affiche. Celle-ci nous offre plusieurs options comme donner un statut à la présente validation, laisser des commentaires ou agir sur les fichiers. Le petit menu de droite permet de sauvegarder, d'approuver ou de rejeter directement le contenu. Cliquez sur « Approve ». Faites de même si vous avez d'autres utilisateurs et dans l'ordre de la chaîne de publication.

alfresco28.png

Connectez-vous maintenant avec un utilisateur chargé de gérer du contenu. Dans sa sandbox, cliquez sur « web forms », puis sur « Create Content » dans la ligne correspondant à votre formulaire.

alfresco29.png

Renseignez le champ « Name », ce sera le nom du fichier XML généré. Laissez les autres champs tels quels.

alfresco30.png

Notre fichier « news-release.xsd » est appelé par Alfresco qui, grâce à Xforms, va créer le formulaire.

alfresco31.png

Remplissez les champs puis validez.

alfresco33.png

Alfresco a créé le fichier XML ainsi que les deux templates pour la visualisation ODT et HTML.

alfresco34.png

Pour soumettre cet article, vous pouvez procéder comme précédemment avec le site web ou bien cochez la case « Submit these 3 files when wizard finishes ». Il ne vous reste plus qu'à effectuer la validation avec les différents utilisateurs.

Lancez ensuite une visualisation du site web puis allez dans la catégorie contenant l'article posté

alfresco35.png

Notre article est bien présent, en cliquant sur le titre, on peut le voir en détails

alfresco36.png

Enfin, cliquez sur le lien « Télécharger la news en ODT » pour charger le fichier OpenOffice correspondant.

alfresco37.png

Il ne reste plus qu'à répéter la procédure avec d'autres formulaires pour enrichir le site.

jeudi, mars 5 2009

Analyse géographique sous Pentaho

Nous allons voir comment réaliser un tableau de bord avec l'API Google Maps sous la plateforme Pentaho. Ce tableau de bord devra permettre l'affichage sur la carte des différents clients d'une entreprise ainsi que le nombre de rendez-vous déjà effectués avec ceux-ci. Lorsque l'on cliquera sur un point de la carte, une petite fenêtre apparaîtra avec une jauge représentant le nombre de rendez-vous par rapport à un nombre maximal défini. Les points sur la carte pourront prendre 3 couleurs différentes selon la valeur du nombre de rendez-vous. Il sera possible de changer les valeurs des intervalles ce qui influera en temps réel sur la couleur des points.

pentaho-gm1

Pour se faire, nous allons créer et modifier plusieurs fichiers. La première étape consiste à présenter succinctement la table qui contiendra nos données. Le modèle physique est le suivant :

TABLE client(id,org_name,adr_town,adr_one_locality,adr_one_postalcode,rdv) 
id : identifiant, clé primaire, ENTIER
org_name : nom du client, CHAINE
adr_town : adresse du client, CHAINE
adr_one_locality : ville du client, CHAINE
adr_one_postalcode : code postal, CHAINE
rdv : nombre de rendez-vous, ENTIER

Dans le répertoire d'installation de pentaho, allez sous « pentaho-solutions », puis dans le répertoire où vous souhaitez voir apparaître votre tableau de bord.

1.Créez un sous-répertoire « google »

2.A l'intérieur de celui-ci, créez un fichier « index.xml » qui contiendra le code suivant :

<index> 
	<name>%name</name> 
	<description>%description</description> 
	<icon></icon> 
	<visible>false</visible> 
	<display-type>list</display-type> 
</index>

3.Créez un fichier « index.properties » :

description=Google maps
name=Google

4.Dans le répertoire de niveau supérieur, créez un fichier google_map.url, ce fichier va nous permettre de spécifier le fichier à appeler pour l'affichage.

[InternetShortcut] 
URL=/pentaho/Map2 
[navigation] 
Name=%url_name 
Description=%url_description 
Icon=dashboard.jpg 
Target=google_map

5.Créez un fichier google_map.properties :

url_description= Pentaho google maps
url_name = Localisation clients

6.Editez le fichier « web.xml » et ajoutez l'appel à une page JSP que vous créerez pour l'occasion et qui sera une copie de celle fournie par Pentaho.

7.Créez un fichier Xaction et sauvegardez-le dans le sous-répertoire « google » sous map1.xaction

<?xml version="1.0" encoding="UTF-8"?> 
<action-sequence> 
  <name>CurrentPositionTitles.xaction</name> 
  <title>data for map</title> 
  <version>1</version> 
  <logging-level>debug</logging-level> 
  <documentation> 
    <author>Votre nome</author>  
    <description>description</description>  
    <help/>  
    <result-type>rule</result-type>  
    <icon></icon> 
  </documentation> 

  <inputs> 
    <dept type="string"> 
      <default-value>Google maps</default-value>  
      <sources> 
        <request>dept</request> 
      </sources> 
    </dept> 
  </inputs> 

  <outputs> 
    <data type="result-set"/> 
  </outputs> 

  <resources/> 
  
  <actions> 
    <action-definition> 
      <component-name>SQLLookupRule</component-name> 
      <action-type>Perform SQL Query</action-type> 
      <action-inputs> 
        <dept type="string"/> 
      </action-inputs> 
      <action-outputs> 
        <query-result type="result-set" mapping="data"/> 
      </action-outputs> 
      <component-definition> 
      <jndi>Nom du datasource</jndi>  
    	<query><![CDATA[votre requête SQL]]></query> 
      </component-definition> 
    </action-definition> 
 
  </actions> 
</action-sequence>

8. Ouvrez le fichier jsp créé à l'étape 6, nous allons y apporter quelques modifications et éclairer quelques points intéressants.

int topthreshold = 100000;
int bottomthresold = 50000;

correspondent aux deux seuils servant d'intervalles à la coloration des points.

<script language=\"javascript\" src=\"js/pentaho-ajax.js\"></script>\n
[...]
<script language=\"javascript\" src=\"js/google-demo.js\"></script>\n" ); 
[...]
"onload=\"load()\" onunload=\"GUnload()\"

Nous appelons ici deux fichiers javascript fournis par Pentaho : pentaho-ajax.js et google-demo.js

Faites une copie de google-demo.js et modifiez le lien ci-dessus.

Nous constatons qu'au chargement de la page, la fonction load() de google-demo est appelée.

runtime = SolutionHelper.doAction( "repertoire",  "sous-repertoire",  	"map1.xaction",  	"MyMap.jsp",  parameters,  userSession,  messages,  null 	);

Répertoire : votre répertoire de travail Sous-répertoire : le sous-répertoire où se trouve map1.xaction (par défaut google).

Par défaut sont déclarées les variables suivantes :

String customerNum = ""; 
String customer = ""; 
String city = ""; 
String state = ""; 
String zip = ""; 
String value = "";

Changeons-les en :

String id =""; 
String org_name=""; 
String adr_town=""; 
String adr_one_postalcode=""; 
String adr_one_locality=""; 
String rdv="";

Ensuite, nous arrivons sur la fonction « addPoints » qui va permettre l'ajout des points sur la carte via un enchaînement d'appel à des fonctions javascript. La boucle « for » va traiter chaque ligne retournée par la requête SQL de map1.xaction, il faut modifier le bloc d'attribution des variables de la façon suivante, afin de caster correctement les variables.

id  = results.getValueAt(row,0).toString(); 
org_name = (String)results.getValueAt(row,1); 
adr_town = (String)results.getValueAt(row,2);				 
adr_one_postalcode = (String)results.getValueAt(row,3); 
adr_one_locality = results.getValueAt(row,4).toString(); 
rdv = results.getValueAt(row,5).toString();

row est une ligne de résultat, l'indice correspond à la position de la valeur à rechercher dans row.

showAddress est ensuite utilisée. Cette fonction prend plusieurs paramètres :

  • l'adresse à trouver
  • le nom du client
  • l'identifiant
  • le nombre de rendez-vous
  • un booléen à laisser à faux

on a donc le code suivant :

showAddress( "<%= adr_town %>,<%= adr_one_locality %>, <	%=adr_one_postalcode %>,FRANCE", "<%= org_name %>", "<%= id %>", <%= rdv 	%>, false );

On peut bien évidemment changer « FRANCE » par un autre pays. Le reste du code est de l'HTML et va générer l'affichage. Vous pouvez le modifier comme bon vous semble. Il convient juste de garder un div ayant comme id la valeur « map », ce div contiendra la carte. Il y a deux select box qui permettent de changer à la volée les valeurs des intervalles. On peut bien évidemment modifier ces valeurs pour que cela corresponde au minimum et au maximum fournis par nos données.

Passons maintenant au fichier « google-demo.js ». Il faut commencer par changer les valeurs des variables : topThreshold et bottomThreshold pour qu'elles correspondent aux valeurs fournies dans le fichier jsp. Ensuite, nous déclarons trois types d'icônes qui vont être utilisés pour différencier les groupes de valeurs (vert, jaune, rouge).

La première fonction est load(), elle permet de charger une carte, de la centrer sur un point précis, d'y ajouter les contrôles de zoom et de switch d'affichage, et les points sur la carte via « addPoints ».

La seconde fonction, « customerClick » va gérer les actions lors du clic sur un point. On appelle la méthode ajax pentahoAction sur le fichier dial1.xaction en passant des paramètres : - le client - la valeur courante du nombre de rendez-vous - la valeur max du nombre de rendez-vous - la valeur du premier seuil - la valeur du second seuil Enfin, on indique que le callback se fera sur la méthode UpdateInfoWindow.

UpdateInfoWindow va afficher une petite boîte contenant les informations renvoyées par dial1.xaction, notamment le graphique type jauge.

Il faut ensuite commenter l'appel à chart.xaction qui lui, génère un ensemble de statistiques. Il ne nous intéresse pas dans notre exemple

La fonction showAddress que nous utilisons via le fichier JSP va générer un tableau contenant différentes informations puis appeler la fonction qui affiche le marqueur sur la carte. La fonction showMarker va permettre d'attribuer une couleur à chaque marqueur selon la valeur des intervalles et la valeur de l'enregistrement passé en paramètre.

Enfin, la méthode update, appelée lors du changement d'une valeur des select box, s'occupe de régénérer les points avec les bonnes couleurs de marqueurs en rapport aux nouvelles valeurs.

Nous avons fait le tour des principales fonctions et fichiers à utiliser pour créer notre tableau de bord et pouvons maintenant étudier une fonctionnalité intéressante de Google Maps, la création de zones de sélection cliquable.

Nous allons utiliser une surcouche javascript disponible sous licence Creative Commons. Ce fichier « epoly.js » est disponible sur le site suivant : http://econym.googlepages.com/index.htm

pentaho-gm2

Ce fichier JS est à inclure dans le fichier JSP. Ensuite, il faut créer un fichier XML qui respecte la nomenclature suivante :

<states> 
<state name ="nom_pays" colour="couleur_carte" >
	<point lat=valeur lng=valeur />
	<point lat=valeur lng=valeur />
	etc...
</state>
<state>
...
</state>
</states>

Chaque polygone sera donc défini par un ensemble de points.

Dans le fichier JSP, il faut ajouter le code suivant :

 //<![CDATA[ 
  if (GBrowserIsCompatible()) { 
 
      var polys = []; 
      var labels = []; 

      // Récupération de la carte, ajout des contrôles et centrage
      var map = new GMap2(document.getElementById("map")); 
      map.addControl(new GLargeMapControl()); 
      map.addControl(new GMapTypeControl()); 
      map.setCenter(new GLatLng(42.16,-100.72),4); 

	// Définition de la méthode appelée lors du click sur une zone
      GEvent.addListener(map, "click", function(overlay,point) { 
        if (!overlay) { 
          for (var i=0; i<polys.length; i++) { 
            if (polys[i].Contains(point)) { 
              var area = polys[i].Area()/1000000; 
              var sqmiles = area/2.58998811; 
              map.openInfoWindowHtml(point,"You clicked on "+labels[i]+"<br>The 			area of "+labels[i]+" is "+parseInt(area) 
                 	+" sq km.<br>that's "+parseInt(sqmiles)+" square miles<br>" 
                  +"Its boundary is "+parseInt(polys[i].Distance()/1609.344)+" 			miles long" 
              );
              i = 999; // Jump out of loop 
            } 
          } 
        } 
      }); 

      // Lecture du fichier XML
      var request = GxmlHttp.create(); 

	// récupération du fichier XML
      request.open("GET", "jsp/states.xml", true); 
      request.onreadystatechange = function() { 
      if (request.readyState == 4) { 
          var xmlDoc = GXml.parse(request.responseText); 
	 
          // Récupération des élements « state »
          var states = xmlDoc.documentElement.getElementsByTagName("state"); 
	 
	    // Création des polygones
          for (var a = 0; a < states.length; a++) { 
            var label  = states[a].getAttribute("name"); 
            var colour = states[a].getAttribute("colour"); 
            var points = states[a].getElementsByTagName("point"); 
            var pts = []; 
            for (var i = 0; i < points.length; i++) { 
               pts[i] = new GLatLng(parseFloat(points[i].getAttribute("lat")), 
                                   parseFloat(points[i].getAttribute("lng"))); 
            } 
	 
            var poly = new Gpolygon(pts,"#000000",1,1,colour,0.5,					{clickable:false}); 
            polys.push(poly); 
            labels.push(label); 
            map.addOverlay(poly); 
          } 
          // ================================================           
        } 
      } 
      request.send(null); 
    } 

  
    
    // Si le navigateur n'est pas compatible
    else { 
      alert("Sorry, the Google Maps API is not compatible with this browser"); 
    } 

    // Ajout d'une icône sur la carte
    var tinyIcon = new GIcon(G_DEFAULT_ICON); 
    tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png"; 
    tinyIcon.iconSize = new GSize(12, 20); 
    tinyIcon.shadowSize = new GSize(22, 20); 

    var markerOptions = { icon:tinyIcon }; 
    var point = new GLatLng(35.8659,-108.5715); 
    map.addOverlay(new GMarker(point,markerOptions)); 
     
    //]]> 
    </script>

Ces exemples sont bien évidemment paramètrables à volonté, notamment via la requête SQL et les interactions que l'on souhaite offrir à l'utilisateur.

lundi, juin 16 2008

Workflow de demande de congés eGroupWare

Le module WorkFlow d'eGroupWare permet, comme son nom l'indique, de gérer des workflow, c'est à dire des processus internes au sein d'eGroupWare.

Ce module est basé sur le moteur de Workflow OpenSource Galaxia. La documentation sur le module WorkFlow d'eGroupWare est pour le moment très limitée, celle de Galaxia est donc d'une grande aide.

Les possibilités de création de processus sont nombreuses grâce à l'accès à l'API d'eGroupWare (langage PHP)

Lire la suite...

vendredi, mai 2 2008

Interfaces graphiques avec AutoIT3 et KODA

Suite à notre article sur le langage de script AutoIT 3 (lire l'article), cet article a pour but de présenter le programme permettant de créer rapidement des interfaces graphiques avec AutoIT, à la manière du Form Designer du Visual Basic.

Lire la suite...

jeudi, novembre 8 2007

Quel est le TCO d'Office 2007 ?

A l'heure actuelle, dans une organisation, lorsqu'est menée la réflexion sur l'évolution, voire le changement, de suite bureautique, la question de l'arbitrage du TCO  (ou "coût total de possession") se pose rapidement. C'est un calcul savant mais parfois aléatoire qui permet de déterminer l'ensemble des coûts générés par la possession d'un logiciel bien au-delà du simple coût de licence. C'est donc une variable essentielle de prise de décision.

Lire la suite...

mardi, octobre 30 2007

AutoIt 3 - Langage de script pour administration Windows

Après avoir vu le titre, certains lecteurs vont penser qu'il s'agit là d'un concurrent direct de KIX avec son célèbre Kixtart (http://www.kixtart.org/). Ce n'est pas tout à fait vrai, même si l'on retrouve des fonctions communes. AutoIT est un langage de programmation orienté administration Windows, sans être pour autant restreint dans cet usage. Actif, doté d'une communauté conséquente et facilement utilisable et extensible, c'est un langage amené à être de plus en plus connu et répandu.

Accès direct : http://www.autoitscript.com/autoit3/

Lire la suite...

jeudi, octobre 11 2007

Des présentations OpenOffice Impress enfin fluides.

Ne nombreux utilisateurs d'OpenOffice.org possesseurs de cartes graphiques de marque ATI l'avaient déjà constaté à leurs dépends : la fluidité des animations Impress laissait parfois à désirer sur les modèles de cette marque : il fallait même parfois supporter quelques écrans bleus ce qui était vite très énervant.
Ce problème est maintenant résolu par une petite extension DirectX développée par SUN, téléchargeable ici.

mardi, décembre 19 2006

Le Brésil adopte le format ODF comme format recommandé.

Le gouvernement du Brésil est devenu le premier d'Amérique du sud à adopter ODF comme format de document recommandé pour les échanges avec l'administration.

jeudi, décembre 7 2006

De nouveaux membres pour l'ODF Alliance

l’OpenDocument Format Alliance, qui a pour objectif premier de promouvoir et défendre le standard ODF de OpenOffice.org, a vu ses équipes enrichies de la présence de Google aux côtés de Corel, EDS, IBM, Novell, Opera, Oracle, GNOME, Mandriva, OpenOffice.org, ou encore Red Hat…

Liste des membres de l'ODF aliance : http://www.odfalliance.org/memberlist.php


L'OpenDocument Format est publié en tant que standard ISO

Le format de fichiers d'OpenOffice.org, le format OpenDocument vient d'être publié en tant que standard ISO comme l'indique PC Impact aujourd'hui : " L’International Organization for Standardization a finalement publié les données relatives à l’Open Document Format (ODF) en tant que standard officiel, indiquent nos confrères d’Ars Technica. La norme ISO/IEC 26300:2006 est ainsi attribuée au format ODF. Cette publication est le fruit d’une reconnaissance qui remonte à mai 2006, date où cette standardisation fut officiellement annoncée. ODF, format ouvert utilisé sous de nombreuses applications bureautiques (traitements de texte, tableurs, etc.), et qui assure du coup une interopérabilité entre les applications quel que soit l’environnement de mise en œuvre, franchit donc la marche ultime d’un long processus."

dimanche, novembre 19 2006

Les lecteurs du Monde Informatique plébicitent OpenOffice.org

Comme l'indique Olivier Rafal sur le site  du Monde Informatique, en répondant à un sondage récent sur l'impact de la sortie d'Office 2007, les lecteurs du monde informatique ont plébicité OpenOffice.org.

Lire la suite...

mardi, octobre 31 2006

Le Ministère de l'Agriculture et de la Pêche choisit de migrer vers OpenOffice.org

Une excellente nouvelle relayée par le site de Linux FR. Le Ministère de l'Agriculture et de la Pêche vient donc s'ajouter à la longue liste des ministères ayant décidé de migrer leur suite bureautique vers OpenOffice.org et ainsi de tourner le dos aux produits bureautiques à l'ouverture douteuse de Microsoft.
Voici l'article de Linux FR :

Lire la suite...

vendredi, octobre 20 2006

Le rapport Carayon promeut l'interopérabilité et les logiciels libres.

Bernard Carayon est un député UMP spécialiste des questions de sécurité et d'intelligence économique avait été chargé par Dominique de Villepin d'étudier les moyens de renforcer la compétitivité des entreprises françaises dans le monde, en particulier en se penchant sur les informations disponibles pour elles "dans les négociations qui les concernent directement".

Dans son rapport intitullé "A armes égales", qu'il vient de remettre au premier ministre, Bernard Carayon soutient « l'interopérabilité et les standards ouverts, condition du développement économique européen en matière de technologies de l'information ». « Pour contrer le risque d'appauvrissement qui existe en matière de technologies de l'information en raison des pratiques de quelques grands acteurs mondiaux, il importe d'abord de proposer à nos partenaires européens d'adopter le principe d'interopérabilité en matière de développement informatique comme garantie du développement - voire, dans certains secteurs, de la survie - de l'industrie européenne des technologies de l'information.

Ainsi, l'adoption, en mai 2006, par l'ISO du standard ouvert de document bureautique, « Open Document Format », (odf) en garantit sa pérennité, autorise son utilisation sans risque par les acteurs économiques et publics et favorise le développement de logiciels concurrents reprenant ce format, qui devient ainsi pour l'utilisateur source d'une liberté de choix et d'une meilleure qualité de produit. ».

Le député présente plusieurs mesures à l'échelle française et européenne pour pousser les logiciels libres (proposer aux autres membres de l'Union européenne et à la Russie un projet d'agence européenne des technologies de l'information, créer un pôle de compétitivité dédié aux logiciels libres, « notamment sur les aspects liés à la sécurité », charger le ministère de l'Industrie de recueillir les bonnes pratiques en la matière dans les collectivités territoriales etc.).


Pour aller plus loin

« A Armes égales », rapport au Premier ministre (Documentation française)

Article de Wikipedia sur Bernard Carayon (liens vers ses publications en fin d'article)

Bernard Carayon à l'Assemblée nationale