Introduction to Advanced Workflows ! Gavin Cornwell, Development Manager, Services Team, Alfresco!
Agenda! •  UI •  Process Definition •  Task Definition •  Deployment •  Configuration • UI! • Form! • Engine! •  Demo •  Q & A
UI !
My Tasks!
Edit Task!
Workflows Iʼve Started!
Workflow Details!
Admin Console!
Workflow Console!
Process Definition!
Example Process Definition!
Start Task! <process id="presentationReview” name="DevCon Presentation Review"> <startEvent id="start” activiti:formKey="dcwkflw:submitPresentationReviewTask" /> <sequenceFlow id='flow1' sourceRef='start' targetRef='reviewTask' />
Review Task! <userTask id="reviewTask" name="Review Presentation" activiti:formKey="dcwkflw:presentationReviewTask"> <extensionElements> <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> … </activiti:taskListener> <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string> execution.setVariable('dcwkflw_reviewOutcome', task.getVariable('dcwkflw_reviewOutcome')); </activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${bpm_assignee.properties.userName}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
Decision! <sequenceFlow id='flow2' sourceRef='reviewTask' targetRef='reviewDecision' /> <exclusiveGateway id="reviewDecision" name="Review Decision" /> <sequenceFlow id='flow3' sourceRef='reviewDecision' targetRef='approved' > <conditionExpression xsi:type="tFormalExpression"> ${dcwkflw_reviewOutcome == 'Publish'} </conditionExpression> </sequenceFlow> <sequenceFlow id='flow4' sourceRef='reviewDecision' targetRef='rejected' />
Approved Task! <userTask id="approved" name="Presentation Approved" activiti:formKey="wf:approvedTask" > <extensionElements> <activiti:taskListener event="create” class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> … </activiti:taskListener> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${initiator.properties.userName}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
Rejected Task! <userTask id=”rejected" name="Presentation Rejected" activiti:formKey="wf:rejectedTask" > <extensionElements> <activiti:taskListener event="create” class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> … </activiti:taskListener> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${initiator.properties.userName}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
Task Definition!
Based on Alfresco Content Modelling! •  bpmModel.xml • bpm:task! • bpm:workflowTask! • bpm:startTask! • bpm:activitiStartTask! • bpm:activitiOutcomeTask! •  workflowModel.xml • wf:submitAdhocTask! • wf:reviewTask! • wf:activitiReviewTask! • wf:approvedTask!
Start Task! <type name="dcwkflw:submitPresentationReviewTask"> <parent>wf:submitReviewTask</parent> <mandatory-aspects> <aspect>dcwkflw:details</aspect> </mandatory-aspects> </type>
Task Definition – Start Task cont.! <aspect name="dcwkflw:details">! <properties>! <property name="dcwkflw:abstract">! <type>d:text</type>! </property>! <property name="dcwkflw:duration">! <type>d:int</type>! </property>! </properties>! <associations>! <association name="dcwkflw:presenter”>! <source>…</source>! <target>! <class>cm:person</class>! <mandatory>true</mandatory>! <many>false</many>! </target>! </association>! </associations>! </aspect>!
Task Definition – Review Task! <type name="dcwkflw:presentationReviewTask"> <parent>bpm:activitiOutcomeTask</parent> <properties> <property name="dcwkflw:reviewOutcome"> <type>d:text</type> <default>Reject</default> <constraints> <constraint ref="dcwkflw:choices" /> </constraints> </property> </properties> <overrides> <property name="bpm:outcomePropertyName"> <default> {http://www.alfresco.org/model/dcworkflow/1.0}reviewOutcome </default> </property> </overrides> <mandatory-aspects><aspect>dcwkflw:details</aspect></mandatory- aspects> </type>
Task Definition – Review Task cont.! <constraint name="dcwkflw:choices" type="LIST"> <parameter name="allowedValues"> <list> <value>Publish</value> <value>Reject</value> </list> </parameter> </constraint>
Deployment !
Spring: your-context.xml! <bean id="devconWorkflowBootstrap" parent="workflowDeployer"> <property name="workflowDefinitions"> <list> <props> <prop key="engineId">activiti</prop> <prop key="location">alfresco/extension/devcon-workflow.bpmn20.xml</prop> <prop key="mimetype">text/xml</prop> <prop key="redeploy">false</prop> </props> </list> </property> <property name="models"> <list><value>alfresco/extension/devcon-workflow-model.xml</value></list> </property> <property name="labels"> <list><value>alfresco/extension/devcon-workflow-model</value></list> </property> </bean>
Workflow Console!
Configuration!
UI – Hiding Workflows! <config evaluator="string-compare" condition="Workflow"> <hidden-workflows> <!-- Hide all WCM related workflows --> <workflow name="jbpm$wcmwf:*"/> <workflow name="jbpm$wf:articleapproval"/> </hidden-workflows> </config>
UI – Hiding Tasks! <config evaluator="string-compare" condition="Workflow"> <hidden-tasks> <!-- Hide all WCM related tasks --> <task type="wcmwf:*"/> </hidden-tasks> </config>
Start Workflow Form! <config evaluator="string-compare" condition="activiti$presentationReview"> <forms> <form> <field-visibility> <show id="bpm:workflowDescription" /> <show id="bpm:workflowDueDate" /> <show id="bpm:workflowPriority" /> <show id="bpm:assignee" /> <show id="dcwkflw:abstract" /> <show id="dcwkflw:duration" /> <show id="dcwkflw:presenter" /> <show id="packageItems" /> <show id="bpm:sendEMailNotifications" /> </field-visibility> <appearance>…</appearance> </form> </forms> </config>
Task Form! <config evaluator="task-type" condition="dcwkflw:presentationReviewTask"> <forms> <form> <field-visibility> … <show id="dcwkflw:abstract" /> <show id="dcwkflw:duration" /> <show id="dcwkflw:presenter" /> <show id="dcwkflw:reviewOutcome" /> </field-visibility> <appearance> … <field id="dcwkflw:reviewOutcome”> <control template="/org/.../workflow/activiti-transitions.ftl" /> </field> … </appearance> </form> </forms> </config>
Workflow Details Form!
Workflow Details Form! <config evaluator="task-type” condition="dcwkflw:submitPresentationReviewTask"> <forms> <form id="workflow-details"> <field-visibility> <show id="bpm:sendEMailNotifications" /> <show id="dcwkflw:abstract" /> <show id="dcwkflw:duration" /> <show id="dcwkflw:presenter" /> <show id="packageItems" /> </field-visibility> <appearance>…</appearance> </form> </forms> </config>
Engine! •  Disabling • system.workflow.engine.jbpm.enabled=true! • system.workflow.engine.activiti.enabled=true! •  Definition Visibility • system.workflow.engine.jbpm.definitions.visible=false! • system.workflow.engine.activiti.definitions.visible=true! •  Override in alfresco-global.properties •  Values shown in Admin Console or JMX Dump
Demo! •  Start ‘DevCon Presentation Review’ Workflow •  Manage Task •  Monitor Progress • Workflow Details! • Workflow Console!
Questions ?!
http://wiki.alfresco.com/wiki/Workflow http://wiki.alfresco.com/wiki/Forms http://www.activiti.org Learn More!

BPM-2 Introduction to Advanced Workflows

  • 1.
    Introduction to AdvancedWorkflows ! Gavin Cornwell, Development Manager, Services Team, Alfresco!
  • 2.
    Agenda! •  UI •  Process Definition •  Task Definition •  Deployment •  Configuration • UI! • Form! • Engine! •  Demo •  Q & A
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
    Start Task! <process id="presentationReview”name="DevCon Presentation Review"> <startEvent id="start” activiti:formKey="dcwkflw:submitPresentationReviewTask" /> <sequenceFlow id='flow1' sourceRef='start' targetRef='reviewTask' />
  • 13.
    Review Task! <userTask id="reviewTask"name="Review Presentation" activiti:formKey="dcwkflw:presentationReviewTask"> <extensionElements> <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> … </activiti:taskListener> <activiti:taskListener event="complete" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> <activiti:field name="script"> <activiti:string> execution.setVariable('dcwkflw_reviewOutcome', task.getVariable('dcwkflw_reviewOutcome')); </activiti:string> </activiti:field> </activiti:taskListener> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${bpm_assignee.properties.userName}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
  • 14.
    Decision! <sequenceFlow id='flow2' sourceRef='reviewTask'targetRef='reviewDecision' /> <exclusiveGateway id="reviewDecision" name="Review Decision" /> <sequenceFlow id='flow3' sourceRef='reviewDecision' targetRef='approved' > <conditionExpression xsi:type="tFormalExpression"> ${dcwkflw_reviewOutcome == 'Publish'} </conditionExpression> </sequenceFlow> <sequenceFlow id='flow4' sourceRef='reviewDecision' targetRef='rejected' />
  • 15.
    Approved Task! <userTask id="approved"name="Presentation Approved" activiti:formKey="wf:approvedTask" > <extensionElements> <activiti:taskListener event="create” class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> … </activiti:taskListener> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${initiator.properties.userName}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
  • 16.
    Rejected Task! <userTask id=”rejected"name="Presentation Rejected" activiti:formKey="wf:rejectedTask" > <extensionElements> <activiti:taskListener event="create” class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener"> … </activiti:taskListener> </extensionElements> <humanPerformer> <resourceAssignmentExpression> <formalExpression>${initiator.properties.userName}</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
  • 17.
  • 18.
    Based on AlfrescoContent Modelling! •  bpmModel.xml • bpm:task! • bpm:workflowTask! • bpm:startTask! • bpm:activitiStartTask! • bpm:activitiOutcomeTask! •  workflowModel.xml • wf:submitAdhocTask! • wf:reviewTask! • wf:activitiReviewTask! • wf:approvedTask!
  • 19.
    Start Task! <type name="dcwkflw:submitPresentationReviewTask"> <parent>wf:submitReviewTask</parent> <mandatory-aspects> <aspect>dcwkflw:details</aspect> </mandatory-aspects> </type>
  • 20.
    Task Definition –Start Task cont.! <aspect name="dcwkflw:details">! <properties>! <property name="dcwkflw:abstract">! <type>d:text</type>! </property>! <property name="dcwkflw:duration">! <type>d:int</type>! </property>! </properties>! <associations>! <association name="dcwkflw:presenter”>! <source>…</source>! <target>! <class>cm:person</class>! <mandatory>true</mandatory>! <many>false</many>! </target>! </association>! </associations>! </aspect>!
  • 21.
    Task Definition –Review Task! <type name="dcwkflw:presentationReviewTask"> <parent>bpm:activitiOutcomeTask</parent> <properties> <property name="dcwkflw:reviewOutcome"> <type>d:text</type> <default>Reject</default> <constraints> <constraint ref="dcwkflw:choices" /> </constraints> </property> </properties> <overrides> <property name="bpm:outcomePropertyName"> <default> {http://www.alfresco.org/model/dcworkflow/1.0}reviewOutcome </default> </property> </overrides> <mandatory-aspects><aspect>dcwkflw:details</aspect></mandatory- aspects> </type>
  • 22.
    Task Definition –Review Task cont.! <constraint name="dcwkflw:choices" type="LIST"> <parameter name="allowedValues"> <list> <value>Publish</value> <value>Reject</value> </list> </parameter> </constraint>
  • 23.
  • 24.
    Spring: your-context.xml! <bean id="devconWorkflowBootstrap"parent="workflowDeployer"> <property name="workflowDefinitions"> <list> <props> <prop key="engineId">activiti</prop> <prop key="location">alfresco/extension/devcon-workflow.bpmn20.xml</prop> <prop key="mimetype">text/xml</prop> <prop key="redeploy">false</prop> </props> </list> </property> <property name="models"> <list><value>alfresco/extension/devcon-workflow-model.xml</value></list> </property> <property name="labels"> <list><value>alfresco/extension/devcon-workflow-model</value></list> </property> </bean>
  • 25.
  • 26.
  • 27.
    UI – HidingWorkflows! <config evaluator="string-compare" condition="Workflow"> <hidden-workflows> <!-- Hide all WCM related workflows --> <workflow name="jbpm$wcmwf:*"/> <workflow name="jbpm$wf:articleapproval"/> </hidden-workflows> </config>
  • 28.
    UI – HidingTasks! <config evaluator="string-compare" condition="Workflow"> <hidden-tasks> <!-- Hide all WCM related tasks --> <task type="wcmwf:*"/> </hidden-tasks> </config>
  • 29.
    Start Workflow Form! <configevaluator="string-compare" condition="activiti$presentationReview"> <forms> <form> <field-visibility> <show id="bpm:workflowDescription" /> <show id="bpm:workflowDueDate" /> <show id="bpm:workflowPriority" /> <show id="bpm:assignee" /> <show id="dcwkflw:abstract" /> <show id="dcwkflw:duration" /> <show id="dcwkflw:presenter" /> <show id="packageItems" /> <show id="bpm:sendEMailNotifications" /> </field-visibility> <appearance>…</appearance> </form> </forms> </config>
  • 30.
    Task Form! <config evaluator="task-type"condition="dcwkflw:presentationReviewTask"> <forms> <form> <field-visibility> … <show id="dcwkflw:abstract" /> <show id="dcwkflw:duration" /> <show id="dcwkflw:presenter" /> <show id="dcwkflw:reviewOutcome" /> </field-visibility> <appearance> … <field id="dcwkflw:reviewOutcome”> <control template="/org/.../workflow/activiti-transitions.ftl" /> </field> … </appearance> </form> </forms> </config>
  • 31.
  • 32.
    Workflow Details Form! <configevaluator="task-type” condition="dcwkflw:submitPresentationReviewTask"> <forms> <form id="workflow-details"> <field-visibility> <show id="bpm:sendEMailNotifications" /> <show id="dcwkflw:abstract" /> <show id="dcwkflw:duration" /> <show id="dcwkflw:presenter" /> <show id="packageItems" /> </field-visibility> <appearance>…</appearance> </form> </forms> </config>
  • 33.
    Engine! •  Disabling • system.workflow.engine.jbpm.enabled=true! • system.workflow.engine.activiti.enabled=true! •  Definition Visibility • system.workflow.engine.jbpm.definitions.visible=false! • system.workflow.engine.activiti.definitions.visible=true! •  Override in alfresco-global.properties •  Values shown in Admin Console or JMX Dump
  • 34.
    Demo! •  Start ‘DevConPresentation Review’ Workflow •  Manage Task •  Monitor Progress • Workflow Details! • Workflow Console!
  • 35.
  • 36.