流程生命周期
持久化(保存流程定义)
转移至PE,并启动
运行
结束
Pe数据库介绍
流程运行的数据和状态保存在数据库中。
PE数据库默认名称为VWDB,表名已VW开头
每个节点的解析有三个方面
工作区中的操作
VWDB数据库相应的数据和变化
工作区中的操作:
启动工作流,需要设置Subject,comments,可以通过检索查询
VWWorkObject表示工作项,工作项分为根工作项、一般工作项
根工作项:存放的是工作流实例的基本信息
判断根工作项和一般工作项的依据是:F_WobNum = F_WorkFlowNumber
单词participant参与者
节点执行后数据库的变化
目标节点只有一个用户的情况:一个工作项记录插入到 user queue表
目标节点多个用户的情况:一个工作项记录插入到 user queue表和VWRoster表
目标节点时一个workQueue的节点,工作项插入到checkers工作队列所对应的workqueue表
总结:所有的工作记录都在VWQueue表中(user queue或work queue),但并不是所有工作项记录都在VWRoster表中,所有根工作项记录都在VWRoster表中,而非VWQueue表。
查找工作项常见的三中需求:
1 查看某个用户收件箱的待办工作项。
清单 4. 查看 mark 的收件箱
public void testListUserInboxWorkItems() throws VWException {
String userName = "mark";
String[] queueNames = vwSession.fetchQueueNames(
VWSession.QUEUE_USER_CENTRIC);
for (int i = 0; i < queueNames.length; i++) {
String queueName = queueNames;
VWQueue vwQueue = vwSession.getQueue(queueName);
int queryFlags = VWQueue.QUERY_READ_LOCKED;
if (queueName.startsWith("Inbox(")) {
VWQueueQuery qQuery = vwQueue.createQuery(
null, null, null, queryFlags, null, null,
VWFetchType.FETCH_TYPE_WORKOBJECT);
while (qQuery.hasNext()) {
VWWorkObject workObject = (VWWorkObject) qQuery.next();
VWParticipant participant = workObject.getParticipantNamePx();
if (participant != null & userName.equals(participant.getParticipantName()))
{
printNormalWorkObject(workObject);
}
}
}
}
}
private void printNormalWorkObject(VWWorkObject workObject) throws VWException {
System.out.println("\t*****************************");
System.out.println("\tWork Object Number: " + workObject.getWorkObjectNumber());
System.out.println("\tWork Object Subject: " + workObject.getSubject());
System.out.println("\tWorkflow Name: " + workObject.getWorkflowName());
System.out.println("\tWorkflow Number: " + workObject.getWorkflowNumber());
System.out.println("\tWorkflow Map Name: " + workObject.getCallMap());
System.out.println("\tWorkflow Step Name: " + workObject.getStepName());
System.out.print("\tAll Data Fields: ");
VWDataField[] dataFields = workObject.getDataFields(
VWWorkObject.FIELD_USER_AND_SYSTEM_DEFINED,
VWWorkObject.FIELD_USER_AND_SYSTEM_DEFINED);
printDataFields(dataFields);
}
2 检查某个工作队列的待办工作项
public void testListWorkQueueWorkItems() throws VWException {
String workQueueName = "Checkers";
String[] queueNames = vwSession.fetchQueueNames(VWSession.QUEUE_PROCESS);
for (int i = 0; i < queueNames.length; i++) {
String queueName = queueNames;
VWQueue vwQueue = vwSession.getQueue(queueName);
int queryFlags = VWQueue.QUERY_READ_LOCKED;
if (workQueueName.equals(queueName)) {
VWQueueQuery qQuery = vwQueue.createQuery(
null, null, null, queryFlags, null, null,
VWFetchType.FETCH_TYPE_WORKOBJECT);
while (qQuery.hasNext()) {
VWWorkObject workObject = (VWWorkObject) qQuery.next();
printNormalWorkObject(workObject);
}
}
}
}
*********************************************************
3 一个流程实例当前的待办工作项。
F_WobNum – 工作项号(对于根工作项,它的值和 F_WorkFlowNumber 相同 )
F_WorkFlowNumber – 工作流实例号
F_Class – 转移至 PE 中的工作流定义名
F_WorkClassId – 转移至 PE 中的工作流定义 ID
F_InstrSheetId – 工作流定义中的图 (Map) 定义 ID
F_WorkOrderId – 图定义中的节点定义 ID
F_Locked – 工作项是否被加锁
工作项内容查看----工作区操作:
在工作区查看工作项内容有两种方式:
1 只读性质的查看工作项内容:通过点击工作项名称旁边的“get info for..”按钮。
2 可编辑性质的打开工作项,直接点击工作项名称的连接
说明:只读不会加锁,可编辑性质工作项加锁
数据库:从数据库直接查看工作项信息比较复杂。
解锁工作项:有两种方式
1 打开它的用户通过cloas按钮关闭编辑界面或点击complete按钮完成它
2 点击“get info for ***”按钮,会弹出任务信息界面,然后再改页面对工作项重新分配或移动操作
数据库:从数据库直接查看工作项信息比较复杂。
不建议直接修改数据库数据的方式来给工作项加锁解锁
代码:
查看锁状态通过查看VWWorkObject与锁有关的数据字段:F_Locked F_LockUser等,可以调用VWWorkObject的FetcheLockedStatus、getLockedUser方式实现。
加锁、解锁通过调用VWWorkObject的doLock和doSave方法来实现
工作项内容编辑
工作区操作:只需要打开它并进行编辑,编辑完成后,点击apply按钮保存修改,或close按钮取消修改,
说明:编辑工作项不会导致它的完结,编辑工作项与重新分配和返回工作项操作结合实现多位用户依次在一个工作项上工作,最终由一个用户完成它。
数据库:不建议通过直接修改数据库数据的方式来编辑工作项内容
代码:通过调用 VWWorkObject 的 setComment 或 setSelectedResponse 等方法来改变工作项内容,然后通过调用 doSave 方法保存修改。
完成 (Complete) 工作项:
工作区操作:打开工作项,无论是否编辑都可以通过点击“complete”按钮来实现。完成工作项首先会自动保存对它的编辑
数据库变化:当一个数据项被完成后,它对应的数据库记录会在VWRoster和/或VWQueue表中删除。
代码:通过调用VWWorkObject的doDisspatch方法完成工作项。
移动和返回工作项
工作区操作:将工作收件箱的工作项移动到你个人的收件箱,其他人就不能对该工作项进行操作。
在个人收件箱的工作项如果来自公共收件箱,可以返回到原来工作项里。
数据库变化:移动操作导致相应的工作项记录从WorkQueue表删除并插入到User queue表中,返回相反
代码:VWWorkObject的doReassign和doReturnToSource方法实现工作项的移动与返回。
重新分配Reassign与返还工作项return
工作区操作:一个工作项重新分配给其他用户编辑或完成。
返还别人重新分配的工作项,操作类似于返还移动过的工作项。
数据库变化:工作项记录中与用户相关的数据字段有改动
对于重新分配操作,如果源工作项在工作收件箱中,则相应工作项记录从work queue表中删除并插入到user queue,返还操作相反。
代码:通过调用VWWorkObject的doReassign和doReturnToSource方法实现工作项的重新分配和返还。
流程结束
工作区操作:当一个流程实例走完所有的节点,就结束
数据库变化:流程实例的根工作项记录从VWRoster表中删除
代码:
显示工作流定义
工作区操作:找到流程设计文件,点击流程名称,进入流程设计器界面
数据库变化:工作流定义没有保存在数据库中,而是保存在CE以及内容中。
代码:工作流定义被转移至PE中之后,可以通过PE API来访问它
public void testPrintTransferredWorkflowDefinition() throws VWException {
String workClassName = "SampleParticipantFlow";
VWWorkflowDefinition workflowDef = vwSession.fetchWorkflowDefinition(
-1, workClassName, true);
VWMapDefinition[] maps = workflowDef.getMaps();
for (int i = 0; i < maps.length; i++) {
VWMapDefinition map = maps;
System.out.println("\t***********************************");
System.out.println("\tMap Name: " + map.getName());
System.out.println("\tMap ID: " + map.getMapId());
VWMapNode[] steps = map.getSteps();
for (int j = 0; j < steps.length; j++) { VWMapNode step = steps[j];
System.out.println("\t\tStep Name: " + step.getName());
System.out.println("\t\tStep ID: " + step.getStepId()); } }
}
*******************************************************
Map Name: Malfunction Map ID: -4 Step Name: StartStep Step ID: 0
Step Name: Review Step ID: 1 Step Name: Return Step ID: 3
*******************************************************
Map Name: Terminate Map ID: -3 Step Name: StartStep Step ID: 0
*******************************************************
Map Name: Workflow Map ID: -2 Step Name: LaunchStep
Step ID: 0 Step Name: ParticipantStep Step ID: 3
正在运行的流程实例的历史信息
工作区操作:打开流程管理器或流程跟踪器来查看正在运行(未结束)的工作流实例的历史信息。
数据库变化:查看VWLog表中的数据
代码:
相关java类简介
1VWProcess – 用于访问运行中的工作流实例的信息,如状态,活动工作项,历史信息等。
2VWWorkflowHistory – 用于访问一个正在运行的工作流实例的某个图 (Map) 的历史信息。
3VWStepHistory – 零或多个 VWStepHistory 实例可以从一个 VWWorkflowHistory 实例得到。一个 VWStepHistory 实例用于访问一个工作流实例的某个节点的历史信息。
4VWStepOccurrenceHistory– 零或多个 VWStepOccurrenceHistory 实例可以从一个 VWStepHistory 实例得到。一个VWStepOccurrenceHistory 实例用于访问一个工作流节点的一次发生(occurrence),这个节点可能已经完成了,也可能正在运行。一次发生意味着工作流实例运行到达该节点一 次。当发生完成时,工作流实例继续向下一个节点前进。
5VWStepWorkObjectHistory – 零或多个VWStepWorkObjectHistory 实例可以从一个 VWStepOccurrenceHistory 实例得到。一个VWStepWorkObjectHistory 实例用于访问一个相应节点产生的工作项,这个工作项可能已经完成,也可能正在等待处理。
6VWParticipantHistory– 零或多个 VWParticipantHistory 实例可以从一个 VWStepWorkObjectHistory 实例得到。一个VWParticipantHistory 实例用于访问一个参与者 (participant)在相应工作项上的活动。一个工作项可能有多位用户先后参与编辑和完成,例如在它被重新分配,甚至多重重新分配的情况下。
工作流事件日志:EventLog
工作区操作:打开流程管理器查询工作流实例在PE的事件日志,工作流实例可以使正在运行也可以使已经结束。
数据库变化:查看 VWLog 表中的数据
代码:
相关推荐
大华无插件播放项目111
内容概要:本文详细介绍了Oracle 19c数据库的备份恢复和导入导出操作。首先概述了基本命令,然后分别讲述了三种工作方式(交互式、命令行、参数文件)和三种模式(表、用户、全库)。接着介绍了高级选项,如分割成多个文件、增量导出/导入、以SYSDBA进行导出/导入、表空间传输等。最后讨论了优化技巧,包括加快导出和导入速度的方法。还解决了一些常见问题,如字符集问题和版本问题。 适用人群:Oracle数据库管理员和相关技术人员。 使用场景及目标:适合在日常数据库管理和维护中进行数据备份、恢复、导入和导出操作,提高数据安全性和管理效率。 其他说明:文章内容丰富,涉及多种实用技巧,适用于不同场景下的具体操作,有助于提升工作效率。
基于Python Flask开发的旅游酒店大数据可视化项目,可以直接运行。 操作步骤: 1. 解压缩项目文件 2. 使用 pycharm打开项目 3. 运行项目中的app.py文件 注意:需要确保项目的Flask Python相关的环境已经搭建完成。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Android 毕业设计,Android 毕业设计,小Android 程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告,个人高分设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的学生和需要项目实战练习的学习者。 基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告基于stm32和openmv的电赛校赛自动泊车题目源码+文档设计报告个人高分设计项目、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的学生和需要项目实战练习的学习者。 个人高分设计项目、经导师指导并认可通过的高分设
棉花检测20-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar棉-V2释放 ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 它包括406张图像。 以可可格式注释棉花。 将以下预处理应用于每个图像: 没有应用图像增强技术。
项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!
windwos环境下python 3.11系列64位安装包,仅推荐个人学习、开发、娱乐或者测试环境下使用。
使用精品酒销售管理系统的用户分管理员和用户两个角色的权限子模块。 管理员所能使用的功能主要有:主页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等。 用户可以实现主页、个人中心、我的收藏管理、订单管理等。 前台首页可以实现商品信息、新闻资讯、我的、跳转到后台、购物车等。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
Video_2024-12-18_000023.wmv
ppt最終版asasaadd
计算机图形学期末考试
springboot-基于SpringBootVue的家具商城系统设计与实现.zip
PenTablet_5.2.4-5.zip
考虑了企业管理者的实际工作环境和需求,最终将人力资源系统划分为5个部分,即登录模块、组织发展模块、员工团队模块、合同管理模块、党建管理模块。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
QT音乐播放器MP3 可点击播放可上一首下一首可调节音量 可暂停可上传音乐
椅子检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar对象检测实验室-V1 2023-08-21 2:28 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括997张图像。 对象以可可格式注释。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 应用以下扩展来创建每个源图像的3个版本: *将盐和胡椒噪声应用于10%的像素
Python课程设计,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。
Altas PF拧紧枪 OP协议,开发协议