由于才接触Activiti不久,对于表结构也不熟悉,甚至可以说连那些表对应的实体类都搞不清楚,又不能通过Activiti自带的链式查询实现;在这种情况下跟不知道怎么通过sql去实现自己想要的查询。上网看了些别人关于Activiti的介绍也不是很多,有的时候在自己模棱两可情况下看了别人的资料更不知道该怎么做了。

例如:我现在需要做个流程的已办事项,结果activiti的人都知道,activiti会将我们正在执行的任务复制一份在历史表中,要是这个任务完成了的话,他就会将正在执行的任务表中的数据清除使历史任务表中的数据结束时间有值,但是如果正在执行的任务没有完成的话,我们历史表就会用一条数据,如果现在将这条数据展示给用户的话,用户的体验就会很不好。

通常我们会使用链式查询出历史表中的所有数据:

List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery().taskAssignee(organid)
.orderByHistoricActivityInstanceStartTime().desc().listPage(pagin.getStartResult(), pagin.getPageSize());

这样查询出来的任务列表他包含了结束时间为空的数据,直接给用户展示的话,用户的体验就不好了。

如果我使用拼写sql的形式去查询“END_TIME_ is not null”就直接 简单的多。但是我们该怎么写这个sql呢?

List<HistoricTaskInstance> tasks = historyService.createNativeHistoricTaskInstanceQuery()
.sql("select * from " + managementService.getTableName(HistoricTaskInstance.class)+" H where H.END_TIME_ is not null and H.ASSIGNEE_ like #{organid} order by H.END_TIME_ desc")
.parameter("organid", "%"+organid+"%")
.listPage(pagin.getStartResult(), pagin.getPageSize());

代码中标红处:1、通过managementService接口找到我们需要使用的class类直接转换为对应的表,这样的话  我们不需要去知道这个实体所对应的表文件是“谁”了。

         2、使用了模糊查询,看网上别人的帖子,最开始以为activiti的模糊查询跟其他的模糊查询是一样的,可是自己试了下后,总是表示拼写的sql从在错误。才发现“%”拼错地方了这个东西需要拼写到参数这边,而不是拼写到sql语句中。

问题:其实在做已办事项的时候  我遇到一个问题,虽然后面我通过歪点子解决了这个问题,但是心里其实还是很想知道 activiti大神 或者是activiti正常的思维是怎么解决类似的问题的。

由于我这儿的流程很多,在已办中用于区分开不同分类的流程,使其分发走不同的业务Action;必须需要一个属性来区分,故而将其流程的key定义为每个业务类的类名(类名不能重复);那么问题来了,如何在历史任务中获得ProcessDefinitionKey

问题描述:

如果是待办事项的话 我们可以很轻松的从ProcessInstance对象中拿到ProcessDefinitionKey(这个字段我是用的是对应流程业务类的类名),但是在已办事项中这个字段从HistoricProcessInstance这个对象中拿不到的。不知道给位使用过activiti的同仁们是怎么做到的。

解决方案:

我对于activiti的存放是这样的:我在启动流程的时候设置了流程BUSINESS_KEY(业务类的类名.业务的ID),由于我的流程的key对于的也是业务类的类名所以这儿就能偷到这个懒,当然有些人这个BUSINESS_KEY是直接存放的业务ID。

