)activiti的历史任务是单独的表来储存,表之间没有任何外间关联,从以上模型就可以看出 1、ACT_HI_ACTINST 流程活动历史记录信息 2、ACT_HI_ATTACHMENT 3、ACT_HI_COMMENT 流程评论信息 4、ACT_HI_DETAIL 流程明细信息 5、ACT_HI_IDENTITYLINK 流程身份关系信息 6、ACT_HI_PROCINST 流程历史信息 7、ACT_HI_TASKINST 任务历史信息 8、ACT_HI_VARINST 历史流程中的参数 2)historyService可查询历史数据表(可查询以上这些表,与流程历史相关数据的查询都可以通过<span style="font-family: Arial, Helvetica, sans-serif;">historyService来查询</span>) 1、historyService.createHistoricActivityInstanceQuery(); //查询ACT_HI_ACTINST表 2、historyService.createHistoricDetailQuery(); //查询ACT_HI_DETAIL表 3、historyService.createHistoricProcessInstanceQuery(); //查询ACT_HI_PROCINST表 4、historyService.createHistoricTaskInstanceQuery(); //查询ACT_HI_TASKINST表 5、historyService.createHistoricVariableInstanceQuery(); //查询ACT_HI_VARINST表
activiti其中数据的查询和判断都是类似的!在这里就不过多介绍了。
下面是actviti中mybatis的映射配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="lazyLoadingEnabled" value="false" /> </settings> <typeAliases> <typeAlias type="org.activiti.engine.impl.persistence.ByteArrayRefTypeHandler" alias="ByteArrayRefTypeHandler"/> </typeAliases> <typeHandlers> <typeHandler handler="ByteArrayRefTypeHandler" javaType="org.activiti.engine.impl.persistence.entity.ByteArrayRef" jdbcType="VARCHAR"/> </typeHandlers> <mappers> <mapper resource="org/activiti/db/mapping/entity/Attachment.xml" /> <mapper resource="org/activiti/db/mapping/entity/ByteArray.xml" /> <mapper resource="org/activiti/db/mapping/entity/Comment.xml" /> <mapper resource="org/activiti/db/mapping/entity/Deployment.xml" /> <mapper resource="org/activiti/db/mapping/entity/Execution.xml" /> <mapper resource="org/activiti/db/mapping/entity/Group.xml" /> <mapper resource="org/activiti/db/mapping/entity/HistoricActivityInstance.xml" /> <mapper resource="org/activiti/db/mapping/entity/HistoricDetail.xml" /> <mapper resource="org/activiti/db/mapping/entity/HistoricProcessInstance.xml" /> <mapper resource="org/activiti/db/mapping/entity/HistoricVariableInstance.xml" /> <mapper resource="org/activiti/db/mapping/entity/HistoricTaskInstance.xml" /> <mapper resource="org/activiti/db/mapping/entity/HistoricIdentityLink.xml" /> <mapper resource="org/activiti/db/mapping/entity/IdentityInfo.xml" /> <mapper resource="org/activiti/db/mapping/entity/IdentityLink.xml" /> <mapper resource="org/activiti/db/mapping/entity/Job.xml" /> <mapper resource="org/activiti/db/mapping/entity/Membership.xml" /> <mapper resource="org/activiti/db/mapping/entity/Model.xml" /> <mapper resource="org/activiti/db/mapping/entity/ProcessDefinition.xml" /> <mapper resource="org/activiti/db/mapping/entity/Property.xml" /> <mapper resource="org/activiti/db/mapping/entity/Resource.xml" /> <mapper resource="org/activiti/db/mapping/entity/TableData.xml" /> <mapper resource="org/activiti/db/mapping/entity/Task.xml" /> <mapper resource="org/activiti/db/mapping/entity/User.xml" /> <mapper resource="org/activiti/db/mapping/entity/VariableInstance.xml" /> <mapper resource="org/activiti/db/mapping/entity/EventSubscription.xml" /> </mappers> </configuration>
下面是就那其中一个映射配置来说明,如HistoricProcessInstance.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!-- ~ Licensed under the Apache License, Version 2.0 (the "License"); ~ you may not use this file except in compliance with the License. ~ You may obtain a copy of the License at ~ ~ http://www.apache.org/licenses/LICENSE-2.0 ~ ~ Unless required by applicable law or agreed to in writing, software ~ distributed under the License is distributed on an "AS IS" BASIS, ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ~ See the License for the specific language governing permissions and ~ limitations under the License. --> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity"> <!-- HISTORIC TASK INSTANCE INSERT --> <insert id="insertHistoricTaskInstance" parameterType="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity"> insert into ${prefix}ACT_HI_TASKINST ( ID_, PROC_DEF_ID_, PROC_INST_ID_, EXECUTION_ID_, NAME_, PARENT_TASK_ID_, DESCRIPTION_, OWNER_, ASSIGNEE_, START_TIME_, CLAIM_TIME_, END_TIME_, DURATION_, DELETE_REASON_, TASK_DEF_KEY_, FORM_KEY_, PRIORITY_, DUE_DATE_, CATEGORY_, TENANT_ID_ ) values ( #{id ,jdbcType=VARCHAR}, #{processDefinitionId, jdbcType=VARCHAR}, #{processInstanceId, jdbcType=VARCHAR}, #{executionId, jdbcType=VARCHAR}, #{name ,jdbcType=VARCHAR}, #{parentTaskId ,jdbcType=VARCHAR}, #{description ,jdbcType=VARCHAR}, #{owner ,jdbcType=VARCHAR}, #{assignee ,jdbcType=VARCHAR}, #{startTime, jdbcType=TIMESTAMP}, #{claimTime, jdbcType=TIMESTAMP}, #{endTime, jdbcType=TIMESTAMP}, #{durationInMillis ,jdbcType=BIGINT}, #{deleteReason ,jdbcType=VARCHAR}, #{taskDefinitionKey ,jdbcType=VARCHAR}, #{formKey ,jdbcType=VARCHAR}, #{priority, jdbcType=INTEGER}, #{dueDate, jdbcType=TIMESTAMP}, #{category, jdbcType=VARCHAR}, #{tenantId, jdbcType=VARCHAR} ) </insert> <!-- HISTORIC TASK INSTANCE UPDATE --> <update id="updateHistoricTaskInstance" parameterType="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity"> update ${prefix}ACT_HI_TASKINST set EXECUTION_ID_ = #{executionId, jdbcType=VARCHAR}, NAME_ = #{name, jdbcType=VARCHAR}, PARENT_TASK_ID_ = #{parentTaskId, jdbcType=VARCHAR}, DESCRIPTION_ = #{description, jdbcType=VARCHAR}, OWNER_ = #{owner, jdbcType=VARCHAR}, ASSIGNEE_ = #{assignee, jdbcType=VARCHAR}, CLAIM_TIME_ = #{claimTime, jdbcType=TIMESTAMP}, END_TIME_ = #{endTime, jdbcType=TIMESTAMP}, DURATION_ = #{durationInMillis ,jdbcType=BIGINT}, DELETE_REASON_ = #{deleteReason ,jdbcType=VARCHAR}, TASK_DEF_KEY_ = #{taskDefinitionKey ,jdbcType=VARCHAR}, FORM_KEY_ = #{formKey ,jdbcType=VARCHAR}, PRIORITY_ = #{priority, jdbcType=INTEGER}, DUE_DATE_ = #{dueDate, jdbcType=TIMESTAMP}, CATEGORY_ = #{category, jdbcType=VARCHAR} where ID_ = #{id} </update> <!-- HISTORIC TASK INSTANCE DELETE --> <delete id="deleteHistoricTaskInstance" parameterType="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity"> delete from ${prefix}ACT_HI_TASKINST where ID_ = #{id} </delete> <!-- HISTORIC TASK INSTANCE RESULT MAP --> <resultMap id="historicTaskInstanceResultMap" type="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity"> <id property="id" column="ID_" jdbcType="VARCHAR" /> <result property="processDefinitionId" column="PROC_DEF_ID_" jdbcType="VARCHAR" /> <result property="processInstanceId" column="PROC_INST_ID_" jdbcType="VARCHAR" /> <result property="executionId" column="EXECUTION_ID_" jdbcType="VARCHAR" /> <result property="name" column="NAME_" jdbcType="VARCHAR" /> <result property="parentTaskId" column="PARENT_TASK_ID_" jdbcType="VARCHAR" /> <result property="description" column="DESCRIPTION_" jdbcType="VARCHAR" /> <result property="owner" column="OWNER_" jdbcType="VARCHAR" /> <result property="assignee" column="ASSIGNEE_" jdbcType="VARCHAR" /> <result property="startTime" column="START_TIME_" jdbcType="TIMESTAMP" /> <result property="claimTime" column="CLAIM_TIME_" jdbcType="TIMESTAMP" /> <result property="endTime" column="END_TIME_" jdbcType="TIMESTAMP" /> <result property="durationInMillis" column="DURATION_" jdbcType="BIGINT" /> <result property="deleteReason" column="DELETE_REASON_" jdbcType="VARCHAR" /> <result property="taskDefinitionKey" column="TASK_DEF_KEY_" jdbcType="VARCHAR" /> <result property="formKey" column="FORM_KEY_" jdbcType="VARCHAR" /> <result property="priority" column="PRIORITY_" jdbcType="INTEGER" /> <result property="dueDate" column="DUE_DATE_" jdbcType="TIMESTAMP" /> <result property="category" column="CATEGORY_" jdbcType="VARCHAR" /> <result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR" /> </resultMap> <resultMap id="historicTaskInstanceAndVariablesResultMap" type="org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity"> <id property="id" column="ID_" jdbcType="VARCHAR" /> <result property="processDefinitionId" column="PROC_DEF_ID_" jdbcType="VARCHAR" /> <result property="processInstanceId" column="PROC_INST_ID_" jdbcType="VARCHAR" /> <result property="executionId" column="EXECUTION_ID_" jdbcType="VARCHAR" /> <result property="name" column="NAME_" jdbcType="VARCHAR" /> <result property="parentTaskId" column="PARENT_TASK_ID_" jdbcType="VARCHAR" /> <result property="description" column="DESCRIPTION_" jdbcType="VARCHAR" /> <result property="owner" column="OWNER_" jdbcType="VARCHAR" /> <result property="assignee" column="ASSIGNEE_" jdbcType="VARCHAR" /> <result property="startTime" column="START_TIME_" jdbcType="TIMESTAMP" /> <result property="claimTime" column="CLAIM_TIME_" jdbcType="TIMESTAMP" /> <result property="endTime" column="END_TIME_" jdbcType="TIMESTAMP" /> <result property="durationInMillis" column="DURATION_" jdbcType="BIGINT" /> <result property="deleteReason" column="DELETE_REASON_" jdbcType="VARCHAR" /> <result property="taskDefinitionKey" column="TASK_DEF_KEY_" jdbcType="VARCHAR" /> <result property="formKey" column="FORM_KEY_" jdbcType="VARCHAR" /> <result property="priority" column="PRIORITY_" jdbcType="INTEGER" /> <result property="dueDate" column="DUE_DATE_" jdbcType="TIMESTAMP" /> <result property="category" column="CATEGORY_" jdbcType="VARCHAR" /> <result property="tenantId" column="TENANT_ID_" jdbcType="VARCHAR" /> <collection property="queryVariables" column="TASK_ID_" javaType="ArrayList" ofType="org.activiti.engine.impl.persistence.entity.HistoricVariableInstanceEntity"> <id property="id" column="VAR_ID_"/> <result property="name" column="VAR_NAME_" javaType="String" jdbcType="VARCHAR" /> <result property="variableType" column="VAR_TYPE_" javaType="org.activiti.engine.impl.variable.VariableType" jdbcType="VARCHAR" /> <result property="revision" column="VAR_REV_" jdbcType="INTEGER" /> <result property="processInstanceId" column="VAR_PROC_INST_ID_" jdbcType="VARCHAR" /> <result property="executionId" column="VAR_EXECUTION_ID_" jdbcType="VARCHAR" /> <result property="taskId" column="VAR_TASK_ID_" jdbcType="VARCHAR" /> <result property="byteArrayRef" column="VAR_BYTEARRAY_ID_" typeHandler="ByteArrayRefTypeHandler"/> <result property="doubleValue" column="VAR_DOUBLE_" jdbcType="DOUBLE" /> <result property="textValue" column="VAR_TEXT_" jdbcType="VARCHAR" /> <result property="textValue2" column="VAR_TEXT2_" jdbcType="VARCHAR" /> <result property="longValue" column="VAR_LONG_" jdbcType="BIGINT" /> </collection> </resultMap> <!-- HISTORIC TASK INSTANCE SELECT --> <select id="selectHistoricTaskInstance" resultMap="historicTaskInstanceResultMap"> select * from ${prefix}ACT_HI_TASKINST where ID_ = #{historicTaskInstanceId} </select> <select id="selectHistoricTaskInstanceIdsByProcessInstanceId" resultType="string" parameterType="org.activiti.engine.impl.db.ListQueryParameterObject" > select ID_ from ${prefix}ACT_HI_TASKINST where PROC_INST_ID_ = #{parameter} </select> <select id="selectHistoricTaskInstancesByQueryCriteria" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultMap="historicTaskInstanceResultMap"> ${limitBefore} select distinct RES.* ${limitBetween} <include refid="selectHistoricTaskInstancesByQueryCriteriaSql"/> ${orderBy} ${limitAfter} </select> <select id="selectHistoricTaskInstanceCountByQueryCriteria" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultType="long"> select count(RES.ID_) <include refid="selectHistoricTaskInstancesByQueryCriteriaSql"/> </select> <sql id="selectHistoricTaskInstancesByQueryCriteriaSql"> from ${prefix}ACT_HI_TASKINST RES <include refid="commonSelectHistoricTaskInstancesByQueryCriteriaSql"/> </sql> <select id="selectHistoricTaskInstancesWithVariablesByQueryCriteria" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultMap="historicTaskInstanceAndVariablesResultMap"> ${limitBefore} select distinct RES.*, VAR.ID_ as VAR_ID_, VAR.NAME_ as VAR_NAME_, VAR.VAR_TYPE_ as VAR_TYPE_, VAR.REV_ as VAR_REV_, VAR.PROC_INST_ID_ as VAR_PROC_INST_ID_, VAR.EXECUTION_ID_ as VAR_EXECUTION_ID_, VAR.TASK_ID_ as VAR_TASK_ID_, VAR.BYTEARRAY_ID_ as VAR_BYTEARRAY_ID_, VAR.DOUBLE_ as VAR_DOUBLE_, VAR.TEXT_ as VAR_TEXT_, VAR.TEXT2_ as VAR_TEXT2_, VAR.LAST_UPDATED_TIME_ as VAR_LAST_UPDATED_TIME_, VAR.LONG_ as VAR_LONG_ ${limitBetween} <include refid="selectHistoricTaskInstancesWithVariablesByQueryCriteriaSql"/> ${orderBy} ${limitAfter} </select> <select id="selectHistoricTaskInstancesWithVariablesByQueryCriteria_mssql_or_db2" parameterType="org.activiti.engine.impl.HistoricTaskInstanceQueryImpl" resultMap="historicTaskInstanceAndVariablesResultMap"> ${limitBefore} select distinct TEMPRES_ID_ as ID_, TEMPRES_PROC_DEF_ID_ as PROC_DEF_ID_, TEMPRES_PROC_INST_ID_ as PROC_INST_ID_, TEMPRES_EXECUTION_ID_ as EXECUTION_ID_, TEMPRES_NAME_ as NAME_, TEMPRES_PARENT_TASK_ID_ as PARENT_TASK_ID_, TEMPRES_DESCRIPTION_ as DESCRIPTION_, TEMPRES_OWNER_ as OWNER_, TEMPRES_ASSIGNEE_ as ASSIGNEE_, TEMPRES_START_TIME_ as START_TIME_, TEMPRES_CLAIM_TIME_ as CLAIM_TIME_, TEMPRES_END_TIME_ as END_TIME_, TEMPRES_DURATION_ as DURATION_, TEMPRES_TASK_DEF_KEY_ as TASK_DEF_KEY_, TEMPRES_FORM_KEY_ as FORM_KEY_, TEMPRES_PRIORITY_ as PRIORITY_, TEMPRES_DUE_DATE_ as DUE_DATE_, TEMPRES_DELETE_REASON_ as DELETE_REASON_, TEMPVAR_ID_ as VAR_ID_, TEMPVAR_NAME_ as VAR_NAME_, TEMPVAR_TYPE_ as VAR_TYPE_, TEMPVAR_REV_ as VAR_REV_, TEMPVAR_PROC_INST_ID_ as VAR_PROC_INST_ID_, TEMPVAR_EXECUTION_ID_ as VAR_EXECUTION_ID_, TEMPVAR_TASK_ID_ as VAR_TASK_ID_, TEMPVAR_BYTEARRAY_ID_ as VAR_BYTEARRAY_ID_, TEMPVAR_DOUBLE_ as VAR_DOUBLE_, TEMPVAR_TEXT_ as VAR_TEXT_, TEMPVAR_LAST_UPDATED_TIME_ as VAR_LAST_UPDATED_TIME_, TEMPVAR_TEXT2_ as VAR_TEXT2_, TEMPVAR_LONG_ as VAR_LONG_ ${limitOuterJoinBetween} RES.ID_ as TEMPRES_ID_, RES.PROC_DEF_ID_ as TEMPRES_PROC_DEF_ID_, RES.PROC_INST_ID_ as TEMPRES_PROC_INST_ID_, RES.EXECUTION_ID_ as TEMPRES_EXECUTION_ID_, RES.NAME_ as TEMPRES_NAME_ , RES.PARENT_TASK_ID_ as TEMPRES_PARENT_TASK_ID_, RES.DESCRIPTION_ as TEMPRES_DESCRIPTION_, RES.OWNER_ as TEMPRES_OWNER_, RES.ASSIGNEE_ as TEMPRES_ASSIGNEE_, RES.START_TIME_ as TEMPRES_START_TIME_, RES.END_TIME_ as TEMPRES_END_TIME_, RES.CLAIM_TIME_ as TEMPRES_CLAIM_TIME_, RES.DURATION_ as TEMPRES_DURATION_, RES.TASK_DEF_KEY_ as TEMPRES_TASK_DEF_KEY_, RES.FORM_KEY_ as TEMPRES_FORM_KEY_, RES.PRIORITY_ as TEMPRES_PRIORITY_, RES.DUE_DATE_ as TEMPRES_DUE_DATE_, RES.DELETE_REASON_ as TEMPRES_DELETE_REASON_, VAR.ID_ as TEMPVAR_ID_, VAR.NAME_ as TEMPVAR_NAME_, VAR.VAR_TYPE_ as TEMPVAR_TYPE_, VAR.REV_ as TEMPVAR_REV_, VAR.PROC_INST_ID_ as TEMPVAR_PROC_INST_ID_, VAR.EXECUTION_ID_ as TEMPVAR_EXECUTION_ID_, VAR.TASK_ID_ as TEMPVAR_TASK_ID_, VAR.BYTEARRAY_ID_ as TEMPVAR_BYTEARRAY_ID_, VAR.DOUBLE_ as TEMPVAR_DOUBLE_, VAR.TEXT_ as TEMPVAR_TEXT_, VAR.TEXT2_ as TEMPVAR_TEXT2_, VAR.LAST_UPDATED_TIME_ as TEMPVAR_LAST_UPDATED_TIME_, VAR.LONG_ as TEMPVAR_LONG_ <include refid="selectHistoricTaskInstancesWithVariablesByQueryCriteriaSql"/> ${orderBy} ${limitAfter} </select> <sql id="selectHistoricTaskInstancesWithVariablesByQueryCriteriaSql"> from ${prefix}ACT_HI_TASKINST RES <choose> <when test="includeTaskLocalVariables && includeProcessVariables"> left outer join ${prefix}ACT_HI_VARINST VAR ON RES.ID_ = VAR.TASK_ID_ or RES.PROC_INST_ID_ = VAR.EXECUTION_ID_ </when> <otherwise> <if test="includeTaskLocalVariables"> left outer join ${prefix}ACT_HI_VARINST VAR ON RES.ID_ = VAR.TASK_ID_ </if> <if test="includeProcessVariables"> left outer join ${prefix}ACT_HI_VARINST VAR ON RES.PROC_INST_ID_ = VAR.EXECUTION_ID_ and VAR.TASK_ID_ is null </if> </otherwise> </choose> <include refid="commonSelectHistoricTaskInstancesByQueryCriteriaSql"/> </sql> <sql id="commonSelectHistoricTaskInstancesByQueryCriteriaSql"> <if test="candidateUser != null || candidateGroups != null"> inner join ${prefix}ACT_HI_IDENTITYLINK HI on HI.TASK_ID_ = RES.ID_ </if> <if test="processFinished || processUnfinished || processInstanceBusinessKey != null || processInstanceBusinessKeyLike != null"> inner join ${prefix}ACT_HI_PROCINST HPI ON RES.PROC_INST_ID_ = HPI.ID_ </if> <if test="processDefinitionKey != null || processDefinitionKeyLike != null || processDefinitionName != null || processDefinitionNameLike != null"> inner join ${prefix}ACT_RE_PROCDEF D on RES.PROC_DEF_ID_ = D.ID_ </if> <foreach collection="queryVariableValues" index="index" item="var"> <choose> <when test="var.local"> inner join ${prefix}ACT_HI_VARINST A${index} on RES.ID_ = A${index}.TASK_ID_ </when> <otherwise> inner join ${prefix}ACT_HI_VARINST A${index} on RES.PROC_INST_ID_ = A${index}.PROC_INST_ID_ </otherwise> </choose> </foreach> <where> <if test="taskId != null"> RES.ID_ = #{taskId} </if> <if test="processDefinitionId != null"> and RES.PROC_DEF_ID_ = #{processDefinitionId} </if> <if test="processDefinitionKey != null"> and D.KEY_ = #{processDefinitionKey} </if> <if test="processDefinitionKeyLike != null"> and D.KEY_ like #{processDefinitionKeyLike} </if> <if test="processDefinitionName != null"> and D.NAME_ = #{processDefinitionName} </if> <if test="processDefinitionNameLike != null"> and D.NAME_ like #{processDefinitionNameLike} </if> <if test="processInstanceId != null"> and RES.PROC_INST_ID_ = #{processInstanceId} </if> <if test="processInstanceBusinessKey != null"> and HPI.BUSINESS_KEY_ = #{processInstanceBusinessKey} </if> <if test="processInstanceBusinessKeyLike != null"> and HPI.BUSINESS_KEY_ like #{processInstanceBusinessKeyLike} </if> <if test="taskDefinitionKey != null"> and RES.TASK_DEF_KEY_ = #{taskDefinitionKey} </if> <if test="taskDefinitionKeyLike != null"> and RES.TASK_DEF_KEY_ like #{taskDefinitionKeyLike} </if> <if test="executionId != null"> and RES.EXECUTION_ID_ = #{executionId} </if> <if test="taskName != null"> and RES.NAME_ = #{taskName} </if> <if test="taskNameLike != null"> and RES.NAME_ like #{taskNameLike} </if> <if test="taskParentTaskId != null"> and RES.PARENT_TASK_ID_ = #{taskParentTaskId} </if> <if test="taskDescription != null"> and RES.DESCRIPTION_ = #{taskDescription} </if> <if test="taskDescriptionLike != null"> and RES.DESCRIPTION_ like #{taskDescriptionLike} </if> <if test="taskDeleteReason != null"> and RES.DELETE_REASON_ = #{taskDeleteReason} </if> <if test="taskDeleteReasonLike != null"> and RES.DELETE_REASON_ like #{taskDeleteReasonLike} </if> <if test="taskOwner != null"> and RES.OWNER_ = #{taskOwner} </if> <if test="taskOwnerLike != null"> and RES.OWNER_ like #{taskOwnerLike} </if> <if test="taskAssignee != null"> and RES.ASSIGNEE_ = #{taskAssignee} </if> <if test="taskAssigneeLike != null"> and RES.ASSIGNEE_ like #{taskAssigneeLike} </if> <if test="taskPriority != null"> and RES.PRIORITY_ = #{taskPriority} </if> <if test="taskMinPriority != null"> and RES.PRIORITY_ >= #{taskMinPriority} </if> <if test="taskMaxPriority != null"> and RES.PRIORITY_ <= #{taskMaxPriority} </if> <if test="unfinished"> and RES.END_TIME_ is null </if> <if test="finished"> and RES.END_TIME_ is not null </if> <if test="processFinished"> and HPI.END_TIME_ is not null </if> <if test="processUnfinished"> and HPI.END_TIME_ is null </if> <if test="dueDate != null"> and RES.DUE_DATE_ = #{dueDate} </if> <if test="dueBefore != null"> and RES.DUE_DATE_ < #{dueBefore} </if> <if test="dueAfter != null"> and RES.DUE_DATE_ > #{dueAfter} </if> <if test="withoutDueDate"> and RES.DUE_DATE_ is null </if> <if test="creationDate != null"> and RES.START_TIME_ = #{creationDate} </if> <if test="creationBeforeDate != null"> and RES.START_TIME_ < #{creationBeforeDate} </if> <if test="creationAfterDate != null"> and RES.START_TIME_ > #{creationAfterDate} </if> <if test="completedDate != null"> and RES.END_TIME_ = #{completedDate} </if> <if test="completedBeforeDate != null"> and RES.END_TIME_ < #{completedBeforeDate} </if> <if test="completedAfterDate != null"> and RES.END_TIME_ > #{completedAfterDate} </if> <if test="category != null"> and RES.CATEGORY_ = #{category} </if> <if test="tenantId != null"> and RES.TENANT_ID_ = #{tenantId} </if> <if test="tenantIdLike != null"> and RES.TENANT_ID_ like #{tenantIdLike} </if> <if test="withoutTenantId"> and (RES.TENANT_ID_ = ‘‘ or RES.TENANT_ID_ is null) </if> <if test="candidateUser != null || candidateGroups != null"> and RES.ASSIGNEE_ is null and HI.TYPE_ = ‘candidate‘ and ( <if test="candidateUser != null"> HI.USER_ID_ = #{candidateUser} </if> <if test="candidateUser != null && candidateGroups != null && candidateGroups.size() > 0"> or </if> <if test="candidateGroups != null && candidateGroups.size() > 0"> HI.GROUP_ID_ IN <foreach item="group" index="index" collection="candidateGroups" open="(" separator="," close=")"> #{group} </foreach> </if> ) </if> <if test="involvedUser != null"> and ( exists(select LINK.USER_ID_ from ${prefix}ACT_HI_IDENTITYLINK LINK where USER_ID_ = #{involvedUser} and LINK.TASK_ID_ = RES.ID_) or RES.ASSIGNEE_ = #{involvedUser} or RES.OWNER_ = #{involvedUser} ) </if> <foreach item="queryVar" collection="queryVariableValues" index="index"> <if test="!queryVar.local"> <!-- When process instance variable is queried for, taskId should be null --> and A${index}.TASK_ID_ is null </if> <if test="queryVar.name != null"> <!-- Match-all variable-names when name is null --> and A${index}.NAME_= #{queryVar.name} </if> <if test="!queryVar.type.equals(‘null‘)"> and A${index}.VAR_TYPE_ = #{queryVar.type} </if> <!-- Variable value --> <if test="queryVar.textValue != null && queryVar.longValue == null && queryVar.doubleValue == null"> <choose> <when test="queryVar.operator.equals(‘EQUALS_IGNORE_CASE‘) || queryVar.operator.equals(‘NOT_EQUALS_IGNORE_CASE‘)"> and lower(A${index}.TEXT_) </when> <otherwise> and A${index}.TEXT_ </otherwise> </choose> <choose> <when test="queryVar.operator.equals(‘LIKE‘)">LIKE</when> <otherwise><include refid="executionVariableOperator" /></otherwise> </choose> #{queryVar.textValue} </if> <if test="queryVar.textValue2 != null"> and A${index}.TEXT2_ <choose> <when test="queryVar.operator.equals(‘LIKE‘)">LIKE</when> <otherwise><include refid="executionVariableOperator" /></otherwise> </choose> #{queryVar.textValue2} </if> <if test="queryVar.longValue != null"> and A${index}.LONG_ <include refid="executionVariableOperator" /> #{queryVar.longValue} </if> <if test="queryVar.doubleValue != null"> and A${index}.DOUBLE_ <include refid="executionVariableOperator" /> #{queryVar.doubleValue} </if> <!-- Null variable type --> <if test="queryVar.textValue == null && queryVar.textValue2 == null && queryVar.longValue == null && queryVar.doubleValue == null"> <choose> <when test="queryVar.operator.equals(‘NOT_EQUALS‘)"> and (A${index}.TEXT_ is not null or A${index}.TEXT2_ is not null or A${index}.LONG_ is not null or A${index}.DOUBLE_ is not null or A${index}.BYTEARRAY_ID_ is not null) </when> <otherwise> and A${index}.TEXT_ is null and A${index}.TEXT2_ is null and A${index}.LONG_ is null and A${index}.DOUBLE_ is null and A${index}.BYTEARRAY_ID_ is null </otherwise> </choose> </if> </foreach> </where> </sql> <sql id="executionVariableOperator"> <choose> <when test="queryVar.operator.equals(‘EQUALS‘)">=</when> <when test="queryVar.operator.equals(‘EQUALS_IGNORE_CASE‘)">=</when> <when test="queryVar.operator.equals(‘NOT_EQUALS‘)"><></when> <when test="queryVar.operator.equals(‘NOT_EQUALS_IGNORE_CASE‘)"><></when> <when test="queryVar.operator.equals(‘GREATER_THAN‘)">></when> <when test="queryVar.operator.equals(‘GREATER_THAN_OR_EQUAL‘)">>=</when> <when test="queryVar.operator.equals(‘LESS_THAN‘)"><</when> <when test="queryVar.operator.equals(‘LESS_THAN_OR_EQUAL‘)"><=</when> </choose> </sql> <select id="selectHistoricTaskInstanceByNativeQuery" parameterType="java.util.Map" resultMap="historicTaskInstanceResultMap"> <if test="resultType == ‘LIST_PAGE‘"> ${limitBefore} </if> ${sql} <if test="resultType == ‘LIST_PAGE‘"> ${limitAfter} </if> </select> <select id="selectHistoricTaskInstanceByNativeQuery_mssql_or_db2" parameterType="java.util.Map" resultMap="historicTaskInstanceResultMap"> <if test="resultType == ‘LIST_PAGE‘"> ${limitBeforeNativeQuery} </if> ${sql} <if test="resultType == ‘LIST_PAGE‘"> ${limitAfter} </if> </select> <select id="selectHistoricTaskInstanceCountByNativeQuery" parameterType="java.util.Map" resultType="long"> ${sql} </select> </mapper>
看了这些,如果你觉得你对activiti的底层有足够的了解,你可以完全重写或者扩展actviti中的service API。activiti就是通过这些sql映射配置来完成数据查询,当然如果你在使用过程中如果发现其中一些sql查询效率很低的话,大伙可以由针对的进行修改达到自己的要求。 现在网络上一些关于activiti也有类似的问题出现。大伙使用过程相信也会遇到。在这里就这样抛砖引玉,希望对初学的你有所帮助.......
http://blog.csdn.net/romantichjwhjwhjw/article/details/40650671
activiti数据库表结构全貌解析
标签:
小编还为您整理了以下内容,可能对您也有帮助:
工作流Activiti表说明
Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配
用来保存部署文件的大文本数据。
保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。
属性数据表。存储这个流程引擎级别的数据。
历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,taskinst只记录usertask内容。
附件信息
历史审批意见表
历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
任务参与者数据表。主要存储历史节点参与者的信息。
历史流程实例信息
历史任务流程实例信息
历史变量信息
用户组表,用来存储用户组信息。
用户扩展信息表。
用来保存用户的分组信息
用户信息表
部署信息表, 用来存储部署时需要持久化保存下来的信息
流程设计模型表,创建流程的设计模型时,保存在该数据表中。
流程解析表,解析成功了,在该表保存一条记录。业务流程定义数据表
运行时事件
运行时流程执行实例,我的代办任务查询表
身份联系,主要存储当前节点参与者的信息,任务参与者数据表。
运行时定时任务数据表
运行时任务数据表
运行时流程变量数据表
工作流Activiti表说明
Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。并且表名的第二部分用两个字母表明表的用例,而这个用例也基本上跟Service API匹配
用来保存部署文件的大文本数据。
保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。
属性数据表。存储这个流程引擎级别的数据。
历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,taskinst只记录usertask内容。
附件信息
历史审批意见表
历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
任务参与者数据表。主要存储历史节点参与者的信息。
历史流程实例信息
历史任务流程实例信息
历史变量信息
用户组表,用来存储用户组信息。
用户扩展信息表。
用来保存用户的分组信息
用户信息表
部署信息表, 用来存储部署时需要持久化保存下来的信息
流程设计模型表,创建流程的设计模型时,保存在该数据表中。
流程解析表,解析成功了,在该表保存一条记录。业务流程定义数据表
运行时事件
运行时流程执行实例,我的代办任务查询表
身份联系,主要存储当前节点参与者的信息,任务参与者数据表。
运行时定时任务数据表
运行时任务数据表
运行时流程变量数据表
java activiti
java activiti是什么,让我们一起了解一下?
Activiti项目是一项新的基于Apache许可的开源BPM平台,覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架,特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务。
Activiti执行的前期支持是什么?
1、首先我们要知道ProcessEngine对象,是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
2、然后是Activiti数据库支持:
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
那么java中如何执行activiti?
说明:自定义一个简单流程,然后在main中直接通过控制台输入信息然后控制流程。
1、创建一个maven项目 引入依赖:pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 1.5.10.RELEASE com.jy.activiti activiti6-helloworld 1.0-SNAPSHOT org.springframework.boot spring-boot-starter org.activiti activiti-engine 6.0.0 junit junit 4.11 test ch.qos.logback logback-classic 1.1.11 com.google.guava guava 23.0 com.h2database h2 1.3.176 org.springframework.boot spring-boot-maven-plugin
activiti怎么设置一下个节点的办理人??
1、首先maven导入基础依赖包的配置。
2、activiti主配置文件activiti.cfg.xml连接数据库创建引擎的配置。
3、java测试代码。
4、项目结构如下图。
5、最后启动测试代码后数据库表如下图,就完成了。
注意事项:
Activiti将提供宽松的Apache许可2.0,以便这个项目可以广泛被使用,同时促进Activiti BPM引擎和BPMN 2.0的匹配,该项目现正由OMG通过标准审定。