1、利用jpdl图形设计器分析和设计流程
2、定义流程
3、加载和启动jbpm流程定义、
A、利用JbpmConfiguration.createJbpmContext(),得到jbpmContext上下文对象;
B、再利用JbpmContext上下文对象得到GraphSession对象;
C、根据GraphSession对象来加载流程定义,根据流程定义id来加载得到流程定义对象;
D、创建流程实例:启动流程
ProcessInstance processInstance = new ProcessInstance(processDefinition);
E、保存jbpmContext.save(processInstance);
F、关闭jbpmContext.close();
=======================================================================================
一、部署流程定义
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlResource(“jdpl/hello/processdefinition.xml");
//部署流程定义,如果已经存在同名的定义,则版本号会自动累加
jbpmContext. deployProcessDefinition(processDefinition);
jbpmContext.close();
======================================================================================
二、加载和开始流程
JbpmContext jbpmContext =JbpmConfiguration.getInstance.createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
//加载流程定义
ProcessDefinition processDefinition = graphSession
.loadProcessDefinition(processDefinitionId);
// 创建流程实例:启动流程
ProcessInstance processInstance = new ProcessInstance(processDefinition);
//此时,rootToken指向流程定义的第一个节点
jbpmContext.save(processInstance);
jbpmContext.close();
=====================================================================================
三、给任务设置参与者
某一个任务固定由某人处理:
<task-node name="collectform" >
<task >
<assignment actor-id=“manager” />"
</task>
<transition name="auditfork" to="auditfork" />
</task-node>
=====================================================================================
四、给任务设置参与者
用变量传递参与者的ID: 值一般在web层确定
定义配置:
<task-node name="collectform" >
<task >
<assignment class='org.ministone.training.jbpm.UserIdAssignmentHandler' />“
<assignment actor-id=‘#{userId}' />“
</task>
<transition name="auditfork" to="auditfork" />
</task-node>
Handler 实现
public class UserIdAssignmentHandler implements AssignmentHandler {
public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
String actorId = (String) executionContext.getVariable("userId");
assignable.setActorId(actorId);
}
}
=====================================================================================
五、获取工作列表
获取待办列表:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
//只能获取尚未完成的任务列表(待办任务)
List list = taskMgmtSession.findTaskInstances(userId);
jbpmContext.close();
在实际的应用中,需要自己写DAO来获取各种列表,例如待签、待办、已办、办结等列表,而且可以进行条件查询,分页等
======================================================================================
六、执行任务
典型代码:取得某个任务id对应的任务实例
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(id);
taskInstance.start();
jbpmContext.save(taskInstance);
jbpmContext.close();
start()方法的调用
标识着一个任务的执行的开始:任务的开始时间字段会被填充
在实际业务中类似签收的作用
也可以带入参数(actorId)来主动参与任务的执行
======================================================================================
七、如何结束任务
典型代码:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(id);
taskInstance.end();
jbpmContext.save(taskInstance);
jbpmContext.close();
end 方法的调用
当前任务实例的结束:任务的结束时间字段会被填充
下一个节点的初始化(实际上调用了token.signal()方法)
当前任务的结束和下一个流程节点的开始是在一个事务内完成,从而保证了数据的完整性
======================================================================================
八、设置(流程实例)变量
变量用来处理工作流相关数据
不需要定义
和流程实例信息一起被持久化
变量的访问和赋值是在某一个token上进行的,缺省时,是基于root Token
变量的作用域和所属的token的生命周期一致,分支上同名变量互不影响,和parent的同名变量也互不影响
典型代码:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessInstance processInstance = graphSession.loadProcessInstance(Long
.parseLong(instanceId));
ContextInstance contextInstance = processInstance.getContextInstance();
contextInstance.setVariable(vname, value); //设置到了rootToken
jbpmContext.save (processInstance);
jbpmContext.close();
====================================================================================
九、对JbpmContext的理解(-)
职责
封装了对流程实例的持久化操作
用于获取GraphSession对象;
主要方法
Connection getConnection()
Session getSession()
public GraphSession getGraphSession()
public TaskMgmtSession getTaskMgmtSession()
public LoggingSession getLoggingSession()
public SchedulerSession getSchedulerSession()
public void close()
理解(二)
典型用法
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
TaskInstance taskInstance = ...
...do your process operations..............
jbpmContext.save(taskInstance);
}catch(Throwable){
//process exception here
}
finally {
jbpmContext.close();
}
理解(三)
web.xml中的配置
filter>
<filter-name>JbpmContextFilter</filter-name>
<filter-class>org.jbpm.web.JbpmContextFilter</filter-class>
</filter>
……
<filter-mapping>
<filter-name>JbpmContextFilter</filter-name>
<url-pattern>/wfapp/*</url-pattern>
</filter-mapping>
jsp页面上 <%
JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
List list = jbpmContext.getGraphSession().findLatestProcessDefinitions();
for (int i = 0; i < list.size(); i++) {
ProcessDefinition pd = (ProcessDefinition)list.get(i);
%>
<tr><td><%=pd.getName()%></td><td><%=pd.getVersion()%></td> </tr>
<% } %> <!– 不需要关闭-->
======================================================================================
十、对GraphSession的理解
职责
Graph 相关的数据持久化操作
主要是ProcessDefinition和ProcessInstance
主要方法
public void saveProcessDefinition( ProcessDefinition processDefinition )
public ProcessDefinition loadProcessDefinition(long processDefinitionId)
public ProcessDefinition findProcessDefinition(String name, int version)
public List findAllProcessDefinitions()
public void saveProcessInstance(ProcessInstance processInstance)
public ProcessInstance loadProcessInstance(long processInstanceId)
public List findProcessInstances(long processDefinitionId)
Delete方法
=====================================================================================
十一、TaskMgmtSession的理解
职责
TaskInstance相关的数据查询操作
TaskInstance数据通过ProcessInstance进行保存
主要方法
public List findTaskInstances(String actorId)
public List findPooledTaskInstances(String actorId)
public List findTaskInstancesByToken(long tokenId)
public TaskInstance loadTaskInstance(long taskInstanceId)
没有save方法,save是通过对processInstance的操作实现的
======================================================================================
总结:
一、jBPM编程步骤总结
创建流程定义
部署流程定义
启动流程实例
获取任务列表
执行某个任务
结束任务
二、工作流应用一般开发步骤
分析业务流程、用jPDL对业务流程进行建模
部署流程定义
创建和启动流程实例
获取待办任务
执行任务
提交(结束)任务
分享到:
相关推荐
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
西门子224XP十显控触摸屏下的螺杆式空压机工频运行控制策略及程序注释解析,螺杆式空压机工频运行,变频机上用不了!!!使用西门子224xp 十显控触摸屏,程序有注释,可直接用于工程 ,核心关键词:螺杆式空压机;工频运行;变频机;西门子224xp;十显控触摸屏;程序注释;工程使用。,西门子224XP空压机控制程序工频变频切换方案
# 基于Arduino的Tellarium天文模拟系统 ## 项目简介 Tellarium是一个基于Arduino平台的天文模拟系统,旨在通过步进电机驱动行星模型,模拟行星的轨道运动。该项目通过串行通信接收用户指令,并使用DCF77库处理时间信号,以确保行星的运动与真实世界的时间同步。 ## 项目的主要特性和功能 1. 步进电机控制精确控制步进电机,实现行星模型的平滑运动。 2. 串行通信通过串行端口接收用户指令,如设置行星速度、启动或停止电机。 3. DCF77时间信号接收使用DCF77库接收时间信号,确保行星运动与真实时间同步。 4. 日志和调试提供日志输出和调试LED闪烁功能,便于开发者进行调试和问题排查。 5. 时间管理包括获取和设置时间、处理时间字符串等功能,确保系统时间的准确性。 ## 安装使用步骤 1. 硬件准备确保所有必要的硬件已正确连接,包括步进电机、磁铁传感器、Arduino板等。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
内容概要:文章介绍了针对COVID-19的药物再利用的创新方法,这种方法融合了基于文献的知识(LitCovid和CORD-19数据集)及先进的知识图谱补全技术。具体采用了基于神经网络的TransE、RotatE等多种算法预测药物再利用的潜力,并通过开放和封闭的发现模式为预测结果提供合理的机制解释,包括发现模式、准确性分类及定性评估等手段,增强了方法的实用性。研究表明,TransE表现最优,并成功预测并验证了一系列药物作为COVID-19的治疗候选人选。此外,方法不仅适用于COVID-19,还具备应用于其他疾病药物再利用及其他临床问题解决的潜力。此研究为快速高效地推进药物再利用提供了一个新的计算框架。 适合人群:生物医学科研人员,从事药品再利用、人工智能药物筛选的专业研究人员,对生物信息数据分析和处理感兴趣的学者或技术人员。 使用场景及目标:① 利用计算模型预测药物能否被重新应用于新的适应症,尤其是在面对突发公共卫生事件时加快新药物的研发进程。② 对现有药物进行再评价,以发现更广泛、安全、有效的治疗用途,为临床治疗提供依据和理论指导。③ 探讨通过自动化手段发掘药物作用机理的技术路径。 其他说明:作者团队来自多个国家和地区,研究获得了多项国家级基金支持,论文详尽描述了实验细节,并附上了全部代码和数据资源供后续拓展和重复研究使用。
QT 串口源码 串口实例 QT 串口助手代码 (2),含有完整的代码
2025年最新酒店客房部经理考试题答案.docx
# 基于Arduino的陶瓷加热器控制系统 ## 项目简介 这是一个基于Arduino的陶瓷加热器控制系统项目,旨在实现对陶瓷加热器的精确控制,适用于实验室、工业生产等需要精确控温的场合。 ## 项目的主要特性和功能 陶瓷加热器控制通过Arduino板控制陶瓷加热器的开关。 温度获取与转换采用ADC值获取温度,并通过查找表转换为实际温度。 目标温度设置允许用户设置目标温度。 错误检测与处理检测加热器的错误状态,如温度过高或短路等。 调试模式提供调试功能,方便开发者调试和测试。 ## 安装使用步骤 1. 下载并解压项目源码文件。 2. 将解压后的文件复制到Arduino的sketchbook目录中。 3. 连接陶瓷加热器到Arduino板上的指定引脚。 4. 使用USB线连接Arduino板到计算机。 5. 在Arduino IDE中打开项目文件,选择正确的Arduino板型号和端口。 6. 上传代码到Arduino板。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
CatBoost-shap集成模型:分类任务的解释与可视化Python代码实现,自带数据集,即插即用,全部图形直观展现,CatBoost-shap集成模型用于分类任务,对模型和变量用shap进行解释 Python 代码,自带数据集可以直接运行 所有图所见即所得 ,核心关键词:CatBoost-shap; 分类任务; 模型解释; 变量解释; Python代码; 自带数据集; 直接运行; 图形化结果。,"CatBoost模型SHAP解释器:分类任务图解"
项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea
基于西门子S7-1200 PLC与Wincc组态技术的智能路口交通指挥系统解决方案。,No.698 西门子S7-1200 和Wincc组态基于PLC的路口交通指挥系统 ,No.698; 西门子S7-1200; Wincc组态; PLC; 路口交通指挥系统; 交通控制系统。,基于PLC与Wincc组态的西门子S7-1200交通指挥系统
西门子S7-200 PLC控制的灯泡安装工作站系统设计:高效、智能的自动化解决方案,No.662 基于西门子S7-200 PLC的灯泡安装工作站的控制系统设计 ,基于西门子S7-200 PLC; 灯泡安装工作站; 控制系统设计,西门子S7-200 PLC控制灯泡安装站设计 No.662
PHP从入门到精通课程资料+pdf
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
LBM格子玻尔兹曼方法在Matlab中模拟3D气泡上升多相流的应用研究,lbm格子玻尔兹曼方法模拟3D气泡上升多相流 matlab ,LBM;格子玻尔兹曼方法;3D气泡上升;多相流模拟;Matlab,LBM格子玻尔兹曼模拟3D气泡多相流上升过程 Matlab实现
SQL Server 从入门到精通-pdf
"混合储能功率共享系统:基于滑动平均与多通道FFT的功率分配及模糊控制SOC管理策略",混合储能功率共享系统 光伏发出的功率与负载消耗功率的差值即混合储能的功率,将混合储能功率通过滑动平均后剩下的功率差值通过多通道FFT进行二次划分;二次划分得到的低频功率分量与之前的滑动平均得到的成分一起分给蓄电池进行平抑,最后剩下的高频部分交给超级电容进行平抑 soc通过模糊控制进行管理 ,混合储能;功率共享;滑动平均;多通道FFT;低频功率;soc管理;超级电容;蓄电池平抑,混合储能功率管理系统的设计与优化
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
ollama