mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
- Example group / pooled workflow definitions
- Fix to workflow javascript when writing multiple variables back to process git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4893 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -338,6 +338,29 @@
|
||||
</associations>
|
||||
</aspect>
|
||||
|
||||
<!-- -->
|
||||
<!-- Multiple Group Assignees -->
|
||||
<!-- -->
|
||||
|
||||
<aspect name="bpm:groupAssignees">
|
||||
<associations>
|
||||
|
||||
<association name="bpm:groupAssignees">
|
||||
<source>
|
||||
<mandatory>false</mandatory>
|
||||
<many>false</many>
|
||||
</source>
|
||||
<target>
|
||||
<!-- TODO: Refactor when group is pulled into content model -->
|
||||
<class>usr:authorityContainer</class>
|
||||
<mandatory>true</mandatory>
|
||||
<many>true</many>
|
||||
</target>
|
||||
</association>
|
||||
|
||||
</associations>
|
||||
</aspect>
|
||||
|
||||
<!-- -->
|
||||
<!-- A collection of content routed through a workflow. -->
|
||||
<!-- -->
|
||||
|
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:parallelgroupreview">
|
||||
|
||||
<swimlane name="initiator"></swimlane>
|
||||
|
||||
<start-state name="start">
|
||||
<task name="wf:submitGroupReviewTask" swimlane="initiator" />
|
||||
<transition name="" to="startreview"/>
|
||||
</start-state>
|
||||
|
||||
<node name="startreview">
|
||||
<action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
|
||||
<foreach>#{people.getMembers(bpm_groupAssignee)}</foreach>
|
||||
<var>reviewer</var>
|
||||
</action>
|
||||
<event type="node-enter">
|
||||
<script>
|
||||
<variable name="wf_approveCount" access="write" />
|
||||
<expression>
|
||||
wf_approveCount = 0;
|
||||
</expression>
|
||||
</script>
|
||||
</event>
|
||||
<transition name="review" to="review" />
|
||||
</node>
|
||||
|
||||
<task-node name="review">
|
||||
<task name="wf:reviewTask">
|
||||
<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="wf_approveCount" access="read,write" />
|
||||
<expression>
|
||||
wf_approveCount = wf_approveCount +1;
|
||||
</expression>
|
||||
</script>
|
||||
</transition>
|
||||
</task-node>
|
||||
|
||||
<join name="endreview">
|
||||
<transition to="isapproved" />
|
||||
</join>
|
||||
|
||||
<decision name="isapproved">
|
||||
<event type="node-enter">
|
||||
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
|
||||
<script>
|
||||
<variable name="wf_reviewerCount" access="write"/>
|
||||
<expression>people.getMembers(bpm_groupAssignee).length;</expression>
|
||||
</script>
|
||||
</action>
|
||||
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
|
||||
<script>
|
||||
<variable name="wf_requiredPercent" access="write"/>
|
||||
<expression>wf_requiredPercent = wf_requiredApprovePercent;</expression>
|
||||
</script>
|
||||
</action>
|
||||
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
|
||||
<script>
|
||||
<variable name="wf_actualPercent" access="write"/>
|
||||
<expression>wf_actualPercent = ((wf_approveCount * 100) / people.getMembers(bpm_groupAssignee).length);</expression>
|
||||
</script>
|
||||
</action>
|
||||
</event>
|
||||
<transition name="reject" to="rejected" />
|
||||
<transition name="approve" to="approved">
|
||||
<condition>#{wf_actualPercent >= wf_requiredApprovePercent}</condition>
|
||||
</transition>
|
||||
</decision>
|
||||
|
||||
<task-node name="rejected">
|
||||
<task name="wf:rejectedParallelTask" swimlane="initiator" />
|
||||
<transition to="end" />
|
||||
</task-node>
|
||||
|
||||
<task-node name="approved">
|
||||
<task name="wf:approvedParallelTask" swimlane="initiator" />
|
||||
<transition to="end" />
|
||||
</task-node>
|
||||
|
||||
<end-state name="end"/>
|
||||
|
||||
</process-definition>
|
56
config/alfresco/workflow/review_pooled_processdefinition.xml
Normal file
56
config/alfresco/workflow/review_pooled_processdefinition.xml
Normal file
@@ -0,0 +1,56 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:reviewpooled">
|
||||
|
||||
<swimlane name="initiator" />
|
||||
|
||||
<start-state name="start">
|
||||
<task name="wf:submitGroupReviewTask" swimlane="initiator" />
|
||||
<transition name="" to="review" />
|
||||
</start-state>
|
||||
|
||||
<swimlane name="reviewer">
|
||||
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
|
||||
<pooledactors>#{bpm_groupAssignee}</pooledactors>
|
||||
</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>
|
||||
<event type="task-end">
|
||||
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
|
||||
<script>
|
||||
<variable name="bpm_assignee" access="write"/>
|
||||
<expression>
|
||||
if (taskInstance.actorId != null)
|
||||
people.getPerson(taskInstance.actorId);
|
||||
else
|
||||
person;
|
||||
</expression>
|
||||
</script>
|
||||
</action>
|
||||
</event>
|
||||
</task>
|
||||
<transition name="reject" to="rejected" />
|
||||
<transition name="approve" to="approved" />
|
||||
</task-node>
|
||||
|
||||
<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>
|
@@ -23,33 +23,39 @@
|
||||
<aspect>bpm:assignee</aspect>
|
||||
</mandatory-aspects>
|
||||
</type>
|
||||
|
||||
<type name="wf:submitGroupReviewTask">
|
||||
|
||||
<type name="wf:submitConcurrentReviewTask">
|
||||
<parent>bpm:startTask</parent>
|
||||
<mandatory-aspects>
|
||||
<aspect>bpm:groupAssignee</aspect>
|
||||
</mandatory-aspects>
|
||||
<properties>
|
||||
<property name="wf:requiredApprovePercent">
|
||||
<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>
|
||||
</type>
|
||||
|
||||
<!-- Submit review to multiple people (explicit list) -->
|
||||
<type name="wf:submitParallelReviewTask">
|
||||
<parent>bpm:startTask</parent>
|
||||
<properties>
|
||||
<property name="wf:requiredApprovePercent">
|
||||
<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>
|
||||
<parent>wf:submitConcurrentReviewTask</parent>
|
||||
<mandatory-aspects>
|
||||
<aspect>bpm:assignees</aspect>
|
||||
</mandatory-aspects>
|
||||
</type>
|
||||
|
||||
<!-- Submit review to multiple people (as included in a group) -->
|
||||
<type name="wf:submitGroupReviewTask">
|
||||
<parent>wf:submitConcurrentReviewTask</parent>
|
||||
<mandatory-aspects>
|
||||
<aspect>bpm:groupAssignee</aspect>
|
||||
</mandatory-aspects>
|
||||
</type>
|
||||
|
||||
<type name="wf:reviewTask">
|
||||
<parent>bpm:workflowTask</parent>
|
||||
|
Reference in New Issue
Block a user