Comment enrichir votre GED Alfresco pour satisfaire vos utilisateurs ?

Alfresco a l’avantage de bien savoir s’adapter aux besoins des utilisateurs, qu’il s’agisse de personnaliser la solution, de l’intégrer aux applications métiers, ou de développer des fonctionnalités spécifiques.

Or, le développement de fonctionnalités spécifiques n’a pas besoin d’être onéreux pour améliorer la productivité des utilisateurs. Par exemple, il suffit d’à peine deux jours de développement pour créer un menu intégrant de nouvelles fonctionnalités bureautiques dans Alfresco, dans le cas de l’exemple suivant.

Exemple de développement

Le protocole Sharepoint est mis à profit par Alfresco pour pouvoir consulter un document Office existant sans quitter l’application de GED. Par contre, il n’est pas possible de créer un document Office de toute pièce dans Alfresco. Or un simple développement en webscripts permet de rajouter un menu dans Alfresco pour effectuer cette opération en trois clics.

Un nouveau menu remplace l’ancien bouton « Ajout de contenu ». Le nouveau menu offre le choix entre trois types de documents MS Office : Word, Excel et PowerPoint.

A la sélection d’un type de document, une fenêtre s’ouvre et charge les modèles existants (en fonction du type de document Office sélectionné) et disponibles dans Alfresco, sous la forme d’une liste déroulante.

Il suffit de sélectionner un modèle et de donner un nom au nouveau document. Si l’utilisateur oublie d’ajouter l’extension du fichier, celle-ci est deduite automatiquement à partir du modèle sélectionné.

Un contrôle sur l’existence du nom de fichier est ajouté pour ne pas autoriser de nom blanc :

On peut ajouter un autre test pour n’autoriser que les chiffres et les lettres.

Si, le nom est valide le document est créé dans le dossier courant :

Pour ajouter de nouveaux modèles de documents à la liste, il suffit de les placer dans le dossier approprié (« modèles Word », « modèle Exel » ou « modèles Powerpoint »).

En savoir plus sur le fonctionnement de la Gestion Electronique de Documents

Téléchargez le livre blanc Bien comprendre les fonctionnalités d’une GED

 

Etendre l’API d’Alfresco

Alfresco a été délibérément conçu pour être hautement extensible et personnalisable. Ainsi, nous avons déjà évoqué des personnalisations que nous avons réalisées pour le compte de nos clients. Nous allons aborder ici un autre exemple de développement souvent demandé, concernant le versioning. En effet, la liste des versions d’un document créé par Alfresco peut devenir illisible au fur et à mesure qu’elle s’allonge. Par défaut, Alfresco ne permet pas de supprimer l’historique des versions, de créer une version précise ou d’afficher uniquement une partie des versions (par exemple, les plus récentes). Qu’à cela ne tienne, l’API d’Alfresco est aisément modifiable, comme nous allons le démontrer.

Le développement s’effectue en trois étapes :

  • Créer une classe Java incluant les méthodes qui permettront la personnalisation des versions.
  • Étendre l’API Javascript d’Alfresco pour inclure la nouvelle classe en rajoutant un nouveau bean Spring.
  • Utiliser un Webscript pour appeler la classe concernée.

Code de la classe Java

package fr.starxpert.alfresco.versioning;

import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.version.VersionHistory;
import org.alfresco.service.cmr.version.VersionService;

import org.apache.log4j.Logger;  

public class MaxVersion extends org.alfresco.repo.processor.BaseProcessorExtension{

	private Logger logger = Logger.getLogger(MaxVersion.class);

	private VersionService versionService;

	public void setVersionService(VersionService versionService) {
		this.versionService = versionService;
	}

public void setMaxVersion(NodeRef versionableNode, int version) {
		VersionHistory versionHistory = versionService
				.getVersionHistory(versionableNode);

		if (versionHistory != null) {
			logger.debug("Current number of versions: "
					+ versionHistory.getAllVersions().size());
			logger.debug("least recent/root version: "
					+ versionHistory.getRootVersion().getVersionLabel());

			// If the current number of versions in the VersionHistory is
			// greater
			// than the maxVersions limit, remove the root/least recent version
			if (versionHistory.getAllVersions().size() > version) {
				logger.debug("Removing Version: "
						+ versionHistory.getRootVersion().getVersionLabel());
				versionService.deleteVersion(versionableNode, versionHistory
						.getRootVersion());
			}
		} else {
			logger.debug("versionHistory does not exist");
		}
}
}

