Upload
others
View
9
Download
4
Embed Size (px)
Citation preview
alfresco
#alfresco
Table des matières
À propos 1
Chapitre 1: Démarrer avec alfresco 2
Remarques 2
Examples 2
Installation ou configuration 2
À propos d'Alfresco 3
Chapitre 2: Administration 4
Examples 4
Commencer et arrêter 4
Enregistrement 4
Les sauvegardes 4
Vérification 5
Chapitre 3: Comportement et politique 8
Examples 8
Fichier de version automatique s'il existe avec le même nom 8
Chapitre 4: Modèle Alfresco avec liste dynamique 11
Examples 11
Exemple de base 11
Chapitre 5: Script T-SQL pour créer une base de données Alfresco dans SQLServer 2008 - 20112
Introduction 12
Remarques 12
Examples 12
T-SQL_script_4_alfresco 12
Chapitre 6: Scripts Web 14
Introduction 14
Examples 14
Bonjour World Script Web 14
Folder Maker: un script Web qui gère le POST 15
Crédits 18
À propos
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: alfresco
It is an unofficial and free alfresco ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official alfresco.
The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/fr/home 1
Chapitre 1: Démarrer avec alfresco
Remarques
Editions disponibles
ÉditionSupport commercial
Prêt à la production
VendeurDernière date de sortie
Alfresco One Oui OuiAlfresco Software Inc.
Alfresco Community Edition
Non NonAlfresco Software Inc.
LXCommunity ECM Oui Oui Loftux AB
Examples
Installation ou configuration
Installations de développement et d'évaluation
Alfresco propose différents programmes d'installation pour différents systèmes d'exploitation et plates-formes. Cependant, ces installateurs ne sont pas recommandés pour les environnements de production.
https://www.alfresco.com/alfresco-community-download
https://sourceforge.net/projects/alfresco - plus de fichiers d’installation d’Alfresco, et des modules séparés également disponibles
Installations de production
Vous pouvez installer Alfresco sur les distributions Ubuntu en utilisant le script d'installation Alfresco Ubuntu de Loftux AB.
Pendant que vous effectuez l'installation à l'aide du script, vous pouvez choisir entre Alfresco Community Edition (sans support commercial) et LXCommunity ECM (avec un support commercial).
https://loftux.com/en/products-and-add-ons/alfresco-utilities
Addons
De plus, vous pouvez prolonger votre Alfresco avec des addons créés par la communauté - ils
https://riptutorial.com/fr/home 2
sont disponibles sur https://addons.alfresco.com
À propos d'Alfresco
Alfresco est un système ECM (Enterprise Content Management) basé sur les frameworks Java et le javascript. Alfresco (en tant que "référentiel" est le noyau de base d'Alfresco en tant que produit).
Il fournit par exemple. Stockage de contenu chiffré, paramètres d'autorisations spécifiques, types de contenu avec des propriétés spécifiques (comme le nom, la date de création, ainsi que les propriétés personnalisées peuvent être inclus).
Alfresco fournit également des processus de workflow séparés ou avec des documents, les flux de travail sont spécifiés par flux de diagramme (le moteur Activiti et jbpm est pris en charge; jbpm est déconseillé).
Le produit supporte également en partie Sharepoint (via les services bureautiques Alfresco - "aos", CIFS et autres fonctionnalités. Les fonctionnalités clés sont:
Stockage de contenu•Récupération de contenu•Modélisation de contenu•Interface de requête•Contrôle d'accès•Vérification•Versioning•
Le contenu utilisateur est enveloppé du calque de sécurité - le contenu binaire est enregistré sur le disque, mais la structure et les métadonnées sont enregistrées dans la base de données.
Cette partie "référentiel" du produit Alfresco as fournit une API REST pour les extensions telles que Alfresco Share.
Lien d'installation Alfresco pour Windows
http://docs.alfresco.com/community/tasks/simpleinstall-community-win.html
Pour Linux
http://docs.alfresco.com/community/tasks/simpleinstall-community-lin.html
Brève description de l'installation
http://docs.alfresco.com/community/concepts/install-community-intro.html
Lire Démarrer avec alfresco en ligne: https://riptutorial.com/fr/alfresco/topic/3748/demarrer-avec-alfresco
https://riptutorial.com/fr/home 3
Chapitre 2: Administration
Examples
Commencer et arrêter
Pour démarrer Alfresco:
Passer à l'utilisateur d'alfresco1. Passez dans le répertoire $ ALFRESCO_HOME2. Exécuter ./alfresco.sh start3.
Pour arrêter Alfresco:
Passer à l'utilisateur d'alfresco1. Passez dans le répertoire $ ALFRESCO_HOME2. Exécuter ./alfresco.sh start3.
Enregistrement
Les journaux Alfresco vivent dans $ ALFRESCO_HOME / tomcat / logs / catalina.out.
Les sauvegardes
Il existe de nombreuses manières de sauvegarder un système Alfresco. Il est important de sauvegarder la base de données ainsi que le Content Store. Vous pouvez également vouloir sauvegarder les indices Solr.
En supposant que vous avez installé à l'aide du programme d'installation binaire, et que tout réside dans $ ALRESCO_HOME, vous pouvez sauvegarder la base de données comme ceci:
Arrêtez Alfresco1. Passer à l'utilisateur d'alfresco2. Accédez au répertoire $ ALFRESCO_HOME / postgresql / bin3. ./pg_dump alfresco --user alfresco > $ALFRESCO_HOME/alf_data/db-backup.sql la base de données avec ./pg_dump alfresco --user alfresco > $ALFRESCO_HOME/alf_data/db-backup.sql . Vous pourriez être invité à entrer un mot de passe. Ce devrait être la même chose que le mot de passe administrateur que vous avez fourni lors de l'installation. Sinon, vérifiez le fichier $ ALFRESCO_HOME / tomcat / shared / classes / alfresco-global.properties pour le mot de passe de la base de données.
4.
Maintenant, votre base de données est sauvegardée. Il est important de le faire en premier. L'étape suivante consiste à sauvegarder le magasin de contenu.
Accédez au répertoire $ ALFRESCO_HOME / alf_data / contentstore.deleted.1. Tout supprimer ici. Il n'y a aucune raison de conserver ces fichiers et aucune raison de les 2.
https://riptutorial.com/fr/home 4
sauvegarder.Accédez au répertoire $ ALFRESCO_HOME / alf_data.3. Préparez le tout, qui inclura également la sauvegarde de la base de données que vous avez créée à l’étape précédente, en supposant que vous l’ayez placé dans le répertoire alf_data. Exécutez tar czvf ~/alfresco-backup.tar.gz . .
4.
Le contenu de ce fichier TAR a désormais tout ce dont vous avez besoin pour restaurer votre système de travail.
Vérification
L'audit est une fonctionnalité Alfresco qui permet à l'utilisateur de suivre et de consigner certains événements spécifiques lors de l'utilisation de la plateforme ECM.
Activer l'audit
Pour activer l'audit, vous devez ajouter des lignes de configuration au fichier alfresco-global.properties , qui réside dans tomcat/shared/classes/
audit.enabled = true audit.alfresco-access.enabled=true
Vous devez enregistrer les modifications apportées au fichier alfresco-global.properties et redémarrer le serveur Alfresco pour permettre l'audit.
Audit de la configuration par défaut
Voici la liste complète des propriétés de configuration qui peuvent être remplacées en modifiant le fichier alfresco-global.properties :
# Audit configuration audit.enabled=true audit.tagging.enabled=true audit.alfresco-access.enabled=false audit.alfresco-access.sub-actions.enabled=false audit.cmischangelog.enabled=false audit.dod5015.enabled=false # Setting this flag to true will force startup failure when invalid audit configurations are detected audit.config.strict=false # Audit map filter for AccessAuditor - restricts recorded events to user driven events. In this case it neglect events issued by a System or a null user, the content or folder path is under /sys:archivedItem or under /ver: and the node type is not cm:folder, cm:content or st:site audit.filter.alfresco-access.default.enabled=false audit.filter.alfresco-access.transaction.user=~System;~null;.* audit.filter.alfresco-access.transaction.type=cm:folder;cm:content;st:site audit.filter.alfresco-access.transaction.path=~/sys:archivedItem;~/ver:;.*
https://riptutorial.com/fr/home 5
#The default to preserve all cm:auditable data on a node when the process is not directly driven by a user action system.auditableData.preserve=${system.preserve.modificationData} #Specific control of how the FileFolderService treats cm:auditable data when performing moves system.auditableData.FileFolderService=${system.auditableData.preserve} #Specific control of whether ACL changes on a node trigger the cm:auditable aspect system.auditableData.ACLs=${system.auditableData.preserve}
Comme d'habitude, vous devez enregistrer les modifications apportées au fichier alfresco-global.properties et redémarrer le serveur Alfresco afin d'activer ces modifications.
Filtres d'audit
Les filtres d'audit sont des propriétés qui spécifient la stratégie utilisée pour filtrer les événements d'audit en utilisant une expression régulière particulière pour inclure ou exclure des événements. Les filtres d'audit personnalisés et par défaut peuvent être ajoutés en tant que substitutions dans le fichier de configuration alfresco-global.properties .
L'anatomie d'une propriété de filtre d'audit est la suivante:
audit.filter.<data_producer>.<path>
où <data-producer> est l'un des producteurs de données intégrés à Alfresco:
alfresco-access : un large éventail d'événements de haut niveau tels que les connexions (réussies et échouées), mises à jour de propriétés, CRUD sur les nœuds, lectures / mises à jour de contenu, ajout et suppression d'aspect, gestion des versions, opérations d'archivage / extraction
1.
alfresco-node2. alfresco-api : événements émis par l'appel de méthodes et de services API de bas niveau. Par exemple, il peut être utilisé pour répertorier les paramètres de la liste de recherche SearchServices, la liste des propriétés à l'aide de PropertyServices, les opérations sur les nœuds à l'aide de NodeServices, etc.
3.
et path est la valeur du chemin réel à filtrer.
Les noms de propriété ont un préfixe audit.filter. * Et utilisent '.' en tant que séparateur où, en tant que composants de rootPath et clés de la carte d'audit, utilisez '/'.
Les listes sont évaluées de gauche à droite et si aucune correspondance n'est faite à la fin de la liste, la valeur est rejetée. S'il n'y a pas de propriété pour une valeur donnée ou si une liste vide est définie, toute valeur est acceptée.
Chaque expression régulière de la liste est séparée par un point-virgule (';'). Les expressions comprenant un point-virgule peuvent être échappées en utilisant un ''.
https://riptutorial.com/fr/home 6
Notez que si le drapeau audit.config.strict est défini sur true, le démarrage d'Alfresco échouera en cas de détection de configurations d'audit non valides.
Une expression commençant par un '~' indique que toute valeur correspondante doit être rejetée. Si le premier caractère d'une expression doit être un '~' , il peut être échappé avec un '\' .
L'ajout de .* à la fin d'un filtre inclura toutes les valeurs qui n'ont pas été spécifiquement exclues
Les filtres peuvent être l'un des suivants:
transaction.user - spécifie quelles actions d'utilisateur seront / ne seront pas auditées. Par exemple: les actions de tous les utilisateurs à l'exception de «Système» seront auditées
transaction.type - les actions effectuées sur le type de document spécifié seront auditées.
default.path - les actions qui se produisent sur les documents dans le chemin spécifié seront auditées
transaction.action - spécifie quelles actions seront et ne seront pas auditées. Certains des événements d'audit qui peuvent être activés ou désactivés à l'aide de cette propriété sont les suivants: LIRE, DÉPLACER, COPIER, INSCRIRE, CHECK OUT, CANCEL CHECK OUT, CREATE VERSION, readContent, addNodeAspect, deleteNodeAspect, updateNodeProperties.
Pour plus d'informations sur les filtres d'audit:
https://github.com/tsgrp/OpenContent/wiki/Alfresco-Audit-Configuration
http://docs.alfresco.com/5.1/concepts/audit-example-filter.html
Lire Administration en ligne: https://riptutorial.com/fr/alfresco/topic/6271/administration
https://riptutorial.com/fr/home 7
Chapitre 3: Comportement et politique
Examples
Fichier de version automatique s'il existe avec le même nom
Si le fichier existe avec le même nom, il mettra à jour le fichier avec la nouvelle version.
Pour le registre bean Class dans le fichier service-context.xml
<bean id="autoVersionByNameBehaviour" class="test.demoamp.AutoVersionByNameBehaviour" init-method="init"> <property name="policyComponent" ref="policyComponent"/> <property name="nodeService" ref="NodeService"/> <property name="contentService" ref="ContentService"/> <property name="siteService" ref="SiteService" /> <property name="fileFolderService" ref="FileFolderService"/> <property name="activityService" ref="activityService"/> </bean>
et la classe java
import java.net.URLEncoder; import org.alfresco.model.ContentModel; import org.alfresco.repo.node.NodeServicePolicies; import org.alfresco.repo.policy.Behaviour; import org.alfresco.repo.policy.JavaBehaviour; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.service.cmr.activities.ActivityService; import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.apache.commons.io.FilenameUtils; import org.json.JSONStringer; import org.json.JSONWriter; public class AutoVersionByNameBehaviour implements NodeServicePolicies.OnCreateNodePolicy { private PolicyComponent policyComponent; private NodeService nodeService; private ContentService contentService; private ActivityService activityService; private SiteService siteService; private FileFolderService fileFolderService; public void init() {
https://riptutorial.com/fr/home 8
this.policyComponent.bindClassBehaviour(NodeServicePolicies.OnCreateNodePolicy.QNAME, ContentModel.TYPE_CONTENT, (Behaviour)new JavaBehaviour((Object)this, "onCreateNode", Behaviour.NotificationFrequency.TRANSACTION_COMMIT)); } public void onCreateNode(ChildAssociationRef childAssocRef) { NodeRef previouslyExistentDoc; NodeRef uploadedNodeRef = childAssocRef.getChildRef(); if (this.nodeService.exists(uploadedNodeRef) && this.isContentDoc(uploadedNodeRef) && (previouslyExistentDoc = this.existedPreviousDocument(uploadedNodeRef)) != null) { ContentReader reader = this.contentService.getReader(uploadedNodeRef, ContentModel.PROP_CONTENT); ContentWriter writer = this.contentService.getWriter(previouslyExistentDoc, ContentModel.PROP_CONTENT, true); writer.putContent(reader); this.nodeService.addAspect(uploadedNodeRef, ContentModel.ASPECT_HIDDEN, null); this.postActivityUpdated(previouslyExistentDoc); this.nodeService.deleteNode(uploadedNodeRef); } } private void postActivityUpdated(NodeRef nodeRef) { SiteInfo siteInfo = this.siteService.getSite(nodeRef); String jsonActivityData = ""; try { JSONWriter jsonWriter = new JSONStringer().object(); jsonWriter.key("title").value((Object)this.nodeService.getProperty(nodeRef, ContentModel.PROP_NAME).toString()); jsonWriter.key("nodeRef").value((Object)nodeRef.toString()); StringBuilder sb = new StringBuilder("document-details?nodeRef="); sb.append(URLEncoder.encode(nodeRef.toString(), "UTF-8")); jsonWriter.key("page").value((Object)sb.toString()); jsonActivityData = jsonWriter.endObject().toString(); } catch (Exception e) { throw new RuntimeException(e); } FileInfo fileInfo = this.fileFolderService.getFileInfo(nodeRef); this.activityService.postActivity("org.alfresco.documentlibrary.file-updated", siteInfo == null ? null : siteInfo.getShortName(), siteInfo == null ? null : "documentLibrary", jsonActivityData, null, fileInfo); } private boolean isContentDoc(NodeRef nodeRef) { return this.nodeService.getType(this.nodeService.getPrimaryParent(nodeRef).getParentRef()).isMatch(ContentModel.TYPE_FOLDER); } private NodeRef existedPreviousDocument(NodeRef currentNodeRef) { String fileName = AutoVersionByNameBehaviour.cleanNumberedSuffixes(this.nodeService.getProperty(currentNodeRef, ContentModel.PROP_NAME).toString()); if (!fileName.equals(this.nodeService.getProperty(currentNodeRef, ContentModel.PROP_NAME).toString())) { NodeRef folder = this.nodeService.getPrimaryParent(currentNodeRef).getParentRef(); return this.nodeService.getChildByName(folder, ContentModel.ASSOC_CONTAINS, fileName); } return null; }
https://riptutorial.com/fr/home 9
public static String cleanNumberedSuffixes(String fileName) { String cleanedFileName = fileName; String baseName = FilenameUtils.getBaseName((String)fileName); if (baseName.indexOf("-") != -1 && AutoVersionByNameBehaviour.isInteger(baseName.substring(baseName.lastIndexOf("-") + 1, baseName.length()))) { return baseName.substring(0, baseName.lastIndexOf("-")) + FilenameUtils.EXTENSION_SEPARATOR_STR + FilenameUtils.getExtension((String)fileName); } return cleanedFileName; } public static boolean isInteger(String s) { boolean isValidInteger = false; try { Integer.parseInt(s); isValidInteger = true; } catch (NumberFormatException var2_2) { // empty catch block } return isValidInteger; } public void setPolicyComponent(PolicyComponent policyComponent) { this.policyComponent = policyComponent; } public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } public void setContentService(ContentService contentService) { this.contentService = contentService; } public void setActivityService(ActivityService activityService) { this.activityService = activityService; } public void setSiteService(SiteService siteService) { this.siteService = siteService; } public void setFileFolderService(FileFolderService fileFolderService) { this.fileFolderService = fileFolderService; }
}
Lire Comportement et politique en ligne: https://riptutorial.com/fr/alfresco/topic/9696/comportement-et-politique
https://riptutorial.com/fr/home 10
Chapitre 4: Modèle Alfresco avec liste dynamique
Examples
Exemple de base
content-model.xml :
.... <constraints> <constraint name="my:aConstraintList" type="x.y.z.project.model.constraint.AConstraintList"> </constraint> .... <property name="my:aValue"> <title>My Value</title> <type>d:text</type> <constraints> <constraint ref="my:aConstraintList"></constraint> </constraints> </property>
et la classe Java déclarée avant:
public class AConstraintList extends ListOfValuesConstraint implements Serializable { .... @Override public final List<String> getAllowedValues() { // Return here the list of values. Enum, call a webservice, etc. } @Override public final String getDisplayLabel(final String value, final MessageLookup messageLookup) { // Return here the label for the value } }
Lire Modèle Alfresco avec liste dynamique en ligne: https://riptutorial.com/fr/alfresco/topic/6272/modele-alfresco-avec-liste-dynamique
https://riptutorial.com/fr/home 11
Chapitre 5: Script T-SQL pour créer une base de données Alfresco dans SQLServer 2008 - 2014
Introduction
Il est utile d’avoir un script T-SQL pour créer et configurer une nouvelle base de données et un nouvel utilisateur à des fins d’installation d’Alfresco. Il est fastidieux de parcourir de nombreuses pages sur MSDN.
Je fournis le script ci-après:
Remarques
Les directives pour préparer Alfresco Instalation à une base de données SQLServer peuvent être lues ici:
[ http://docs.alfresco.com/3.4/tasks/sqlserver-config.html][1]•
Examples
T-SQL_script_4_alfresco
/* creates a database for Alfresco, on SQLServer 2008- 2014 */ use master; GO CREATE DATABASE alfresco; GO /* creates a new LOGIN and associated User use alfresco; GO CREATE LOGIN alfresco WITH PASSWORD = 'alfresco'; GO use alfresco; go CREATE USER alfresco FOR LOGIN alfresco; GO /* Now try to add alfresco user to the db_owner Role NOTICE: coinnect to alfresco database before you can also connect as a local Windows user, in order to successfully execute the followings: */ use alfresco; GO EXEC sp_addrolemember N'db_owner', N'alfresco'; GO /* sets Isolation level */
https://riptutorial.com/fr/home 12
ALTER DATABASE alfresco SET ALLOW_SNAPSHOT_ISOLATION ON; GO /* creates and sets the alfesco schema as the default one */ use alfresco; go CREATE SCHEMA alfresco AUTHORIZATION alfresco; GO ALTER USER alfresco WITH DEFAULT_SCHEMA = alfresco; GO /* tests table creation */ drop table _buttamiVia_; GO create table _buttamiVia_ ( id int not null ); GO
Lire Script T-SQL pour créer une base de données Alfresco dans SQLServer 2008 - 2014 en ligne: https://riptutorial.com/fr/alfresco/topic/9370/script-t-sql-pour-creer-une-base-de-donnees-alfresco-dans-sqlserver-2008---2014
https://riptutorial.com/fr/home 13
Chapitre 6: Scripts Web
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.
Examples
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 .
https://riptutorial.com/fr/home 14
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 Web1. Actualisez les scripts Web en accédant à http: // localhost: 8080 / alfresco / s / index et en cliquant sur "Actualiser les scripts Web".
2.
Accédez au script Web en accédant à http: // localhost: 8080 / alfresco / s / example / helloworld? Name = Jeff
3.
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:
https://riptutorial.com/fr/home 15
<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.
https://riptutorial.com/fr/home 16
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.
Lire Scripts Web en ligne: https://riptutorial.com/fr/alfresco/topic/6066/scripts-web
https://riptutorial.com/fr/home 17
Crédits
S. No
Chapitres Contributeurs
1Démarrer avec alfresco
bhagyas, Community, vikash, xxxvodnikxxx
2 Administration abarisone, Jeff Potts
3Comportement et politique
vikash
4Modèle Alfresco avec liste dynamique
Akah
5
Script T-SQL pour créer une base de données Alfresco dans SQLServer 2008 - 2014
ciroBorrelli
6 Scripts Web Jeff Potts, xxxvodnikxxx
https://riptutorial.com/fr/home 18