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 作者:毛星云(浅墨) ...
随机推荐
- Request method 'POST' not supported
总是报错,原来是form表单的锅,赶紧删了.
- 禁止ajax访问shiro管理的登录页面
在使用shiro的时候,对于用户权限的管理,相信很多人都已经很熟悉了.今天,我这里简单的记录一下我自己调试过程中遇到的问题.主要是登录的操作,禁止通过ajax的方式进行访问. shiro中,登录过程拒 ...
- 基于redis的乐观锁实践
redis真是一个分布式应用场景下的好东西,对于我们的应用设计,功劳大大的! 今天要研究的是基于redis的事务机制以及watch指令(CAS)实现乐观锁的过程. 所谓乐观锁,就是利用版本号比较机制, ...
- Vivado中ILA的使用
Vivado中ILA的使用 1.编写RTL代码 其中需要说明的是(* keep = "TRUE" *)语句的意识是保持cnt信号不被综合掉,方便以后的调试,是否可以理解为 ...
- 获取 TUniConnection.SpecificOptions默认值和下拉框列表值
TUniConnection的SpecificOptions参数决定了数据库连接配置参数,但可惜的是,SpecificOptions设计器界面,Devart公司只能让它在设计期配置! Specific ...
- 简单谈谈JS数组中的indexOf方法
前言 相信说到 indexOf 大家并不陌生,判断字符串是否包涵子字符串时特别常用,正则不熟练同学的利器.这篇文章就最近遇到的一个问题,用实例再说说说indexOf方法.本文是小知识点积累,不作为深入 ...
- Spring cloud和Dubbo
dubbo由于是二进制的传输,占用带宽会更少springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大 dubbo的开发难度较大,原因是dubbo的 ...
- 《亲测》nginx webscoket ssl conf配置示例
非crt证书,用的pem,其中 http://localhost:5003 是你要转发到的站点网址 配置的就是 server { listen 80; server_name smarthome.yi ...
- 对poi-Excel导入的浅层理解
本文即将对POI方式导入excel文件最核心的步骤予以说明,为的是简单,也是为了阐明文件导入的原理. 文件导入有一个很明显的线索: 1.首先是我们知道硬盘中的文件,即:文件对象File file 2. ...
- Android开发之Activity(cho1)篇
一.Activity判断网络是否连通: 首先创建一个Andorid Project项目,然后添加一个on1类,Layout一个button控件和Textview控件. values有一个Color.x ...