La classe doit être compilée en tant que fichier MaxVersion.class à l’aide d’un compilateur dont la version de Java est identique à celle du serveur Alfresco. Le chemin du fichier compilé doit être renseigné dans le classpath, en respectant l’arborescence du nouveau package, comme par exemple : /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/fr/starxpert/alfresco/versioning/MaxVersion.class.

L’étape suivante consiste à créer un bean. Le bean sera placé dans un nouveau fichier Spring ou dans un fichier Spring existant et permettra le surchargement de la classe pendant le démarage d’alfresco.

Code du fichier Spring « maxVersion-context.xml »

<code>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="purgeVersion" parent="baseJavaScriptExtension" class="fr.starxpert.alfresco.versioning.MaxVersion">
    <property name="extensionName">
        <value>MaxVersions</value>
    </property>
   <property name="versionService">
        <ref bean="VersionService"></ref>
    </property>
</bean>
</beans>

Le fichier spring doit être placé dans : /opt/alfresco-3.3/tomcat/shared/classes/alfresco/extension

Il suffit ensuite de redémarrer le serveur Alfresco pour qu’il intègre la nouvelle classe.

La dernière étape consiste à mettre en place un Webscript contenant un controleur js pour lancer la classe concernée.

Code du controleur js du webscript

var docs = search.luceneSearch(" @cm\:name:""+"astuces.txt"+""");
MaxVersions.setMaxVersion(docs[0].nodeRef,2);

Le code ci-dessus supprime les deux versions les plus anciennes du fichier « astuces.txt ».

Si plus de personnalisations sont requises, il suffit d’inclure des méthodes supplémentaires dans la classe mère et de les appeler depuis ce script.

Personnaliser Zimbra c’est facile

Richesse et flexibilité caractérisent Zimbra et les interfaces utilisateur (Ajax, html et mobile) ne sont pas en reste : du plus simple (changer le logo et les couleurs des skins) au plus compliqué (zimlets), Zimbra est hautement personnalisable.

Par exemple, nous avons effectué un certain nombre de modifications pour le compte d’un de nos clients :

  • créer un skin personnalisé
  • changer la recherche externe par défaut (Yahoo!) pour utiliser la recherche Google
  • remplacer la localisation de l’interface utilisateur fournie par Zimbra (menus, messages) par sa propre traduction
  • simplifier l’interface utilisateur en pré-selectionnant les préférences au niveau de la class of service, ou en retirant certaines options pouvant prêter à confusion
  • ajouter d’autres options dans les préférences, telles que la possibilité de sélectionner l’onglet sur lequel Zimbra s’ouvre (par défault « Mail »)
  • ajouter un onglet « Accueil » comprenant : message de bienvenue, aperçu des nouveaux mails, dernières actualités (flux rss), bannière publicitaire, météo mise à jour par flux rss avec possibilité de sélectionner la ville, astuce du jour, liens pratiques, etc.
  • développer des extensions : suite à l’envoi d’un email, une « zimlet » permet à l’utilisateur de décider si le contact à qui il vient d’écrire doit être ajouté à son carnet d’adresses; une autre zimlet limite le nombres de langues disponibles aux trois requises et supprime les fonctionnalités redondantes.

La copie d’écran ci-dessous permet de découvrir la nouvelle interface utilisateur.

Personnaliser Alfresco c’est facile

Nos clients nous demandent souvent des petites fonctionnalités supplémentaires pour personnaliser leur Alfresco. L’exemple suivant montre à quel point c’est facile.

Un de nos clients souhaitait permettre à ses utilisateurs de visualiser les membres d’un groupe avant d’inviter le groupe à rejoindre un espace. Pour cela nous avons développé un webscript, puis inséré dans l’interface d’Alfresco un script en Ajax permettant d’appeler le webscript. Le développement a été effectué en une journée.

La copie d’écran ci-dessous illustre le fonctionnement.