alfresco
Scripts Web
Recherche…
Introduction
Les scripts Web sont des modules fonctionnels dans Alfresco, qui peuvent simplement afficher des informations ou créer des éléments à l'intérieur d'Alfresco (par exemple, exécuter un flux de travail, travailler avec des fichiers, des utilisateurs, des groupes ou d'autres entités).
Tous les webscripts ont deux modèles principaux de code pièce (.js, .java) et Freemaker (.ftl)
Webscript peut également avoir un fichier .properties supplémentaire avec des chaînes de texte utilisées. Les parties sont appariées dans le fichier context.xml (logique du framework Spring).
Il est lié à toute URL décrite dans ce fichier.
Bonjour World Script Web
Faisons un script web du monde Bonjour. Les scripts Web ont un descripteur, un contrôleur et, éventuellement, une vue. Ces fichiers doivent respecter une convention de dénomination.
Ce descripteur est nommé helloworld.get.desc.xml.
<webscript>
<shortname>Hello World</shortname>
<description>Hello world web script</description>
<url>/example/helloworld?name={nameArgument}</url>
<authentication>user</authentication>
</webscript>
Vous pouvez voir que le descripteur déclare que ce script Web sera associé à une URL, "/ example / helloworld", et qu’il requiert une authentification de l’utilisateur. Le descripteur déclare également un argument appelé name.
Voici le contrôleur Il s'appelle helloworld.get.js.
model.foo = "bar";
Ce contrôleur est écrit en JavaScript mais les contrôleurs peuvent également être écrits en Java. Avec un peu plus de travail, vous pouvez également écrire des contrôleurs dans d'autres langues.
Ce contrôleur ne fait pas grand chose. Il ajoute simplement une nouvelle variable au modèle appelé "foo" et lui donne une valeur de "bar".
Votre contrôleur a accès à une variété de variables de portée racine qui sont toutes documentées dans la documentation officielle .
Enfin, regardons la vue. Il s'appelle helloworld.get.html.ftl
<html>
<body>
<p>Hello, ${args.name!"name not specified"}!</p>
<p>Foo: ${foo}</p>
</body>
</html>
Vous pouvez voir à partir du nom que cette vue est implémentée en tant que modèle Freemarker et génère du HTML. Cette vue récupère la valeur de "foo" du modèle et elle saisit également l'argument de nom qui a été transmis au script Web. Si aucun argument de nom n'est spécifié, le modèle fournit un texte par défaut.
Si vous souhaitez produire XML ou JSON à la place, vous pouvez simplement modifier le nom, puis mettre à jour votre implémentation de modèle en conséquence.
Déploiement
Les scripts Web peuvent être déployés dans le classpath ou téléchargés dans le référentiel. Par exemple, pour déployer ce script Web en le téléchargeant dans le référentiel, procédez comme suit:
- Téléchargez ces trois fichiers dans les extensions de dictionnaire de données / scripts Web
- Actualisez les scripts Web en accédant à http: // localhost: 8080 / alfresco / s / index et en cliquant sur "Actualiser les scripts Web".
- Accédez au script Web en accédant à http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff
Folder Maker: un script Web qui gère le POST
Le script Web Hello World gère les méthodes HTTP GET. Mais que faire si vous voulez créer des données sur le serveur? Pour cela, votre script Web doit gérer le POST.
Voici un exemple simple qui crée de nouveaux dossiers dans Société Home. Il est appelé en faisant un appel POST avec un corps JSON qui ressemble à:
{'name':'testfolder'}
Vous pouvez éventuellement ajouter un titre ou une description au dossier en les passant en tant que parties du corps, comme:
{
'name':'testfolder',
'title':'test title',
'description':'test description'
}
Le descripteur s'appelle foldermaker.post.desc.xml:
<webscript>
<shortname>Folder Maker</shortname>
<description>Creates folders</description>
<family>Examples</family>
<url>/example/folders</url>
<format default="json"></format>
<authentication>user</authentication>
</webscript>
L'élément facultatif "famille" est un moyen pratique de regrouper les scripts Web dans l'index du script Web. L'élément "format" déclare que ce script Web renvoie JSON.
Le contrôleur s'appelle foldermaker.post.json.js:
var name = title = desc = null;
var name = json.get('name');
try {
title = json.get('title');
} catch (err) {}
try {
desc = json.get('description');
} catch (err) {}
var folder = companyhome.createFolder(name);
var needsSave = false;
if (title != null) {
folder.properties['cm:title'] = title;
needsSave = true;
}
if (desc != null) {
folder.properties['cm:description'] = desc;
needsSave = true;
}
if (needsSave) {
folder.save();
}
model.id = folder.nodeRef.toString();
model.name = name;
model.title = title;
model.description = desc;
Notez que ce contrôleur a "json" dans son nom. Ceci indique à Alfresco de s’attendre à une charge utile JSON. Alfresco analysera automatiquement le JSON et le placera dans une variable racine appelée "json".
Le contrôleur saisit le nom, le titre et la description du JSON et crée le dossier à l'aide de la variable d'étendue racine appelée "companyhome".
Si un titre ou une description est transmis, ces propriétés sont enregistrées.
Les valeurs transmises ainsi que la référence de noeud du nouveau dossier sont définies sur le modèle avant de transférer le contrôle à la vue.
La vue est nommée foldermaker.post.json.ftl:
{
<#if title??>
"title": "${title}",
</#if>
<#if description??>
"description": "${description}",
</#if>
"id": "${id}",
"name": "${name}"
}
Ce freemarker renvoie simplement les valeurs définies sur le modèle en tant que JSON. Le titre et la description peuvent ne pas toujours être présents, la vue utilise donc la vérification de null Freemarker intégrée dans une instruction if pour éviter de les renvoyer s'ils n'étaient pas définis.
Tout client HTTP peut être utilisé pour tester ce script Web. Voici à quoi cela ressemblerait en utilisant curl:
jpotts$ curl -uadmin:admin -H "content-type: application/json" -X POST "http://localhost:8080/alfresco/s/example/folders" -d "{'name':'testfolder','title':'test title', 'description':'test desc'}"
{
"title": "test title",
"description": "test desc"
"id": "workspace://SpacesStore/cc26a12f-306b-41f1-a859-668f11fc2a54",
"name": "testfolder"
}
Notez que curl transmet les informations d'authentification de base. Dans ce cas, il utilise "admin". Dans la mesure où cet exemple crée des éléments dans la société mère, vous devez utiliser un utilisateur disposant des autorisations appropriées pour le faire.
Ce script Web n'a pas de véritable vérification d'erreur. Si vous ne transmettez pas un nom ou si vous transmettez un nom déjà utilisé, vous verrez une erreur.