【问题标题】:Alfresco Workflow - multiple assignee and java codeAlfresco Workflow - 多个受让人和 java 代码
【发布时间】:2015-11-16 17:19:47
【问题描述】:

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

然后,我希望每个受理人都有一个要批准的任务(此时,受理人没有要批准的任务,似乎任务已完成,我该怎么做?),并且要批准我想运行其他爪哇代码。 我怎样才能做到这一点?将此 java 代码分配给工作流?

我也不知道怎么定义bpmn,我觉得有些问题是因为这个。

【问题讨论】:

  • de bpmn 文件在哪里?您是否查看过默认工作流程以及它们是如何制作的?
  • 我使用本教程 ecmarchitect.com/alfresco-developer-series-tutorials/workflow/… 和 helloWorldUI.bpmn,但我想将其扩展到多个受让人,因为我放置了一个字段来选择多个受让人,但他们的任务似乎已完成,我想要对所有受让人仍然悬而未决的“批准”/“拒绝”。我寻找默认的工作流程,但是当我尝试使用它们的 bpmn 时,字段受让人消失了。您更喜欢我在这里发布 bpmn 的代码吗?我尝试过的和遇到的问题?或者你知道制作这个的方法吗?
  • 我当然知道怎么做,但是如果你想学习任何东西,你需要自己去挖掘。如果我只是为您发布解决方案,您将无法学习:)。因此,请查看默认审核和批准。它有一个批准按钮并使用它。
  • 但我不希望你为我编写代码。我只想知道,例如,我尝试使用默认的 bpmn,但我的按钮受理人消失了。为什么?我想了解的事情:/以及如何使其发挥作用。
  • 我已经在帮助你,但不是给你想要的,而是什么可以帮助你学习 bpmn。看这里:youtube.com/watch?v=Hc9gZp7HNT0 和这里 docs.alfresco.com/4.2/topics/wf-howto.html 和这里:stackoverflow.com/questions/9733182/…

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


【解决方案1】:

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

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

【讨论】:

  • 非常感谢!这真的是我需要的。还有一个问题,如果我在工作流的开头放置了一个 java 类,并且如果我想获得我在表单上选择的受让人字段的信息,你知道我该怎么做吗?或者我在哪里可以找到 API 看看如何做到这一点?再次感谢您!
  • 只有一个关于代码的问题,java示例上的executionEntity是从哪里来的? ExecutionEntity executionEntity by parameter 给了我错误。
  • 对,缺少一个演员表,我已经添加了。
  • 还有一个问题,只有一个,在哪里可以看到 bean 名称?即 ExecutionListener 的“parent="activitiCreateTaskListener">”,我不是在互联网上创建的。
  • 它们在 alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\activiti-context.xml 中。我认为您需要 activitiCreateTaskListener , activitiCompleteTaskListener 。对于 java 类,我也有 StartTaskListener extends TaskCreateListener 和 CompleteTaskListener extends TaskCompleteListener
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多