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 作者:毛星云(浅墨) ...
随机推荐
- Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用搭建
高可用集群 在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对与微服务和服务注册中心都需要高可用部署,Eureka 高可用实际上就是将自己 ...
- 解决web项目存在多个log4j.properties配置文件,导致日志级别配置不生效问题
java开启log4j的debug模式 -Dlog4j.debug=true tomcat启动debug模式: linux打开catalina.sh导入: export JAVA_OPTS=" ...
- jQuery同一标签多个相同事件 return语句 表单提交实例
如form表单的submit,a标签都自带一个鼠标单击事件,其实我们还可以额外填加单击事件 如:$(':submit').click(); 则自定义的单击事件先执行,然后才是标签自带的单击事件(c ...
- JAVA的debug入门和多断电调试
调试的一般都是逻辑 第一步的错误双击数字旁边的蓝色地方,或者点击右键如图 断点的意思就是程序执行在哪里就停止 当找不到DEBUG中的Variables是在位置输入Variables就可以了: 再按下F ...
- 树莓派Raspberry Pi zero w无线联网实测
第一次学习树莓派,使用的是Raspberry Pi zero w的型号. 刚开始,就只有一块板子!!!这要怎么开发啊 经过网上查阅资料,发现可以通过WiFi连接PC端实现开发测试 准备材料:一根USB ...
- 使用R语言-操作data.frame
1 向一个data.frame指定列插入一列新数据 1.1 插入一列到指定位置 y<-1:4 data1 <-data.frame(x1=c(1,3,5,7), x2=c(2,4,6,8) ...
- MyBatis 对数据库进行CRUD操作
1.update修改 uodate修改也可以使用之前的机制在配置文件中直接编写sql 但是update语句的set字句中是根据传入的值决定的, 此时可以通过Mybatis提供的标签实现判断动态拼接up ...
- [转]截图软件分享 - Snipaste
http://chromecj.com/software/2018-10/1538.html https://zh.snipaste.com/download.html
- 廖雪峰Java2面向对象编程-5包和classpath-3作用域
1.访问权限 Java的类.接口.字段和方法都可以设置访问权限 访问权限是指在一个类的内部,能否引用另一个类以及访问它的字段和方法 访问权限有public.protected.private和pack ...
- java 泛型 checkcast
我们来看一段代码 public class Test3 { public static void main(String args[]) throws IllegalAccessException, ...