`
winter_leo
  • 浏览: 4086 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

iMatrix平台流程引擎事件处理之子流程事件处理

阅读更多

今天对iMatrix平台中子流程中的事件处理研究所得几点,分享给大家:




获得子流程实体的spring bean
当子流程的表单为标准表单时,子表单对应的实体实例是流程引擎通过回调该bean获得的。这里的bean必须实现接口com.norteksoft.wf.engine.client.OnStartingSubProcess
进入子流程前spring bean
开始子流程前回调该bean。如果该bean不存在,则直接启动子流程;如果该bean存在,则调用该bean的isIntoSubProcess ()方法。如果该方法返回true,启动子流程;如果该方法返回false,不进入启动子流程,主流程将跳过子流程继续向下执行。这里的bean必须实现接口com.norteksoft.wf.engine.client.BeforeStartSubProcess
子流程结束后返回时的spring  bean
当子流程结束返回主流程时,流程引擎将回调该bean。这里的bean必须实现接口com.norteksoft.wf.engine.client.AfterSubProcessEnd。
1 子流程实现是使用了jbpm的custom节点,如下:
<custom   name="子流程"   g="191,243,80,40" class="com.norteksoft.wf.engine.core.SubProcessService">
… … … …
</custom>
2 当走到该节点时根据jbpm对custom的处理,会自动调用com.norteksoft.wf.engine.core.SubProcessService中的execute方法,同时给jbpm信号,等待子流程结束,当子流程结束时在给主流程继续流转的信号,如下:
红色字体代码段为:获得执行的bean名称、获得spring容器中的bean、执行该bean中的方法。
 ”进入子流程前”的处理实现:
public void execute(ActivityExecution execution) throws Exception {
… … … …
String beforeStartSubProcessName = DefinitionXmlParse.getBeforeStartSubProcess(subprocessParse.getParentDefinitionId(),subprocessParse.getActivityName());
log.info("实现类的beforeStartSubProcessName:"+beforeStartSubProcessName);
BeforeStartSubProcess beforeStartSubProcess = null;
if(StringUtils.isNotEmpty(beforeStartSubProcessName)){
beforeStartSubProcess = (BeforeStartSubProcess)ContextUtils.getBean(beforeStartSubProcessName);
log.debug("beforeStartSubProcess:"+beforeStartSubProcess);
}
if(beforeStartSubProcess==null || beforeStartSubProcess.isIntoSubProcess(parentWorkflow.getDataId())){
… … … …
//给jbpm信号,等待子流程结束
execution.waitForSignal();
}
… … … …
}

 “获得子流程实体的spring bean”的处理实现:
com.norteksoft.wf.engine.core.SubProcessService中的execute方法为入口,
public void execute(ActivityExecution execution) throws Exception {
… … … …
taskService.startSubProcessWorkflow(transactor,subprocessParse,null);
… … … …
}

public void startSubProcessWorkflow(Map<TaskTransactorCondition, String> transactor,SubProcessParse subprocessParse,Collection<String> transcators){
… … … …
String beanName = DefinitionXmlParse.getSubProcessBeginning(subprocessParse.getParentDefinitionId(),subprocessParse.getActivityName());
log.info("实现类的beanname:"+beanName);
OnStartingSubProcess beginning = (OnStartingSubProcess)ContextUtils.getBean(beanName);
… … … …
//获得子流程对应的实体
FormFlowable subFormEntity = eginning.getRequiredSubEntity(param);
… … … …
}
 “子流程结束后”的处理实现:
当子流程结束时,给主流程继续流转的信号:
com.norteksoft.wf.engine.core. ProcessEndListener中,
public void notify(EventListenerExecution execution) {
… … … …
//设置继续流转的信号
executionService.signalExecutionById(workflow.getParentExcutionId(),transitionName);
… … … …
}
     当给了该信号后,会走com.norteksoft.wf.engine.core.SubProcessService中的signal方法,在该方法中处理“子流程结束后”的事件:
   public void signal(ActivityExecution execution, String signalName, Map<String, ?> parameters) throws Exception {
   … … … …
   String subProcessEndName = DefinitionXmlParse.getSubProcessEnd(subprocessParse.getParentDefinitionId    (),subprocessParse.getActivityName());
log.info("实现类的subProcessEndName:"+subProcessEndName);
if(StringUtils.isNotEmpty(subProcessEndName)){
AfterSubProcessEnd afterSubProcessEnd = (AfterSubProcessEnd)ContextUtils.getBean(subProcessEndName);
log.info("subProcessEnd:"+afterSubProcessEnd);
if(afterSubProcessEnd!=null) afterSubProcessEnd.execute(parentWorkflow.getDataId());
}
… … … …

}

 

  • 大小: 47.4 KB
分享到:
评论

相关推荐

    静态golang生成公共世界可读Matrix房间的预览。_Go_.zip

    6. **部署与更新**:项目可能包含了自动化构建和部署流程,比如使用 Docker 容器和 CI/CD 工具(如 Jenkins 或 GitHub Actions)来确保每次代码变更后都能生成最新的静态预览。 7. **可扩展性**:考虑到 Matrix ...

    matrix_twisted

    **Twisted** 是一个用Python编写的事件驱动网络引擎,被广泛应用于多种场景下的网络编程。它支持TCP、UDP、SSL/TLS等多种协议,并提供了丰富的API来简化网络应用程序的开发。本文将深入探讨Twisted的核心概念和技术...

    Android应用源码之PdfViewerPDF查看器.rar

    在这个项目中,开发者可能使用了Android官方推荐的PDF渲染库——PDFium,它是Google为Chrome浏览器开发的开源PDF渲染引擎,能够高效地处理PDF文件。 2. **UI设计**:PDF查看器的用户界面(UI)设计是关键,它需要...

    java开源包1

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包11

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包2

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包3

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包6

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包5

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包10

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包4

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包8

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包7

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包9

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    java开源包101

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    Java资源包01

    SpeechLion 是一个语音识别程序,主要用来处理桌面命令,基于 Sphinx-4 语音识别引擎开发。用户可以通过该软件来控制 Linux 桌面,例如打开google搜索、鼠标点击、下一窗口、打开帮助、静音等操作。 Java发送短信包...

    JAVA上百实例源码以及开源项目源代码

    原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制...

    精通matlab7.0混合编程.

    8.3.4 矩阵i/o 8.3.5 图形函数 8.4 混合编程实例 8.5 matlab数学库 8.5.1 简介 8.5.2 visual c++工程中调用matlab数学函数库的环境设置 8.6 小结.. 第9章 通过matlab add-in实现混合编程 9.1 matlab add-in简介 9.2 ...

Global site tag (gtag.js) - Google Analytics