Alfresco Workflow - 多个受让人和Java代码

时间:2015-11-16 17:19:48

标签: workflow alfresco alfresco-share bpmn alfresco-webscripts

我正在尝试创建一个拥有多个受理人(已完成)并启动它们的工作流程,这是一项任务。当我启动工作流程时,我想运行一个java代码,该代码对已分配任务的文件进行修改。如何在“启动工作流程”上运行此java代码?

然后,我希望每个受让人都有一个批准的任务(这一刻,受让人没有任务批准,出现任务,我该怎么做?),并批准我想要运行其他java代码。 我该怎么做?将此java代码分配给工作流程?

我不知道如何定义bpmn,我认为有些问题是因为这个。

1 个答案:

答案 0 :(得分:2)

为了从你的bpmn运行java代码,你需要使用java Listener类。监听器在任务事件(创建或完成)或工作流事件(开始或结束)上运行。需要在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(在任务结束时运行)和ExecutionFlowListener(在工作流的开始和结束时运行)

在我的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类的示例如下所示:

 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
   }
 }

希望这会让你开始......