Activiti流程 关于自定义sql查询的更多相关文章

  1. CI中自定义SQL查询,LIKE模糊查询的处理

    参考: /** * 据用户输入的关键字查询相册信息;照片墙搜索框功能 * @param $keyWord 关键字 * @param $pageNum 页码,第几页 * @param $pageSize ...

  2. activiti自定义流程之自定义表单(二):创建表单

    注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进 ...

  3. phpcmsv9自定义sql语句查询模型实现

    在phpcmsv9中,自定义sql语句查询可不太好实现,传入sql语句查询很容易被内部转入生成一系列莫名其妙的sql语句,比如最佳前缀等等,直接造成sql语句查询错误,在此也提供两种解决办法,1修改底 ...

  4. activiti自定义流程之自定义表单(三):表单列表及预览和删除

    注:(1)环境配置:activiti自定义流程之自定义表单(一):环境配置 (2)创建表单:activiti自定义流程之自定义表单(二):创建表单 自定义表单创建成功,要拿到activiti中使用,自 ...

  5. vba 自定义菜单与vba通过sql查询

    1.自定义菜单 首选需要开发“开发工具”菜单 文件--选项--自定义功能区--开发工具 勾选 .定义用户窗体或者宏 ) 定义用户窗体 Alt+F11进入Microsoft Visual Basic f ...

  6. spring boot 自定义sql分页查询

    1.自定义sql查询分页 @Override public <T> Page<T> pageSQL(@Nonnull String sql, @Nonnull Pageable ...

  7. 大数据技术之_19_Spark学习_03_Spark SQL 应用解析 + Spark SQL 概述、解析 、数据源、实战 + 执行 Spark SQL 查询 + JDBC/ODBC 服务器

    第1章 Spark SQL 概述1.1 什么是 Spark SQL1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 DataFrame1.2.3 DataS ...

  8. Thinkphp查询 1.查询方式 2.表达式查询 3.快捷查询 4.区间查询 5.组合查询 6.统计查询 7.动态查询 8.SQL 查询

    1.使用字符串作为条件查询 $user = M('User'); var_dump($user->where('id=1 AND user="蜡笔小新"')->sele ...

  9. thinkjs中自定义sql语句

    一直以为在使用thinkjs时,只能是它自带的sql语句查询,当遇到类似于这样的sql语句时,却不知道这该怎样来写程序,殊不知原来thinkjs可以执行自定义sql语句 SELECT * from a ...

随机推荐

  1. CentOS安装XRDP实现远程桌面访问

    1.配置环境: yum install gcc pam-devel openssl-devel -y 2.进入指定目录下载并解压xrdp: 先安装 wget; sudo yum -y install ...

  2. 内核参数优化/etc/sysctl.conf

    net.nf_conntrack_max = 65536000net.netfilter.nf_conntrack_tcp_timeout_established = 1200net.ipv4.tcp ...

  3. CSS 去掉IE10中type=password中的眼睛图标

    在IE10中,input[type=password],如果我们输入内容后,内容会变成圆点,这与以前一样,但后面多了一个眼睛图标,我们鼠标移过去按下会出现输入内容.有时我们想去掉这功能.IE10允许我 ...

  4. Red5点播和直播的实现

    (一)        Red5流媒体服务器介绍Red5是一个采用Java开发开源的Flash流媒体服务器.它支持:把音频(MP3)和视频(FLV)转换成播放流: 录制客户端播放流(只支持FLV):共享 ...

  5. HDU 5665 Lucky (水题)

    Lucky 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/G Description Chaos August likes to ...

  6. Rop 文件上传解决思路

    由于服务请求报文是一个文本,无法直接传送二进制的文件内容,因此必须采用某种转换机制将二进制的文件内容转换为字符串.Rop 采用如下的方式对上传文件进行编码:<fileType>@<B ...

  7. iOS应用内HTTP服务上传文件

    相信很多朋友都用过AirAV.100tv这类iOS视频播放应用中通过Wifi,从PC上输入Web地址上传文件到iOS设备上,我也一直想实现这个功能,苦于知识掌握有限,后来在其他群友的指导下参照很多大神 ...

  8. CodeForces 707C Pythagorean Triples (数论)

    题意:给定一个数n,问你其他两边,能够组成直角三角形. 析:这是一个数论题. 如果 n 是奇数,那么那两边就是 (n*n-1)/2 和 (n*n+1)/2. 如果 n 是偶数,那么那两边就是 (n/2 ...

  9. Linux下修改用户home目录

    一般在Linux上新建一个用户,会在/home目录下自动创建一个以用户名命名的home目录 修改linux下用户自动建立的家目录 vi编辑器打开/etc/default/useradd 这个文件,然后 ...

  10. Velocity中#set指令

    引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...