【问题标题】:How to add TaskListeer to user task using UserTask class?如何使用 UserTask 类将 TaskListeer 添加到用户任务?
【发布时间】:2018-11-09 05:46:46
【问题描述】:

是否有任何将 TaskListener 添加到 UserTask.. 的示例文档? (Java基础,使用BpmnModel类)

这是我的代码,它有运行时错误

UserTask userTask = new UserTask(); 
ActivitiListener activitiListener = new ActivitiListener();  
activitiListener.setEvent( TaskListener.EVENTNAME_COMPLETE ); 
activitiListener.setImplementation( 
  ImplementationType.IMPLEMENTATION_TYPE_CLASS ); 
activitiListener.setImplementation( "<my_package>.TestTaskListener" );  
userTask.getTaskListeners().add( activitiListener );

还有错误

org.activiti.engine.ActivitiException: Errors while parsing:
[Validation set: 'activiti-executable-process' | Problem: 'activiti- 
usertask-listener-implementation-missing'] : Element 'class' or 'expression' 
is mandatory on executionListener - [Extra info : processDefinitionId = my- 
process | processDefinitionName = my dynamic process | | id = task1 | | 
activityName = First task | ] ( line: 6, column: 74)

【问题讨论】:

    标签: activiti bpmn


    【解决方案1】:

    错误是您正在设置实现,但架构级别的验证正在“元素‘类’或‘表达式’上完成 在 executionListener 上是强制性的”。 那么您的 XML 是什么样子的呢?你在设置那些属性吗?

    【讨论】:

    • 是的,我正在设置所有属性并使用 java 代码生成 xml 文件。但我需要将任务侦听器添加到用户任务。这是我生成的 xml 用户任务。
    • 你用的是哪个版本?
    • 使用6.0版本的activiti
    【解决方案2】:

    1.创建自定义任务监听器

    @Component(value = "myEventListener")
    public class MyEventListener implements TaskListener {
        @Override
        public void notify(DelegateTask delegateTask) {
            //do something
        }
    }
    

    2.通过java代码创建你的用户任务

    UserTask userTask = new UserTask();
    userTask.setName("");
    userTask.setId("");
    
    List<FlowableListener> listeners = new ArrayList<>();
    FlowableListener listener = new FlowableListener();
    listener.setEvent("complete");
    listener.setImplementation("${myEventListener}");
    listener.setImplementationType("delegateExpression");
    
    listeners.add(listener);
    userTask.setTaskListeners(listeners);
    

    3.你可以使用 BpmnXMLConverter 将 BpmnModel 转换为 xml 字符串

    new BpmnAutoLayout(model).execute();
    BpmnXMLConverter converter = new BpmnXMLConverter();
    byte[] bytes = converter.convertToXML(model);
    System.out.println(new String(bytes));
    

    xml 可能是

        <userTask id="taskId" name="taskName">
          <extensionElements>
            <flowable:taskListener event="complete" delegateExpression="${myEventListener}"></flowable:taskListener>
          </extensionElements>
        </userTask>
    

    4.你也可以修改你的代码

    listener.setEvent("complete");
    listener.setImplementation("com.xxx.MyEventListener");
    listener.setImplementationType("class");
    

    xml 可能是

        <userTask id="taskId" name="taskName">
          <extensionElements>
            <flowable:taskListener event="complete" class="com.xxx.MyEventListener"></flowable:taskListener>
          </extensionElements>
        </userTask>
    

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2013-03-31
      • 1970-01-01
      相关资源
      最近更新 更多