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 :

  1. Affecter un fournisseur à une tâche et fournir un assistant pour configurer les propriétés d'une entités ;
  2. 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 :

  1. Une tâche qui sera attribuée à un rôle de fournisseur.
  2. 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 d'un assistant pour les tâches

Le Wizard est une fonctionnalité de beCPG, accessible via une URL et automatiquement détecté par la tâche ad hoc du projet.

n assistant est composé d'étapes qui pointent vers un formulaire Alfresco ou une liste de données beCPG. Un assistant est défini dans une configuration de partage Alfresco, telle que le fichier share-config-custom.xml. Pour le moment, le concepteur ne permet pas la configuration d'un assistant.

Un assistant peut être défini de la manière suivante :

<config evaluator="string-compare" condition="wizard">
       <wizards>
            <wizard id="wizard-id">
                <step id="step1" label="Choose raw material" type="form" formId="supplier-article"
                    itemId="pjt:project" nextStepWebScript="becpg/project/entity?nodeRef={nodeRef}"></step>
                <step id="step2" label="Product information" type="form"
                    formId="" itemId="bcpg:finishedProduct"></step>
                <step id="step3" label="Packaging list" type="entityDataList" listId="packagingList"
                    itemId="bcpg:packagingList" title="Sample title"></step>
            </wizard>
        </wizards>  
     </config>
  • id : identifiant de l'assistant ou de l'étape ;
  • label ou label-id (i18n) : libellé de l'étape ;
  • type : type d'étape (form ou entityDataList) ;
  • listId : nom de la liste de données à afficher (pour le type entityDataList) ;
  • formId : identifiant du formulaire Alfresco à afficher (pour le type form) ;
  • itemId : qName Alfresco du nœud à afficher ;
  • title ou title-id : message de titre affiché en haut de l'étape ;
  • nextStepWebScript : script Web appelé lors de la transition entre les étapes, généralement utilisé pour changer le nœud maîtreRef.

Une fois créé et déployé, l'assistant est accessible via une URL. Pour l'édition :

 /share/page/wizard?id=wizard-id&nodeRef={nodeRef}

Ou pour la création d'un nouveau nœud :

 /share/page/wizard?id=wizard-id&destination={nodeRef}

Note : L'assistant fait partie du module de base, mais les éléments tels que la matière première, les allergènes et les types d'ingrédients font partie des modules PLM. Vous pouvez utiliser vos propres types et listes de données sans avoir besoin d'installer les modules PLM si cela ne vous est pas nécessaire.

Dans notre exemple, nous allons créer un assistant simple en trois étapes :

  1. Dans la première étape, le fournisseur remplit les propriétés de la matière première ;
  2. Dans la deuxième étape, le fournisseur remplit la liste des ingrédients ;
  3. Dans la troisième étape, le fournisseur remplit les allergènes.

L'assistant sera configuré comme suit :

<config evaluator="string-compare" condition="wizard">
        <wizards>
            <wizard id="supplier-mp">
                <step id="step1" label="Raw material information" type="form" formId="supplier-mp"
                    itemId="bcpg:rawMaterial" ></step>
                <step id="step2" label="Ingredients" type="entityDataList"
                    listId="ingList" itemId="bcpg:ingList"></step>
                <step id="step4" label="Allergen" type="entityDataList"
                    listId="allergenList" itemId="bcpg:allergenList"></step>
            </wizard>
        </wizards>  
 </config>

Vous pouvez désormais ajouter un livrable au projet et le lier à la tâche.

Utilisez cette URL :

/share/page/wizard?id=supplier-mp&nodeRef={pjt:projectEntity}

Le champ {pjt:projectEntity} signifie que le projet examine l'association pjt:projectEntity du projet pour trouver le nodeRef à utiliser pour afficher l'assistant. Vous pouvez utiliser l'un des remplacements suivants :

  • {nodeRef} : remplacez par le nodeRef du projet ;

  • {nodeRef|propName} : remplacez par la propriété du projet ;

  • {task|propName} : remplacez par la propriété de la tâche ;

  • {nodeRef|xpath:./path} : remplacez par le nodeRef trouvé dans le chemin relatif du projet ;

  • {assocName} : remplacez par l'association du nodeRef du projet ;

  • {assocName|propName} : remplacez par la propriété de l'association du projet ;

  • {assocName|@type} : remplacez par le type de l'association du projet (par exemple, bcpg:finishedProduct) ;

  • {assocName|xpath:./path} : remplacez par le nodeRef trouvé dans le chemin associé de l'association.

Vous pouvez maintenant démarrer le projet, choisir le modèle de projet "Fournisseur", sélectionner un utilisateur en tant que "rôle fournisseur" et choisir une matière première dans "Entité du projet".

Si vous avez configuré le flux de travail ad hoc pour la tâche, le fournisseur recevra une nouvelle tâche avec un lien vers l'assistant :

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.

results matching ""

    No results matching ""