activiti源代码的细节
由于activiti-explorer-5.14的web演示程序使用的是vaadin服务器端ui组件,程序关键点找起来还是有些麻烦,vaadin的这种web框架,就是不需要专门美术界面人员,只需要程序员一人,就可以生成程序化的web界面,按钮、窗口什么的都比较标准化,不大可能有参与太多的创意设计以满足功能为主的一种框架,我现在讨厌这种模式。
我需要流程定义管理、modeler模型编辑修改等代码段,终于在activiti-explorer-5.14-sources.jar\org\activiti\editor\ui下找到这些核心工作类:
SelectEditorComponent.java
NewModelPopupWindow.java //新建模型
ImportUploadReceiver.java //导入模型
ImageStreamSource.java //流程图数据流
EditorProcessDefinitionPage.java //编辑定义页
EditorProcessDefinitionInfoComponent.java //编辑流程定义信息组件
EditorProcessDefinitionDetailPanel.java //流程定义细节工具栏
DeployModelPopupWindow.java //部署模型弹出窗口
DeleteModelPopupWindow.java //删除模型弹出窗口
CopyModelPopupWindow.java //拷贝模型弹出窗口
ConvertProcessDefinitionPopupWindow.java //流程定义转换成模型类
/**
* 读取流程历史记录
*
* @return
*/
public PaginationDto findFinishedProcessInstacesNotPage(String processInstanceId,PaginationDto pagination) {
String sql = "select * from act_hi_actinst t where t.proc_inst_id_ = '"+processInstanceId+"' and t.act_type_ != 'exclusiveGateway' and t.act_type_ != 'endEvent' and t.END_TIME_ is not null order by END_TIME_ desc";
List<HistoricActivityInstance> activityInstances = historyService.createNativeHistoricActivityInstanceQuery().sql(sql).list();
int totalCount = activityInstances.size();
PaginationDto p = new PaginationDto();
p.setDraw(pagination.getDraw());
p.setLength(pagination.getLength());
p.setStart(pagination.getStart());
p.setRecordsTotal(totalCount);
p.setRecordsFiltered(totalCount);
if(totalCount<1){
p.setData(new ArrayList<Object>());
}else{
List<AdverseEventHistoryProcessDTO> datas = new ArrayList<AdverseEventHistoryProcessDTO>();
for(HistoricActivityInstance activityInstance : activityInstances){
AdverseEventHistoryProcessDTO data = new AdverseEventHistoryProcessDTO();
//任务ID
String taskId = activityInstance.getTaskId();
data.setTaskId(StringUtils.defaultIfEmpty(taskId, ""));
if(StringUtils.isNotEmpty(taskId)){
ActHiComment coment =(ActHiComment) workFlowDAO.findEntityByHql("from ActHiComment where procInstId = '"+processInstanceId+"' and taskId = '"+taskId+"'");
//操作状态
data.setOperateType(coment.getType());
//意见
data.setMessage(coment.getMessage());
}
//流程启动人设置
if(activityInstance.getActivityType().equals("startEvent")){
List<HistoricIdentityLink> historicIdentityLinks = historyService.getHistoricIdentityLinksForProcessInstance(processInstanceId);
for(HistoricIdentityLink historicIdentityLink : historicIdentityLinks){
if(historicIdentityLink.getType().equals("starter")){
data.setOperator(historicIdentityLink.getUserId());
data.setOperatorName(workFlowDAO.getUserName(historicIdentityLink.getUserId()));
data.setOperateType(WorkFlowOperationConstant.WORKFLOW_REPORT);
break;
}
}
}
//执行人
else if(StringUtils.isNotEmpty(activityInstance.getAssignee())){
data.setOperator(activityInstance.getAssignee());
data.setOperatorName(workFlowDAO.getUserName(activityInstance.getAssignee()));
}else{
data.setOperator("");
data.setOperatorName("");
}
//执行环节
data.setTaskName(activityInstance.getActivityName());
//开始时间
if(null != activityInstance.getStartTime()){
data.setStartTime(TimeConversionUtils.dateToString(activityInstance.getStartTime(), "yyyy-MM-dd HH:mm:ss"));
}
//结束时间
if(null != activityInstance.getEndTime()){
data.setEndTime(TimeConversionUtils.dateToString(activityInstance.getEndTime(), "yyyy-MM-dd HH:mm:ss"));
}
//耗时
if(null != activityInstance.getDurationInMillis()){
data.setHandleTime(String.valueOf(activityInstance.getDurationInMillis()/1000));
}
datas.add(data);
}
p.setData(datas);
}
return p;
}
activiti源代码的细节的更多相关文章
- Activiti源代码分析
ExecutionEntity内部含有parent,是一个运行树或运行路径.应该是一个流程实例的运行过程,一个实例相应一个ExecutionEntity,通过getActivity得到的是当前正在运行 ...
- Activiti 流程启动及节点流转源代码分析
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文主要是以activiti-study中的xiaomage.xml流程图为例进行跟踪分析 详细的 ...
- 一个jeecg整合activiti的学习样例,源代码下载
社区成员:刘京华採用技术:jeecg+ activiti源代码下载地址:http://pan.baidu.com/s/1dDxOHrV 截图演示: 2.jpg (71.81 KB, 下载次数: 0) ...
- Activiti从当前任务任意回退至已审批任务
http://www.verydemo.com/demo_c161_i143918.html import java.util.HashMap; import java.util.Iterator; ...
- 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载
<疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- 【OpenCV十六新手教程】OpenCV角检测Harris角点检测
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...
- 【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编
本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...
- 【OpenCV新手教程之十八】OpenCV仿射变换 & SURF特征点描写叙述合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨) ...
随机推荐
- input子系统详解2
上一节大概了解了输入子系统的流程 这一节认真追踪一下代码 input.c: input_init(void)函数 static int __init input_init(void) { int er ...
- mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数
在做项目的时候需要些分页,用的数据库是MySQL,之前看到的参考例子是用MS SQL做的,在MS SQL.Oracle里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...
- Ribbon 常用配置
配置参数 默认值 说明 <client>.<namespace>.listOfServers 配置服务器列表 <client>.<namespace>. ...
- 【java】JDK与JRE的区别
JRE和JDK区别: JDK和JRE提供的服务包: JDK是整个JAVA的核心,JDK包含如下核心组件: ·javac – 编译器 ·jar – 打包工具 ·javadoc – 文档生成器 ·jdb ...
- delphi中Time消息的使用方法
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- php函数总结2
1.匿名参数 func_get_args //获取参数列表的数组 func_get_arg(num) //数组索引 func_num_args() //获取匿名函数的个数 <?php funct ...
- regasm 无法定位输入程序集
c# 写的DLL是32位的,在64位机器上注册时提示 无法定位输入程序集 方法1: 使用绝对路径: "%windir%\Microsoft.NET\Framework\v2.0.50727\ ...
- bzoj5010: [Fjoi2017]矩阵填数
Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一 ...
- Flume的Sink
一.Logger Sink 记录指定级别(比如INFO,DEBUG,ERROR等)的日志,通常用于调试 要求,在 --conf(-c )参数指定的目录下有log4j的配置文件 根据设计,logger ...
- DevOps利器- Hygieia平台开发部署
前言碎语 Hygieia是什么? Capitalone(全美十大银行之一)开源的DevOps利器.使用Hygieia后,在整个软件开发周期中,用户可以选择VersionOne或Jira进行用户故事的追 ...