Configuration avancée du projet
Note : Cette section suppose que vous possédez des compétences Alfresco, notamment en ce qui concerne les modèles et les API Javascript.
Le module de projet est un outil très puissant qui peut être utilisé pour atteindre des objectifs sans nécessiter la création de flux de travail complexes.
Certaines des fonctionnalités avancées incluent :
- Attribution de rôles ;
- Utilisation d'un assistant utilisateur ;
- Utilisation de scripts Javascript pour les livrables.
Imaginons que vous souhaitiez créer un nouveau projet pour la mise en œuvre d'un portail fournisseur.
Voici ce que vous voulez accomplir :
- Affecter un fournisseur à une tâche et fournir un assistant pour configurer les propriétés d'une entités ;
- Ajouter des actions personnalisées et des e-mails au début ou à la fin d'une tâche.
Dans cette documentation, nous suivrons cet exemple comme tutoriel.
Création du modèle de projet fournisseur
Notre exemple de projet comportera deux tâches :
- Une tâche qui sera attribuée à un rôle de fournisseur.
- Une tâche attribuée à l'initiateur du projet pour valider les données.
Pour ce faire, créez un nouveau projet et ajoutez-y les tâches comme suit :

Une fois cela fait, vous pouvez définir ce nouveau projet comme modèle pour le réutiliser ultérieurement.
Création de rôles d'utilisateurs
e module de projet est fourni avec deux rôles par défaut
- Chef de projet (PROJECT_pjt_projectManager)
- Créateur de projet (PROJECT_cm_creator)
Un rôle est simplement un groupe dans beCPG.
Pour créer un nouveau rôle de projet, vous devez créer un groupe avec un nom commençant par PROJECT_ suivi du qName d'une association Alfresco. Cette propriété sera lue sur le nœud du projet et doit être de type personne.
Voici un exemple de rôle de fournisseur :
- Créez d'abord votre aspect personnalisé dans Alfresco avec l'association pour le fournisseur.
Vous pouvez utiliser le concepteur de modèles beCPG.
Accédez au concepteur --> Ouvrez le modèle externe --> Ajoutez une nouvelle association à l'aspect personnalisé de type cm:person. Créez ensuite le formulaire correspondant et publiez le modèle.

Ou vous pouvez le créer en utilisant XML.
Commencez par le modèle :
<aspect name="ext1:customAspect">
<title>Adv project tutorial aspect</title>
<associations>
<association name="ext1:extSupplierRef">
<title>Supplier role</title>
<source>
<mandatory>false</mandatory>
<many>true</many>
</source>
<target>
<class>cm:person</class>
<mandatory enforced="false">false</mandatory>
<many>false</many>
</target>
</association>
</associations>
</aspect>
Puis configurez le formulaire :
<alfresco-config>
<config condition="ext1:customAspect" evaluator="aspect" replace="false">
<forms>
<form>
<field-visibility>
<show force="false" id="ext1:extSupplierRef" />
</field-visibility>
<appearance>
<field id="ext1:extSupplierRef" mandatory="false" read-only="false" />
</appearance>
</form>
</forms>
</config>
</alfresco-config>
- Ensuite, ajoutez cet aspect à votre modèle de projet.
Vous pouvez utiliser la console Javascript :
var node = search.findNode("workspace://SpacesStore/1c99529c-3719-4381-bf29-4175ec3ee255");
node.addAspect("ext1:customAspect");
Après cela, vous devriez avoir un nouveau champ où vous pouvez ajouter un fournisseur à votre projet.

- Créez au moins un nouveau groupe beCPG nommé PROJECT_ext1_extSupplierRef et ajoutez-le comme ressource à votre tâche.

Vous avez ainsi créé un nouveau rôle de projet.

Vos utilisateurs peuvent désormais démarrer un nouveau projet, choisir le modèle "Fournisseur" et attribuer une personne au rôle de fournisseur.
Création de scripts de tâches
Les scripts pour les tâches sont un moyen très puissant d'exécuter un code personnalisé pendant le flux de projet.
Les scripts pour les tâches sont définis avec les scripts du référentiel Alfresco, avec certaines variables personnalisées ajoutées :
project : une référence au projet. Notez que ce n'est pas un nœud Alfresco, mais une entitée beCPG ProjectData.java. Pour obtenir le nœud du projet Alfresco, utilisez la méthode suivante :
var projectNode = search.findNode(project.nodeRef);
shareUrl l'URL vers Share.
Note : Toutes les variables présentes dans ProjectData doivent être obtenues par l'accesseur de données du projet. N'essayez pas d'utiliser l'API Alfresco pour cela, sinon vous risquez d'obtenir des résultats inattendus.
Exemple :
project.state = "InProgress";
project.hierarchy1 = "workspace://SpacesStore/678c2a75-1c2c-4b00-91e7-594788c004d3";
project.hierarchy2 = "workspace://SpacesStore/4d2a7e69-4b02-4458-a61f-dcd87416ea7c";
Consultez la documentation d'Alfresco pour en savoir plus sur les API : http://docs.alfresco.com/4.2/concepts/API-JS-intro.html
Dans notre exemple, nous utiliserons cette fonctionnalité pour envoyer un e-mail personnalisé au fournisseur une fois que la matière première aura été approuvée.
Créez un fichier post-validation.js avec le contenu suivant :
function main()
{
var supplier = null, rawMaterial = null;
var projectNode = search.findNode(project.nodeRef);
if (projectNode.assocs["ext1:extSupplierRef"] != null && projectNode.assocs["ext1:extSupplierRef"].length > 0)
{
supplier = projectNode.assocs["ext1:extSupplierRef"][0];
}
if (projectNode.assocs["pjt:projectEntity"] != null && projectNode.assocs["pjt:projectEntity"].length > 0)
{
rawMaterial = projectNode.assocs["pjt:projectEntity"][0];
}
if (supplier != null && rawMaterial!=null)
{
try
{
var mail = actions.create("mail");
mail.parameters.html = "html";
mail.parameters.to = supplier.properties["cm:email"];
mail.parameters.subject = "[" + projectNode.name + "] Raw material validated";
mail.parameters.from = "support@becpg.fr";
mail.parameters.ignore_send_failure = true;
mail.parameters.text = "<html>Hi, <br/><br/>" + "Raw material is validated. Thanks"
+"<a href=" + shareUrl + "/page/entity-details?nodeRef=" + rawMaterial.nodeRef + ">" + rawMaterial.name + "</a></html>";
mail.execute(projectNode);
}
catch (e)
{
logger.error("Cannot send mail :");
logger.error(" - subject: " + subject);
logger.error(" - e: " + e);
}
}
}
main();
Ajoutez ce fichier comme livrable à votre projet. Sélectionnez le fichier JS dans les documents et définissez l'option Ordre d'exécution sur Post.
Le script sera exécuté une fois que la tâche sera terminée. Utilisez Pre pour le lancer avant.

Conclusion
Comme vous pouvez le constater, le module de projet permet de créer des flux de processus avancés sans avoir à recourir à des flux de travail complexes. L'avantage principal de cette approche réside dans la possibilité de gérer la planification du processus et de le modifier en cours d'exécution. Le module de projet est également plus simple à configurer, car il peut être déployé sans nécessiter de redémarrage du serveur.
Vous avez également la possibilité de créer des tâches de validation et de refus. En configurant la possibilité de refuser une tâche dans les paramètres de la tâche, un bouton de refus sera affiché dans la tâche ad hoc.
Le recours à des flux de travail est recommandé lorsque le processus ne change pas avec le temps et que des bifurcations et des retours sont nécessaires.