由于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;
}

 
AdministrationPage的84行

activiti源代码的细节的更多相关文章

  1. Activiti源代码分析

    ExecutionEntity内部含有parent,是一个运行树或运行路径.应该是一个流程实例的运行过程,一个实例相应一个ExecutionEntity,通过getActivity得到的是当前正在运行 ...

  2. Activiti 流程启动及节点流转源代码分析

    作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文主要是以activiti-study中的xiaomage.xml流程图为例进行跟踪分析 详细的 ...

  3. 一个jeecg整合activiti的学习样例,源代码下载

    社区成员:刘京华採用技术:jeecg+ activiti源代码下载地址:http://pan.baidu.com/s/1dDxOHrV 截图演示:  2.jpg (71.81 KB, 下载次数: 0) ...

  4. Activiti从当前任务任意回退至已审批任务

    http://www.verydemo.com/demo_c161_i143918.html import java.util.HashMap; import java.util.Iterator; ...

  5. 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载

    <疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...

  6. [Effective JavaScript 笔记]第3章:使用函数--个人总结

    前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...

  7. 【OpenCV十六新手教程】OpenCV角检测Harris角点检测

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...

  8. 【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨) ...

  9. 【OpenCV新手教程之十八】OpenCV仿射变换 &amp; SURF特征点描写叙述合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)  ...

随机推荐

  1. ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题)

    分词器选择 调研了几种分词器,例如IK分词器,ansj分词器,mmseg分词器,发现IK的分词效果最好.举个例子: 词:<<是的>><span>哈<\span ...

  2. 使用POP3协议接收并解析电子邮件(全)

    package org.yangxin.study.jm; import java.io.BufferedInputStream; import java.io.BufferedOutputStrea ...

  3. ML平台_Paddle参考

    PaddlePaddle源自于 2013 年百度深度学习实验室创建的 “Paddle”.当时的深度学习框架大多只支持单 GPU 运算,对于百度这样需要对大规模数据进行处理的机构,这显然远远不够,极大拖 ...

  4. FIFO IP核仿真

    FIFO IP核仿真 1.FIFO IP核配置 2.FIFO测试逻辑代码 首先往FIFO里面写入512个数据(FIFO深度的一半),然后再开始同时往FIFO里面写入,读出数据.FIFO读和写的时钟域不 ...

  5. 阅读<Video Timing Controller>笔记

    阅读<Video Timing Controller>笔记   1.Video Timing Controller Block Diagram 2.Example Video Timing ...

  6. 转:使用 Go-Ethereum 1.7.2搭建以太坊私有链

    使用 Go-Ethereum 1.7.2搭建以太坊私有链 目录 [toc] 1.什么是Ethereum(以太坊) 以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约.开源的底 ...

  7. java集合之List源码解析

    List是java重要的数据结构之一,我们经常接触到的有ArrayList.Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下 接下来,我们对 ...

  8. excel技巧--单元格合并与拆分

    如果要将上图的地区列做成下图的合并单一列: 有如下做法: (以下图表格为例) 1.选择要排序的表格,点击“开始”-->排序和筛选-->自定义排序.在对话框选择“业务项目”进行排序: 2.选 ...

  9. Hiero的spreadsheet中添加tag属性列

    Hiero在对剪辑线上的item进行管理的时候,往往会添加能多tag,而在管 理面板spreadsheet中却无法对tag进行查询,这是一件很麻烦的事,Hiero Development Guide中 ...

  10. 基于vue.js实现远程请求json的select控件

    基本思路 前端把需要的参数类型编码传到后台,后台返回相应的参数列表json,前端利用vue渲染select控件 具体实现 前端代码 <select v-model="template. ...