As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
j'ai installé avec succès (heu, d'ailleurs j'ai plein de trucs à dire la dessus, ça s'est pas bien passé) la version Community sur un Xubuntu.
- Des éléves on un écrit à rendre à un prof, il se connecte sur Alfresco et écrivent l'article dans leur espace perso. Il peuvent l'éditer plusieurs fois, et quand il sont prêt à le rendre, ils le mettent dans un genre d'espace d'échange avec le prof (un répertoire spécifique, ou mieux ?).- Le prof est prévenue qu'un nouveau document à été rendu (via RSS, mail… que propose Alfresco ?).- Le prof corrige le document, et le rend à l'éléve.- L'éléve corrige les erreurs signalé par le prof et renvoi le document dans un nouveau dossier, genre "Prêt pour publication", ou alors, peut être qu'on peut créer des statut personnalisé sur les documents ?- Le prof valide et publie le document (ou ? Je sais pas trop, en facade d'Alfresco, accessible à tous le monde ça doit être possible ?).Voilà c'est plutôt simple il me semble (surtout si on utilise l'éditeur WYSIWYG interne), seulement je ne sais pas comment m'y prendre (Il s'agit d'un workflow c'est ça ?).
<?xml version="1.0" encoding="UTF-8"?><process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:review"> <swimlane name="initiator" /> (J'aimerais que le workflow soit lancé à la création du fichier par un membre du groupe éléve, automatiquement, ça devrait être la que ça se passe non ?) <start-state name="start"> <task name="wf:submitReviewTask" swimlane="initiator" /> <transition name="" to="review" /> </start-state> <swimlane name="reviewer"> <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <actor>#{bpm_assignee}</actor> (Ici je pense qu'il s'agit de la partie ou on dit "qui doit revoir le document", dans mon cas il s'agit de n'importe qui dans le groupe Prof, ça devrait simplifier le truc) </assignment> </swimlane> <task-node name="review"> <task name="wf:reviewTask" swimlane="reviewer"> <event type="task-create"> <script> if (bpm_workflowDueDate != void) taskInstance.dueDate = bpm_workflowDueDate; if (bpm_workflowPriority != void) taskInstance.priority = bpm_workflowPriority; </script> </event> </task> <transition name="approve" to="approved" />(Là c'est les deux actions possible, ok) <transition name="reject" to="rejected" /> </task-node>(Et la les deux actions font pareil… ok, moi il faut juste qu'en cas de "approved" je déplace le fichier vers un espace public, et qu'en cas de "rejected", on recommence à zéro le process de review, ça doit être possible ?) <task-node name="rejected"> <task name="wf:rejectedTask" swimlane="initiator" /> <transition name="" to="end" /> </task-node> <task-node name="approved"> <task name="wf:approvedTask" swimlane="initiator" /> <transition name="" to="end" /> </task-node> <end-state name="end" /></process-definition>
<swimlane name="reviewer"> <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <actor>#{bpm_assignee}</actor> </assignment> </swimlane>
Personne n'est donc disposé à m'aider ?
J'ai un peu avancé mais la documentation est pas très friendly… ni très complète.
Pour un projet open source de cette envergure, avec la popularité qu'il a je m'attendais à une communauté plus active…
Je cherche toujours comment modifier le noeud rewiever pour le remplacer par quelque chose qui désigne un groupe complet.
Si j'avais au moins des exemples de workflow avancé, mais non à part les deux par défaut j'ai rien…
J'ai déplacé le sujet dans le forum adapté, ça devrait aider.
Vrai en partie. Avez-vous pu jeter un oeil au tutoriel de Jeff Potts ? C'est la meilleure "mise en jambe" que je connaisse.
Vous avez parlé de problèmes d'installations sans les préciser. De fait ça ne profite à personne. Vous voyez, ça tient à peu de choses et si la communauté est active, elle est encore jeune, donc à nouveau … patience, on fait au maximum, mais les journées ne font que 24 heures et parfois on se rate un peu …
Avez-vous vous jeté un oeil à "bpm:groupAssignee" et "bpm:groupAssignees" au lieu de "bpm:assignee" ?
Il existe 5 exemples fournis avec Alfresco. Voir les fichiers "lifecycle-workflow-context.xml.sample" et "workflow-context.xml.sample" qui devraient vous donner des pistes en ce qui concerne les groupes.
<?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="submit-review-pub"> <swimlane name="initiator" /> <start-state name="start"> <transition name="" to="review" /> </start-state> <swimlane name="reviewer"> <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <pooledactors>#{people.getGroup("GROUP_professeurs")}</pooledactors> </assignment> </swimlane> <task-node name="review"> <task name="wf:reviewTask" swimlane="reviewer" /> <transition name="approve" to="approved" /> <transition name="reject" to="rejected" /> </task-node> <task-node name="rejected"> <task name="wf:rejectedTask" swimlane="initiator" /> <transition name="" to="review" /> </task-node> <task-node name="approved"> <task name="wf:approvedTask" swimlane="initiator" /> <transition name="" to="end" /> </task-node> <end-state name="end" /> </process-definition>
Veuillez corriger les erreurs ci-dessous puis cliquez sur Terminer. * Une erreur système s'est produite pendant l'opération : null
<?xml version="1.0" encoding="UTF-8"?> <!– LPR Validation 12.1 –> <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="lwf:validation"> <!– Workflow Initiator –> <swimlane name="initiator"/> <!– Workflow Reviewer –> <swimlane name="reviewer"> <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <actor>#{reviewer}</actor> </assignment> </swimlane> <!– Workflow Approbators –> <swimlane name="approbators"> <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <pooledactors>#{group}</pooledactors> </assignment> </swimlane> <!– Workflow Quality Approbators –> <swimlane name="qualityassignees"> <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <pooledactors>GROUP_A_QUALITY_APPROBATORS</pooledactors> </assignment> </swimlane> <!–**************************–> <!–** <Start State> **–> <!–** start **–> <!–**************************–> <start-state name="start"> <task name="lwf:submitReviewAndApprovalTask" swimlane="initiator" /> <event type="node-leave"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Start State</type> <name>start</name> <disable>false</disable> </action> <!– Remove all currents Permissions –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <permission>remove</permission> </action> </event> <transition name="" to="checkreview"/> </start-state> <!–**************************–> <!–** <Decision> **–> <!–** checkreview **–> <!–**************************–> <decision name="checkreview"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Decision</type> <name>checkreview</name> <disable>false</disable> </action> <!– Check is the variable lwf_reviewAssignees exist –> <action class="lpr.alfresco.repo.workflow.jbpm.CheckTypeExist"> <var>#{lwf_reviewAssignees}</var> <type>reviewtype</type> </action> <!– Set read permission for the initiator –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <actor>#{initiator}</actor> <permission>set</permission> </action> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> logger.log("Review Type is seting up to: " + reviewtype); </script> </action> </event> <transition name="approval" to="startapproval"/> <transition name="review" to="startreview"> <condition>#{reviewtype == "true"}</condition> </transition> </decision> <!–**************************–> <!–** <Node> **–> <!–** startreview **–> <!–**************************–> <node name="startreview"> <action class="org.alfresco.repo.workflow.jbpm.ForEachFork"> <foreach>#{lwf_reviewAssignees}</foreach> <var>reviewer</var> </action> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Node</type> <name>startreview</name> <disable>false</disable> </action> <!– Set document status to Review –> <action class="lpr.alfresco.repo.workflow.jbpm.SetDocumentStatus"> <status>Review</status> </action> <!– Move Document to Review and Approval folder –> <action class="lpr.alfresco.repo.workflow.jbpm.MoveDocument"> <folderdst>Review and Approval</folderdst> </action> <script> <variable name="lwf_reviewCount" access="write" /> <expression> lwf_reviewCount = 0; </expression> </script> </event> <transition name="review" to="review"/> </node> <!–**************************–> <!–** <Task Node> **–> <!–** review **–> <!–**************************–> <task-node name="review"> <task name="lwf_reviewTask" swimlane="reviewer"> <!– assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment"> <actor>#{reviewer}</actor> </assignment–> </task> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Task Node</type> <name>review</name> <disable>false</disable> </action> <!– Set read permission for tne current reviewer –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <actor>#{reviewer}</actor> <permission>set</permission> </action> </event> <transition name="reject" to="endReview"/> <transition name="approve" to="endReview"> <script> <variable name="lwf_reviewCount" access="read,write" /> <expression> lwf_reviewCount = lwf_reviewCount + 1; </expression> </script> </transition> </task-node> <!–**************************–> <!–** <<Join>> **–> <!–**************************–> <join name="endReview"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Join</type> <disable>false</disable> </action> <!– Unset read permission for tne current reviewer –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <actor>#{reviewer}</actor> <permission>unset</permission> </action> </event> <transition to="isreviewed" /> </join> <!–**************************–> <!–** <Decision> **–> <!–** isreviewed **–> <!–**************************–> <decision name="isreviewed"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Decision</type> <name>isreviewed</name> <disable>false</disable> </action> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <variable name="lwf_requiredReviewerPercent" access="write"/> <expression>lwf_requiredReviewerPercent = lwf_requiredReviewPercent;</expression> </script> </action> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <variable name="lwf_reviewerCount" access="write"/> <expression>lwf_reviewerCount = lwf_reviewAssignees.size();</expression> </script> </action> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <variable name="lwf_actualReviewerPercent" access="write"/> <expression>lwf_actualReviewerPercent = ((lwf_reviewCount * 100) / lwf_reviewerCount);</expression> </script> </action> </event> <transition name="reject" to="rejected"/> <transition name="approve" to="startapproval"> <condition>#{lwf_actualReviewerPercent >= lwf_requiredReviewerPercent}</condition> </transition> </decision> <!–**************************–> <!–** <Node> **–> <!–** startapproval **–> <!–**************************–> <node name="startapproval"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Node</type> <name>startapproval</name> <disable>false</disable> </action> <!– Set document status to In Approval –> <action class="lpr.alfresco.repo.workflow.jbpm.SetDocumentStatus"> <status>Approval</status> </action> <!– Move Document to Review and Approval folder –> <action class="lpr.alfresco.repo.workflow.jbpm.MoveDocument"> <folderdst>Review and Approval</folderdst> </action> <!– Get Approbators Group –> <action class="lpr.alfresco.repo.workflow.jbpm.getApprobators"> <var>group</var> </action> <!– Set read permission for approbators group –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>#{group}</pooledactors> <permission>set</permission> </action> </event> <transition name="lwf_approve" to="approval"/> </node> <!–**************************–> <!–** <Task Node> **–> <!–** approval **–> <!–**************************–> <task-node name="approval"> <task name="lwf_approvalTask" swimlane="approbators"> <event type="task-end"> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <expression> if (taskInstance.actorId == null) taskInstance.actorId = person.properties.userName; </expression> </script> </action> </event> </task> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Task Node</type> <name>approval</name> <disable>false</disable> </action> <!– Set read permission for tne current approbator –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>#{group}</pooledactors> <permission>set</permission> </action> </event> <event type="node-leave"> <!– Unset read permission for tne group approbator –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>#{group}</pooledactors> <permission>unset</permission> </action> </event> <transition name="reject" to="rejected" /> <transition name="approve" to="checkpdf" /> </task-node> <!–**************************–> <!–** <Decision> **–> <!–** checkpdf **–> <!–**************************–> <decision name="checkpdf"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Decision</type> <name>checkpdf</name> <disable>false</disable> </action> <!– Check if PDF convertion is enabled –> <action class="lpr.alfresco.repo.workflow.jbpm.CheckPDFConvert"> <var>pdf</var> </action> </event> <transition name="quality" to="startquality"/> <transition name="published" to="published"> <condition>#{pdf == "true"}</condition> </transition> </decision> <!–**************************–> <!–** <Node> **–> <!–** startquality **–> <!–**************************–> <node name="startquality"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Node</type> <name>startquality</name> <disable>false</disable> </action> <action class="lpr.alfresco.repo.workflow.jbpm.SetDocumentStatus"> <status>Quality Approval</status> </action> <!– Move Document to Drafts folder –> <action class="lpr.alfresco.repo.workflow.jbpm.MoveDocument"> <qualitydst>Quality</qualitydst> </action> <!– Set Editor permission for the Quality Group –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>GROUP_A_QUALITY_APPROBATORS</pooledactors> <permission>setEditor</permission> </action> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <variable name="lwf_qualityReference" access="write"/> <expression>lwf_qualityReference="EU-DSI-IOP.0001";</expression> </script> </action> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <variable name="lwf_qualityAgreement" access="write"/> <expression>lwf_qualityAgreement="v1.0.Published.2008-04-23";</expression> </script> </action> </event> <transition name="approval" to="quality"/> </node> <!–**************************–> <!–** <Task Node> **–> <!–** quality **–> <!–**************************–> <task-node name="quality"> <task name="lwf_qualityTask" swimlane="qualityassignees"> <event type="task-end"> <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript"> <script> <expression> if (taskInstance.actorId == null) taskInstance.actorId = person.properties.userName; </expression> </script> </action> </event> </task> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Task Node</type> <name>quality</name> <disable>false</disable> </action> </event> <event type="node-leave"> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>GROUP_A_QUALITY_APPROBATORS</pooledactors> <permission>unsetEditor</permission> </action> <!– Move Document to Drafts folder –> <action class="lpr.alfresco.repo.workflow.jbpm.MoveDocument"> <folderdst>Review and Approval</folderdst> </action> </event> <!– transition name="continue" to="qualityapproval" /–> <transition name="continue" to="published"/> </task-node> <!–**************************–> <!–** <Task Node> **–> <!–** qualityapproval **–> <!–**************************–> <!–task-node name="qualityapproval2"> <task name="lwf_QualityTask" swimlane="qualityassignees" /> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Task Node</type> <name>qualityapproval</name> <disable>false</disable> </action> </event> <event type="node-leave"> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>GROUP_A_QUALITY_APPROBATORS</pooledactors> <permission>unsetEditor</permission> </action> </event–> <!– transition name="rejection" to="rejected" /–> <!–transition name="approve" to="published"/> </task-node–> <!–**************************–> <!–** <Task Node> **–> <!–** rejected **–> <!–**************************–> <task-node name="rejected"> <task name="lwf:rejectedTask" swimlane="initiator" /> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Task Node</type> <name>rejected</name> <disable>false</disable> </action> <!– Set document status to Drafts –> <action class="lpr.alfresco.repo.workflow.jbpm.SetDocumentStatus"> <status>Draft</status> </action> <!– Move Document to Drafts folder –> <action class="lpr.alfresco.repo.workflow.jbpm.MoveDocument"> <folderdst>Drafts</folderdst> </action> <!– Unset read permission for the initiator –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <actor>#{initiator}</actor> <permission>unset</permission> </action> <!– Set Editor Permissions for the initiator –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <actor>#{initiator}</actor> <permission>setEditor</permission> </action> </event> <event type="node-leave"> <!– unset Editor Permissions for the initiator –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <actor>#{initiator}</actor> <permission>unsetEditor</permission> </action> </event> <transition to="checkreview" name="restart"/> <transition to="end" name="end"> <!– Restore all currents Permissions –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <permission>restore</permission> </action> </transition> </task-node> <!–**************************–> <!–** <Task Node> **–> <!–** published **–> <!–**************************–> <task-node name="published"> <task name="lwf:publishedTask" swimlane="initiator" /> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>Task Node</type> <name>published</name> <disable>false</disable> </action> <action class="lpr.alfresco.repo.workflow.jbpm.ApprovedDocument"> <folderdst>Approved</folderdst> <!– status>Approved</status–> </action> <action class="lpr.alfresco.repo.workflow.jbpm.PublishedDocument"> <folderdst>Published</folderdst> <!– status>Approved</status–> </action> <!– Unset Editor permission for the Quality Group –> <action class="lpr.alfresco.repo.workflow.jbpm.SetPermissions"> <pooledactors>GROUP_A_QUALITY_APPROBATORS</pooledactors> <permission>unsetEditor</permission> </action> </event> <transition to="end"/> </task-node> <!–**************************–> <!–** <End State> **–> <!–** end **–> <!–**************************–> <end-state name="end"> <event type="node-enter"> <action class="lpr.alfresco.repo.workflow.jbpm.WriteInfo"> <type>End State</type> <name>end</name> <disable>false</disable> </action> </event> </end-state> </process-definition>
package lpr.alfresco.repo.workflow.jbpm; import org.alfresco.repo.workflow.jbpm.JBPMSpringActionHandler; import org.alfresco.service.cmr.workflow.WorkflowException; import org.jbpm.graph.exe.ExecutionContext; import org.springframework.beans.factory.BeanFactory; import lpr.alfresco.util.MyLogger; public class WriteInfo extends JBPMSpringActionHandler { private static final long serialVersionUID = 1L; private static final String STAR = "*"; private static final Integer NBCHAR = 30; // Patameters private String type; private String name; private String message; private String disable; @Override protected void initialiseHandler(BeanFactory factory) { // Empty } public void execute(ExecutionContext executionContext) throws Exception { if (type == null && message != null) { throw new WorkflowException("WriteInfo variable name has not been provided"); } if(disable == null) { disable = "false"; } if (disable.equals("false")) if (message == null) { MyLogger.debugln("",1); MyLogger.debug("==> ",1); for( int i=0; i<NBCHAR; i++ ) { MyLogger.debug(STAR,1); } MyLogger.debugln("",1); MyLogger.debug("==> ",1); MyLogger.debug("*",1); type = "<" + type + ">"; if(name == null) { type = "<" + type + ">"; } Integer nbspace = (NBCHAR / 2) - (type.length() / 2); for( int i=1; i<nbspace; i++ ) { MyLogger.debug(" ",1); } MyLogger.debug(type,1); nbspace = NBCHAR - (nbspace + type.length()); for( int i=1; i<nbspace; i++ ) { MyLogger.debug(" ",1); } MyLogger.debugln("*",1); if (name!= null) { MyLogger.debug("==> ",1); MyLogger.debug("*",1); nbspace = (NBCHAR / 2) - (name.length() / 2); for( int i=1; i<nbspace; i++ ) { MyLogger.debug(" ",1); } MyLogger.debug(name,1); nbspace = NBCHAR - (nbspace + name.length()); for( int i=1; i<nbspace; i++ ) { MyLogger.debug(" ",1); } MyLogger.debugln("*",1); } MyLogger.debug("==> ",1); for( int i=0; i<NBCHAR; i++ ) { MyLogger.debug(STAR,1); } MyLogger.debugln("",1); MyLogger.debugln("",1); } else { MyLogger.debugln("",1); MyLogger.debugln("==> " + message,1); MyLogger.debugln("",1); } } }
==> ****************************** ==> * <Node> * ==> * startreview * ==> ******************************