Alfresco Workflow - 多个受让人和 java 代码
Alfresco Workflow - multiple assignee and java code
我正在尝试创建一个有多个受让人的工作流(已完成)并向他们启动一个任务。当我启动工作流时,我想 运行 一个 java 代码,该代码对已分配任务的文件进行修改。我如何在 "Start Workflow" 上 运行 这个 java 代码?
然后,我希望每个受让人都有一个任务要批准(此时,受让人没有任务要批准,看起来任务完成了,我该怎么办?),批准我想运行 其他 java 代码。
我该怎么做?将此 java 代码分配给工作流?
我也不知道bpmn怎么定义,我觉得有些问题是因为这个。
为了从您的 bpmn 运行 java 代码,您需要使用 java Listener classes。任务事件(创建或完成)或工作流事件(开始或结束)的侦听器 运行。这些侦听器需要在您的 bpmn 和 spring 上下文文件中定义。
我会用我自己的代码举个例子:
spring 上下文文件:
<bean id="StartTaskListener" class="com.crius.epub.wf.StartTaskListener" parent="activitiCreateTaskListener">
</bean>
<bean id="StartTaskListener.activitiBeanRegistry" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="activitiBeanRegistry">
<property name="targetObject">
<ref bean="activitiBeanRegistry" />
</property>
<property name="targetMethod" value="put" />
<property name="arguments">
<list>
<value>StartTaskListener</value>
<ref bean="StartTaskListener" />
</list>
</property>
</bean>
同样,您必须定义 CompleteTaskListener(运行s 在任务结束时)和 ExecutionFlowListener(运行s 在工作流开始和结束时)
在我的 bpmn 中,它看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="epubcreate" name="Create epub" isExecutable="true">
<extensionElements>
<activiti:executionListener event="end" delegateExpression="${ExecutionFlowListener}"></activiti:executionListener>
<activiti:executionListener event="start" delegateExpression="${ExecutionFlowListener}"></activiti:executionListener>
</extensionElements>
<startEvent id="start" name="Start" activiti:initiator="initiatorUserName" activiti:formKey="epubwf:start"></startEvent>
<userTask id="create" name="Create proof" activiti:assignee="${epubwf_creator.properties.userName}" activiti:formKey="epubwf:create">
<extensionElements>
<activiti:taskListener event="create" delegateExpression="${StartTaskListener}"></activiti:taskListener>
<activiti:taskListener event="complete" delegateExpression="${CompleteTaskListener}"></activiti:taskListener>
</extensionElements>
</userTask>
Executionlistener 的示例 class 如下所示:
public class ExecutionFlowListener extends DelegateExecutionScriptBase implements ExecutionListener{
public void notify(DelegateExecution execution){
ExecutionEntity executionEntity = (ExecutionEntity)execution;
if ("start".equals(executionEntity.getActivityId())){
// workflow has started
// get value of property mymodel:myproperty
Object assignees = execution.getVariable("mymodel_myproperty");
} else if ((executionEntity.getTransition() != null && "end".equals(executionEntity.getTransition().getDestination().getId())) || "end".equals(execution.getEventName())){
// workflow has ended
}
}
希望这能帮助您入门...
我正在尝试创建一个有多个受让人的工作流(已完成)并向他们启动一个任务。当我启动工作流时,我想 运行 一个 java 代码,该代码对已分配任务的文件进行修改。我如何在 "Start Workflow" 上 运行 这个 java 代码?
然后,我希望每个受让人都有一个任务要批准(此时,受让人没有任务要批准,看起来任务完成了,我该怎么办?),批准我想运行 其他 java 代码。 我该怎么做?将此 java 代码分配给工作流?
我也不知道bpmn怎么定义,我觉得有些问题是因为这个。
为了从您的 bpmn 运行 java 代码,您需要使用 java Listener classes。任务事件(创建或完成)或工作流事件(开始或结束)的侦听器 运行。这些侦听器需要在您的 bpmn 和 spring 上下文文件中定义。
我会用我自己的代码举个例子:
spring 上下文文件:
<bean id="StartTaskListener" class="com.crius.epub.wf.StartTaskListener" parent="activitiCreateTaskListener">
</bean>
<bean id="StartTaskListener.activitiBeanRegistry" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" depends-on="activitiBeanRegistry">
<property name="targetObject">
<ref bean="activitiBeanRegistry" />
</property>
<property name="targetMethod" value="put" />
<property name="arguments">
<list>
<value>StartTaskListener</value>
<ref bean="StartTaskListener" />
</list>
</property>
</bean>
同样,您必须定义 CompleteTaskListener(运行s 在任务结束时)和 ExecutionFlowListener(运行s 在工作流开始和结束时)
在我的 bpmn 中,它看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="epubcreate" name="Create epub" isExecutable="true">
<extensionElements>
<activiti:executionListener event="end" delegateExpression="${ExecutionFlowListener}"></activiti:executionListener>
<activiti:executionListener event="start" delegateExpression="${ExecutionFlowListener}"></activiti:executionListener>
</extensionElements>
<startEvent id="start" name="Start" activiti:initiator="initiatorUserName" activiti:formKey="epubwf:start"></startEvent>
<userTask id="create" name="Create proof" activiti:assignee="${epubwf_creator.properties.userName}" activiti:formKey="epubwf:create">
<extensionElements>
<activiti:taskListener event="create" delegateExpression="${StartTaskListener}"></activiti:taskListener>
<activiti:taskListener event="complete" delegateExpression="${CompleteTaskListener}"></activiti:taskListener>
</extensionElements>
</userTask>
Executionlistener 的示例 class 如下所示:
public class ExecutionFlowListener extends DelegateExecutionScriptBase implements ExecutionListener{
public void notify(DelegateExecution execution){
ExecutionEntity executionEntity = (ExecutionEntity)execution;
if ("start".equals(executionEntity.getActivityId())){
// workflow has started
// get value of property mymodel:myproperty
Object assignees = execution.getVariable("mymodel_myproperty");
} else if ((executionEntity.getTransition() != null && "end".equals(executionEntity.getTransition().getDestination().getId())) || "end".equals(execution.getEventName())){
// workflow has ended
}
}
希望这能帮助您入门...