提交 2a00e8b7 编写于 作者: H hawky4s

ACT-1302 Add more information to HistoricActivityInstance

- Added informations for taskId and callActivityId
- Updated create/upgrade scripts
上级 35d99dea
......@@ -44,6 +44,12 @@ public interface HistoricActivityInstance {
/** Execution reference */
String getExecutionId();
/** The corresponding task in case of task activity */
String getTaskId();
/** The called process instance in case of call activity */
String getCalledProcessInstanceId();
/** Assignee in case of user task activity */
String getAssignee();
......
package org.activiti.engine.impl.history.handler;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
public class CallActivityStartHandler implements ExecutionListener {
public void notify(DelegateExecution execution) throws Exception {
}
}
......@@ -45,6 +45,8 @@ public class HistoryParseListener implements BpmnParseListener {
protected static final UserTaskAssignmentHandler USER_TASK_ASSIGNMENT_HANDLER = new UserTaskAssignmentHandler();
protected static final UserTaskIdHandler USER_TASK_ID_HANDLER = new UserTaskIdHandler();
// The history level set in the Activiti configuration
protected int historyLevel;
......@@ -92,6 +94,7 @@ public class HistoryParseListener implements BpmnParseListener {
if (activityHistoryEnabled(scope, historyLevel)) {
TaskDefinition taskDefinition = ((UserTaskActivityBehavior) activity.getActivityBehavior()).getTaskDefinition();
taskDefinition.addTaskListener(TaskListener.EVENTNAME_ASSIGNMENT, USER_TASK_ASSIGNMENT_HANDLER);
taskDefinition.addTaskListener(TaskListener.EVENTNAME_CREATE, USER_TASK_ID_HANDLER);
}
}
......
package org.activiti.engine.impl.history.handler;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.HistoricActivityInstanceEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
public class UserTaskIdHandler implements TaskListener {
public void notify(DelegateTask task) {
TaskEntity t = (TaskEntity) task;
ExecutionEntity execution = t.getExecution();
if (execution != null) {
HistoricActivityInstanceEntity historicActivityInstance = ActivityInstanceEndHandler.findActivityInstance(execution);
historicActivityInstance.setTaskId(t.getId());
}
}
}
......@@ -262,6 +262,12 @@ public class ExecutionEntity extends VariableScopeImpl implements ActivityExecut
DbSqlSession dbSqlSession = commandContext.getSession(DbSqlSession.class);
HistoricProcessInstanceEntity historicProcessInstance = new HistoricProcessInstanceEntity((ExecutionEntity) subProcessInstance);
dbSqlSession.insert(historicProcessInstance);
HistoricActivityInstanceEntity activitiyInstance = ActivityInstanceEndHandler.findActivityInstance(this);
if (activitiyInstance != null) {
activitiyInstance.setCalledProcessInstanceId(subProcessInstance.getProcessInstanceId());
}
}
return subProcessInstance;
......
......@@ -31,6 +31,8 @@ public class HistoricActivityInstanceEntity extends HistoricScopeInstanceEntity
protected String activityType;
protected String executionId;
protected String assignee;
protected String taskId;
protected String calledProcessInstanceId;
public Object getPersistentState() {
Map<String, Object> persistentState = (Map<String, Object>) new HashMap<String, Object>();
......@@ -82,4 +84,21 @@ public class HistoricActivityInstanceEntity extends HistoricScopeInstanceEntity
public void setAssignee(String assignee) {
this.assignee = assignee;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getCalledProcessInstanceId() {
return calledProcessInstanceId;
}
public void setCalledProcessInstanceId(String calledProcessInstanceId) {
this.calledProcessInstanceId = calledProcessInstanceId;
}
}
......@@ -23,6 +23,8 @@ create table ACT_HI_ACTINST (
PROC_INST_ID_ varchar(64) not null,
EXECUTION_ID_ varchar(64) not null,
ACT_ID_ varchar(255) not null,
TASK_ID_ varchar(64),
CALL_PROC_INST_ID_ varchar(64),
ACT_NAME_ varchar(255),
ACT_TYPE_ varchar(255) not null,
OWNER_ varchar(64),
......
......@@ -21,6 +21,8 @@ create table ACT_HI_ACTINST (
PROC_INST_ID_ varchar(64) not null,
EXECUTION_ID_ varchar(64) not null,
ACT_ID_ varchar(255) not null,
TASK_ID_ varchar(64),
CALL_PROC_INST_ID_ varchar(64),
ACT_NAME_ varchar(255),
ACT_TYPE_ varchar(255) not null,
ASSIGNEE_ varchar(64),
......
......@@ -21,6 +21,8 @@ create table ACT_HI_ACTINST (
PROC_INST_ID_ nvarchar(64) not null,
EXECUTION_ID_ nvarchar(64) not null,
ACT_ID_ nvarchar(255) not null,
TASK_ID_ nvarchar(64),
CALL_PROC_INST_ID_ nvarchar(64),
ACT_NAME_ nvarchar(255),
ACT_TYPE_ nvarchar(255) not null,
ASSIGNEE_ nvarchar(64),
......
......@@ -22,6 +22,8 @@ create table ACT_HI_ACTINST (
PROC_INST_ID_ varchar(64) not null,
EXECUTION_ID_ varchar(64) not null,
ACT_ID_ varchar(255) not null,
TASK_ID_ varchar(64),
CALL_PROC_INST_ID_ varchar(64),
ACT_NAME_ varchar(255),
ACT_TYPE_ varchar(255) not null,
ASSIGNEE_ varchar(64),
......
......@@ -21,6 +21,8 @@ create table ACT_HI_ACTINST (
PROC_INST_ID_ NVARCHAR2(64) not null,
EXECUTION_ID_ NVARCHAR2(64) not null,
ACT_ID_ NVARCHAR2(255) not null,
TASK_ID_ NVARCHAR2(64),
CALL_PROC_INST_ID_ NVARCHAR2(64),
ACT_NAME_ NVARCHAR2(255),
ACT_TYPE_ NVARCHAR2(255) not null,
ASSIGNEE_ NVARCHAR2(64),
......
......@@ -22,6 +22,8 @@ create table ACT_HI_ACTINST (
PROC_INST_ID_ varchar(64) not null,
EXECUTION_ID_ varchar(64) not null,
ACT_ID_ varchar(255) not null,
TASK_ID_ varchar(64),
CALL_PROC_INST_ID_ varchar(64),
ACT_NAME_ varchar(255),
ACT_TYPE_ varchar(255) not null,
ASSIGNEE_ varchar(64),
......
......@@ -27,6 +27,8 @@
PROC_INST_ID_,
EXECUTION_ID_,
ACT_ID_,
TASK_ID_,
CALL_PROC_INST_ID_,
ACT_NAME_,
ACT_TYPE_,
ASSIGNEE_,
......@@ -39,6 +41,8 @@
#{processInstanceId, jdbcType=VARCHAR},
#{executionId, jdbcType=VARCHAR},
#{activityId ,jdbcType=VARCHAR},
#{taskId ,jdbcType=VARCHAR},
#{calledProcessInstanceId ,jdbcType=VARCHAR},
#{activityName ,jdbcType=VARCHAR},
#{activityType ,jdbcType=VARCHAR},
#{assignee ,jdbcType=VARCHAR},
......@@ -73,6 +77,8 @@
<result property="processInstanceId" column="PROC_INST_ID_" jdbcType="VARCHAR" />
<result property="executionId" column="EXECUTION_ID_" jdbcType="VARCHAR" />
<result property="activityId" column="ACT_ID_" jdbcType="VARCHAR" />
<result property="taskId" column="TASK_ID_" jdbcType="VARCHAR" />
<result property="calledProcessInstanceId" column="CALL_PROC_INST_ID_" jdbcType="VARCHAR" />
<result property="activityName" column="ACT_NAME_" jdbcType="VARCHAR" />
<result property="activityType" column="ACT_TYPE_" jdbcType="VARCHAR" />
<result property="assignee" column="ASSIGNEE_" jdbcType="VARCHAR" />
......
......@@ -18,3 +18,6 @@ create table ACT_HI_PROCVARIABLE (
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_PROCVARIABLE(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
alter table ACT_HI_ACTINST
add (TASK_ID_ varchar(64), CALL_PROC_INST_ID_ varchar(64));
......@@ -17,4 +17,10 @@ create table ACT_HI_PROCVARIABLE (
);
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_PROCVARIABLE(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
\ No newline at end of file
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
alter table ACT_HI_ACTINST
add TASK_ID_ varchar(64);
alter table ACT_HI_ACTINST
add CALL_PROC_INST_ID_ varchar(64);
......@@ -17,4 +17,7 @@ create table ACT_HI_PROCVARIABLE (
);
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_PROCVARIABLE(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
\ No newline at end of file
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
alter table ACT_HI_ACTINST
add TASK_ID_ nvarchar(64), CALL_PROC_INST_ID_ nvarchar(64);
......@@ -17,4 +17,7 @@ create table ACT_HI_PROCVARIABLE (
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_PROCVARIABLE(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
\ No newline at end of file
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
alter table ACT_HI_ACTINST
add (ASK_ID_ varchar(64), CALL_PROC_INST_ID_ varchar(64));
......@@ -17,4 +17,7 @@ create table ACT_HI_PROCVARIABLE (
);
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_PROCVARIABLE(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
\ No newline at end of file
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
alter table ACT_HI_ACTINST
add (TASK_ID_ NVARCHAR2(64), CALL_PROC_INST_ID_ NVARCHAR2(64));
......@@ -17,4 +17,7 @@ create table ACT_HI_PROCVARIABLE (
);
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_PROCVARIABLE(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
\ No newline at end of file
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_PROCVARIABLE(NAME_, VAR_TYPE_);
alter table ACT_HI_ACTINST
add column TASK_ID_ varchar(64), add column CALL_PROC_INST_ID_ varchar(64);
......@@ -74,7 +74,7 @@ public class StartTimerEventTest extends PluggableActivitiTestCase {
}
// FIXME: This test likes to run in an endless loop when invoking the waitForJobExecutorOnCondition method
@Deployment
public void testCycleDateStartTimerEvent() throws Exception {
ClockUtil.setCurrentTime(new Date());
......
......@@ -13,8 +13,11 @@
package org.activiti.engine.test.history;
import java.util.List;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.ProcessInstance;
......@@ -165,7 +168,7 @@ public class HistoricActivityInstanceTest extends PluggableActivitiTestCase {
}
@Deployment
public void testHistoricActivityInstanceAssignee() {
public void testHistoricActivityInstanceProperties() {
// Start process instance
runtimeService.startProcessInstanceByKey("taskAssigneeProcess");
......@@ -175,9 +178,28 @@ public class HistoricActivityInstanceTest extends PluggableActivitiTestCase {
.activityId("theTask")
.singleResult();
Task task = taskService.createTaskQuery().singleResult();
assertEquals(task.getId(), historicActivityInstance.getTaskId());
assertEquals("kermit", historicActivityInstance.getAssignee());
}
@Deployment(resources = {
"org/activiti/engine/test/history/calledProcess.bpmn20.xml",
"org/activiti/engine/test/history/HistoricActivityInstanceTest.testCallSimpleSubProcess.bpmn20.xml"
})
public void testHistoricActivityInstanceCalledProcessId() {
runtimeService.startProcessInstanceByKey("callSimpleSubProcess");
HistoricActivityInstance historicActivityInstance = historyService
.createHistoricActivityInstanceQuery()
.activityId("callSubProcess")
.singleResult();
HistoricProcessInstance oldInstance = historyService.createHistoricProcessInstanceQuery().processDefinitionKey("calledProcess").singleResult();
assertEquals(oldInstance.getId(), historicActivityInstance.getCalledProcessInstanceId());
}
@Deployment
public void testSorting() {
runtimeService.startProcessInstanceByKey("process");
......
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="callSimpleSubProcess">
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="callSubProcess" />
<callActivity id="callSubProcess" calledElement="calledProcess" />
<sequenceFlow id="flow3" sourceRef="callSubProcess" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="definitions"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="calledProcess">
<startEvent id="theStart" />
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="task" />
<manualTask id="task" name="Task in subprocess" />
<sequenceFlow id="flow2" sourceRef="task" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册