<type name="wf:submitReviewTask">
<parent>bpm:StartTask</parent>
<mandatory-aspects>
<aspect>bpm:assignee</aspect>
</manadtory-aspects>
</type>
ainsi que l'exemple suivant dans le reperoire webappsalfrescoWEB-INFclassesalfresco (fichier web-client-config-properties.xml)<config evaluator="node-type" condition="bpm:startTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:workflowDescription" component-generator="TextAreaGenerator" />
<show-property name="bpm:workflowPriority" />
<show-property name="bpm:workflowDueDate" />
<separator name="sep2" display-label-id="users_and_roles" component-generator="HeaderSeparatorGenerator" />
<show-association name="bpm:assignee" />
</property-sheet>
</config>
<!– Review and Approve workflow tasks –>
<config evaluator="node-type" condition="wf:submitReviewTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:workflowDescription" component-generator="TextAreaGenerator" />
<show-property name="bpm:workflowPriority" display-label-id="wf_review_priority" />
<show-property name="bpm:workflowDueDate" display-label-id="wf_review_due_date" />
<separator name="sep2" display-label-id="users_and_roles" component-generator="HeaderSeparatorGenerator" />
<show-association name="bpm:assignee" display-label-id="wf_reviewer" />
</property-sheet>
</config>
Or cet exemple me permet d'attribuer uniquement dans mon Workflow un seul relecteur. Mon objectif, à partir du premier écran du workflow et de définir une liste de relecteurs, ainsi qu'une liste d'approbateurs et éventuellment une liste d'autres acteurs.<?xml version="1.0" encoding="latin9"?>
<model name="lwf:lprwfmodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">
<!– Optional meta-data about the model –>
<description>My Workflow Documents Model</description>
<author>Huberson David</author>
<version>1.0</version>
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
<import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm"/>
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
</imports>
<namespaces>
<namespace uri="lwf.workflowModel" prefix="lwf"/>
</namespaces>
<types>
<type name="lwf:submitReviewAndApprovalTask">
<parent>bpm:startTask</parent>
<properties>
<property name="lwf:requiredReviewPercent">
<type>d:int</type>
<mandatory>true</mandatory>
<default>50</default>
<constraints>
<constraint type="MINMAX">
<parameter name="minValue"><value>1</value></parameter>
<parameter name="maxValue"><value>100</value></parameter>
</constraint>
</constraints>
</property>
</properties>
<mandatory-aspects>
<aspect>lwf:reviewAssignees</aspect>
<aspect>lwf:approvalAssignees</aspect>
</mandatory-aspects>
</type>
<type name="lwf:rejectedReviewTask">
<parent>bpm:workflowTask</parent>
<mandatory-aspects>
<aspect>lwf:ReviewStats</aspect>
</mandatory-aspects>
</type>
<type name="lwf:approvalReviewTask">
<parent>bpm:workflowTask</parent>
<mandatory-aspects>
<aspect>lwf:ReviewStats</aspect>
</mandatory-aspects>
</type>
</types>
<aspects>
<aspect name="lwf:reviewAssignees">
<associations>
<association name="lwf:reviewAssignees">
<source>
<mandatory>false</mandatory>
<many>false</many>
</source>
<target>
<class>cm:person</class>
<mandatory>true</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
<aspect name="lwf:approvalAssignees">
<associations>
<association name="lwf:approvalAssignees">
<source>
<mandatory>false</mandatory>
<many>false</many>
</source>
<target>
<class>cm:person</class>
<mandatory>true</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
<aspect name="lwf:ReviewStats">
<properties>
<property name="lwf:reviewerCount">
<type>d:int</type>
</property>
<property name="lwf:requiredPercent">
<type>d:int</type>
</property>
<property name="lwf:reviewCount">
<type>d:int</type>
</property>
<property name="lwf:actualPercent">
<type>d:int</type>
</property>
</properties>
</aspect>
</aspects>
</model>
Ce modèle est encore incomplet car il ne permet que la première étape de validation, la relecture de documents uniquement. <!– Workflow Configuration –>
<config evaluator="node-type" condition="lwf:submitReviewAndApprovalTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:workflowDescription" component-generator="TextAreaGenerator" />
<show-property name="bpm:workflowPriority" display-label-id="wf_review_priority" />
<show-property name="bpm:workflowDueDate" display-label-id="wf_review_due_date" />
<separator name="sep2" display-label-id="users_and_roles" component-generator="HeaderSeparatorGenerator" />
<show-association name="lwf:reviewAssignees" display-label-id="lwf_reviewers" />
<show-association name="lwf:approvalAssignees" display-label-id="lwf_approvals" />
<separator name="sep3" display-label-id="lwf_review_options" component-generator="HeaderSeparatorGenerator" />
<show-property name="lwf:requiredReviewPercent" />
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:rejectedReviewTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:TaskID"/>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true"/>
<show-property name="bpm:priority" read-only="true"/>
<show-property name="bpm:status" read-only="true"/>
<show-property name="bpm:comment" component-generator="TextAreaGenerator"/>
<separator name="sep2" display-label-id="lwf_review_status" component-generator="HeaderSeparatorGenerator" />
<show-property name="lwf:reviewerCount" read-only="true"/>
<show-property name="lwf:requiredPercent" read-only="true"/>
<show-property name="lwf:reviewCount" read-only="true"/>
<show-property name="lwf:actualPercent" read-only="true"/>
</property-sheet>
</config>
<config evaluator="node-type" condition="lwf:approvedReviewTask" replace="true">
<property-sheet>
<separator name="sep1" display-label-id="general" component-generator="HeaderSeparatorGenerator" />
<show-property name="bpm:TaskID"/>
<show-property name="bpm:description" component-generator="TextAreaGenerator" read-only="true"/>
<show-property name="bpm:dueDate" read-only="true"/>
<show-property name="bpm:priority" read-only="true"/>
<show-property name="bpm:status" read-only="true"/>
<show-property name="bpm:comment" component-generator="TextAreaGenerator"/>
<separator name="sep2" display-label-id="lwf_review_status" component-generator="HeaderSeparatorGenerator" />
<show-property name="lwf:reviewerCount" read-only="true"/>
<show-property name="lwf:requiredPercent" read-only="true"/>
<show-property name="lwf:reviewCount" read-only="true"/>
<show-property name="lwf:actualPercent" read-only="true"/>
</property-sheet>
</config>
Et voici enfin le fichier de définition du Workflow non finalisé (partie review uniquement) :<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:LPRvalidation">
<swimlane name="initiator"/>
<start-state name="start">
<task name="lwf:submitReviewAndApprovalTask" swimlane="initiator" />
<transition name="" to="startreview"/>
</start-state>
<node name="startreview">
<action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
<foreach>#{lwf_reviewAssignees}</foreach>
<var>reviewer</var>
</action>
<event type="node-enter">
<script>
<variable name="lwf_reviewCount" access="write" />
<expression>
lwf_reviewCount = 0;
</expression>
</script>
</event>
<transition name="review" to="review"/>
</node>
<task-node name="review">
<task name="wf_reviewTak">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{reviewer}</actor>
</assignment>
</task>
<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 name="endreview">
<transition to="isapproved" />
</join>
<decision name="isapproved">
<event type="node-enter">
<script>
<variable name="lwf_reviewerCount" access="Write"/>
<variable name="lwf_requiredPercent" access="Write"/>
<variable name="lwf_actualPercent" access="Write"/>
<expression>
lwf_requiredPercent = lwf_requiredApprovePercent;
lwf_reviewerCount = lwf_reviewAssignees.size();
lwf_actualPercent = ((lwf_reviewCount * 100) / lwf_reviewerCount);
</expression>
</script>
</event>
<transition name="reject" to="rejected"/>
<transition name="approve" to="approved">
<condition>#{lwf_actualPercent >= lwf_requiredApprovePercent}</condition>
</transition>
</decision>
<task-node name="rejected">
<task name="lwf:rejectedReviewTask" swimlane="initiator" />
<transition to="end"/>
</task-node>
<task-node name="approved">
<task name="lwf:approvedReviewTask" swimlane="initiator" />
<transition to="end"/>
</task-node>
<end-state name="end"/>
</process-definition>
Une petite question en passant.Bonjour,
Qu'est ce qu'un <mandatory-aspects> et <mandatory>. Quel est leur rôle exacte ?
Merci d'éclairer ma lanterne.
Content from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.