由于才接触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. UVALive 7324 ASCII Addition (模拟)

    ASCII Addition 题目链接: http://acm.hust.edu.cn/vjudge/contest/127407#problem/A Description Nowadays, th ...

  2. jquery easyui将form表单元素的值序列化成对象

    function serializeObject(form){ var o={}; $.each(form.serializeArray(),function(index){ if(o[this['n ...

  3. python crawler0723.py

    #!/usr/env  python #-*- coding: utf-8  -*- import urllib import urllib2 import random import request ...

  4. 绑定线程到特定CPU处理器

    参考这篇文章 http://blog.chinaunix.net/uid-27761170-id-5050258.html 代码如下: #define _GNU_SOURCE #include < ...

  5. 插入三层treeview代码

    #region treetView加载 private void treeViewLoad() { DataView dv = navds.tbSiteKind.AsDataView(); treeV ...

  6. struts validate

    1  login.jsp方式1 <%@ page language="java" import="java.util.*" pageEncoding=&q ...

  7. MVC 中WebViewPage的运用

    MVC在View的最后处理中是将View的文件页面编译成一个类,这个类必须继承自WebViewPage,WebViewPage默认添加对AjaxHelper和HtmlHelper的支持 public ...

  8. CDOJ 481 Apparent Magnitude 水题

    Apparent Magnitude Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/sh ...

  9. 2013年中国区Skyline软件价格体系

    < 2013年中国区Skyline软件价格体系                         序号 产品名称 描述 市场报价         1 TerraExplorer Pro 5.1 对 ...

  10. HoloGraphLibrary

    https://github.com/Androguide/HoloGraphLibrary HoloGraphLibrary-master.zip