提交 3ca3141b 编写于 作者: T tombaeyens

ACT-329 Also enabled HistoricProcessInstance.startActivityId and endActivityId...

ACT-329 Also enabled HistoricProcessInstance.startActivityId and endActivityId on plain startProcessInstance (previously it was only on submitStartForm)
上级 a1566524
......@@ -16,7 +16,6 @@ package org.activiti.engine.history;
import java.util.Date;
import org.activiti.engine.FormService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.runtime.ProcessInstance;
......@@ -47,10 +46,10 @@ public interface HistoricProcessInstance {
/** Reference to the activity in which this process instance ended. */
String getEndActivityId();
/** The authenticated user when a form was submitted with {@link FormService#submitStartFormData(String, java.util.Map)}.
/** The authenticated user that started this process instance.
* @see IdentityService#setAuthenticatedUserId(String) */
String getStartFormUserId();
String getStartUserId();
/** The start activity used when submitting the start form. */
String getStartFormActivityId();
/** The start activity. */
String getStartActivityId();
}
......@@ -58,11 +58,6 @@ public class SubmitStartFormCmd implements Command<ProcessInstance> {
DbSqlSession dbSqlSession = commandContext.getSession(DbSqlSession.class);
if (historyLevel>=ProcessEngineConfiguration.HISTORYLEVEL_AUDIT) {
String authenticatedUserId = Authentication.getAuthenticatedUserId();
HistoricProcessInstanceEntity historicProcessInstance = dbSqlSession.selectById(HistoricProcessInstanceEntity.class, processInstance.getId());
historicProcessInstance.setStartFormUserId(authenticatedUserId);
historicProcessInstance.setStartFormActivityId(processInstance.getActivityId());
for (String propertyId: properties.keySet()) {
String propertyValue = properties.get(propertyId);
HistoricFormPropertyEntity historicFormProperty = new HistoricFormPropertyEntity(processInstance, propertyId, propertyValue);
......
......@@ -17,6 +17,7 @@ package org.activiti.engine.impl.history;
import java.util.Map;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.impl.runtime.ExecutionEntity;
import org.activiti.engine.impl.util.ClockUtil;
......@@ -28,8 +29,8 @@ public class HistoricProcessInstanceEntity extends HistoricScopeInstanceEntity i
protected String endActivityId;
protected String businessKey;
protected String startFormUserId;
protected String startFormActivityId;
protected String startUserId;
protected String startActivityId;
public HistoricProcessInstanceEntity() {
}
......@@ -40,6 +41,8 @@ public class HistoricProcessInstanceEntity extends HistoricScopeInstanceEntity i
businessKey = processInstance.getBusinessKey();
processDefinitionId = processInstance.getProcessDefinitionId();
startTime = ClockUtil.getCurrentTime();
startUserId = Authentication.getAuthenticatedUserId();
startActivityId = processInstance.getActivityId();
}
@SuppressWarnings("unchecked")
......@@ -65,16 +68,16 @@ public class HistoricProcessInstanceEntity extends HistoricScopeInstanceEntity i
public void setEndActivityId(String endActivityId) {
this.endActivityId = endActivityId;
}
public String getStartFormUserId() {
return startFormUserId;
public String getStartUserId() {
return startUserId;
}
public void setStartFormUserId(String startFormUserId) {
this.startFormUserId = startFormUserId;
public void setStartUserId(String startUserId) {
this.startUserId = startUserId;
}
public String getStartFormActivityId() {
return startFormActivityId;
public String getStartActivityId() {
return startActivityId;
}
public void setStartFormActivityId(String startFormActivityId) {
this.startFormActivityId = startFormActivityId;
public void setStartActivityId(String startUserId) {
this.startActivityId = startUserId;
}
}
......@@ -46,7 +46,6 @@ public class HistoryParseListener implements BpmnParseListener {
public void parseProcess(Element processElement, ProcessDefinitionEntity processDefinition) {
if (activityHistoryEnabled(processDefinition)) {
processDefinition.addExecutionListener(ExecutionListener.EVENTNAME_START, new ProcessInstanceStartHandler());
processDefinition.addExecutionListener(ExecutionListener.EVENTNAME_END, new ProcessInstanceEndHandler());
}
}
......
......@@ -19,6 +19,7 @@ import org.activiti.engine.impl.history.HistoricProcessInstanceEntity;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.pvm.delegate.ExecutionListener;
import org.activiti.engine.impl.pvm.delegate.ExecutionListenerExecution;
import org.activiti.engine.impl.runtime.ExecutionEntity;
import org.activiti.engine.impl.util.ClockUtil;
......@@ -37,5 +38,6 @@ public class ProcessInstanceEndHandler implements ExecutionListener {
long durationInMillis = endTime.getTime() - historicProcessInstance.getStartTime().getTime();
historicProcessInstance.setEndTime(endTime);
historicProcessInstance.setDurationInMillis(durationInMillis);
historicProcessInstance.setEndActivityId(((ExecutionEntity)execution).getActivityId());
}
}
/* 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.
*/
package org.activiti.engine.impl.history.handler;
import org.activiti.engine.impl.history.HistoricProcessInstanceEntity;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.pvm.delegate.ExecutionListener;
import org.activiti.engine.impl.pvm.delegate.ExecutionListenerExecution;
import org.activiti.engine.impl.runtime.ExecutionEntity;
import org.activiti.engine.impl.util.ClockUtil;
/**
* @author Tom Baeyens
*/
public class ProcessInstanceStartHandler implements ExecutionListener {
public void notify(ExecutionListenerExecution execution) {
// ExecutionEntity executionEntity = (ExecutionEntity) execution;
// String processInstanceId = executionEntity.getId();
// String processDefinitionId = executionEntity.getProcessDefinitionId();
// String businessKey = executionEntity.getBusinessKey();
//
// HistoricProcessInstanceEntity historicProcessInstance = new HistoricProcessInstanceEntity();
// historicProcessInstance.setId(processInstanceId);
// historicProcessInstance.setProcessInstanceId(processInstanceId);
// historicProcessInstance.setBusinessKey(businessKey);
// historicProcessInstance.setProcessDefinitionId(processDefinitionId);
// historicProcessInstance.setStartTime(ClockUtil.getCurrentTime());
//
// CommandContext
// .getCurrent()
// .getDbSqlSession()
// .insert(historicProcessInstance);
}
}
......@@ -40,8 +40,8 @@
#{startTime, jdbcType=TIMESTAMP},
#{endTime, jdbcType=TIMESTAMP},
#{durationInMillis ,jdbcType=BIGINT},
#{startFormUserId, jdbcType=VARCHAR},
#{startFormActivityId, jdbcType=VARCHAR},
#{startUserId, jdbcType=VARCHAR},
#{startActivityId, jdbcType=VARCHAR},
#{endActivityId, jdbcType=VARCHAR}
)
</insert>
......@@ -73,8 +73,8 @@
<result property="startTime" column="START_TIME_" jdbcType="TIMESTAMP" />
<result property="endTime" column="END_TIME_" jdbcType="TIMESTAMP" />
<result property="durationInMillis" column="DURATION_" jdbcType="BIGINT" />
<result property="startFormUserId" column="START_USER_ID_" jdbcType="VARCHAR" />
<result property="startFormActivityId" column="START_ACT_ID_" jdbcType="VARCHAR" />
<result property="startUserId" column="START_USER_ID_" jdbcType="VARCHAR" />
<result property="startActivityId" column="START_ACT_ID_" jdbcType="VARCHAR" />
<result property="endActivityId" column="END_ACT_ID_" jdbcType="VARCHAR" />
</resultMap>
......
......@@ -15,6 +15,7 @@ package org.activiti.engine.test.api.history;
import java.util.List;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.test.ActivitiInternalTestCase;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
......@@ -29,7 +30,7 @@ public class HistoryServiceTest extends ActivitiInternalTestCase {
public void testHistoricProcessInstanceQuery() {
// With a clean ProcessEngine, no instances should be available
assertTrue(historyService.createHistoricProcessInstanceQuery().count() == 0);
final ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
assertTrue(historyService.createHistoricProcessInstanceQuery().count() == 1);
// Complete the task and check if the size is count 1
......@@ -39,4 +40,22 @@ public class HistoryServiceTest extends ActivitiInternalTestCase {
assertTrue(historyService.createHistoricProcessInstanceQuery().count() == 1);
}
@Deployment(resources = {"org/activiti/engine/test/api/oneTaskProcess.bpmn20.xml"})
public void testHistoricProcessInstanceUserIdAndActivityId() {
// With a clean ProcessEngine, no instances should be available
identityService.setAuthenticatedUserId("johndoe");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().singleResult();
assertEquals("johndoe", historicProcessInstance.getStartUserId());
assertEquals("theStart", historicProcessInstance.getStartActivityId());
List<Task> tasks = taskService.createTaskQuery().processInstanceId(processInstance.getId()).list();
assertEquals(1, tasks.size());
taskService.complete(tasks.get(0).getId());
historicProcessInstance = historyService.createHistoricProcessInstanceQuery().singleResult();
assertEquals("theEnd", historicProcessInstance.getEndActivityId());
}
}
......@@ -93,7 +93,7 @@
<para>If you've set the authenticated user before calling the submit methods with
<literal>IdentityService.setAuthenticatedUserId(String)</literal> then that authenticated user
who submitted the form will be accessible in the history as well with
<literal>HistoricProcessInstance.getStartFormUserId()</literal> for start forms and
<literal>HistoricProcessInstance.getStartUserId()</literal> for start forms and
<literal>HistoricActivityInstance.getAssignee()</literal> for task forms.
</para>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册