mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
ALF-13474 possibility of deleting compleded workflows + explorer ui cancel action fix
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@35900 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -53,6 +53,7 @@ import org.alfresco.service.cmr.workflow.WorkflowException;
|
|||||||
import org.alfresco.service.cmr.workflow.WorkflowInstance;
|
import org.alfresco.service.cmr.workflow.WorkflowInstance;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowNode;
|
import org.alfresco.service.cmr.workflow.WorkflowNode;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
import org.alfresco.service.cmr.workflow.WorkflowPath;
|
||||||
|
import org.alfresco.service.cmr.workflow.WorkflowTask;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowTaskDefinition;
|
import org.alfresco.service.cmr.workflow.WorkflowTaskDefinition;
|
||||||
import org.alfresco.service.cmr.workflow.WorkflowTimer;
|
import org.alfresco.service.cmr.workflow.WorkflowTimer;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
@@ -403,6 +404,50 @@ public class ActivitiWorkflowComponentTest extends AbstractActivitiComponentTest
|
|||||||
assertNull(historicProcessInstance);
|
assertNull(historicProcessInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDeleteFinishedWorkflow() throws Exception
|
||||||
|
{
|
||||||
|
WorkflowDefinition def = deployTestAdhocDefinition();
|
||||||
|
|
||||||
|
ProcessInstance processInstance = runtime.startProcessInstanceById(BPMEngineRegistry.getLocalId(def.getId()));
|
||||||
|
|
||||||
|
// Validate if a workflow exists
|
||||||
|
List<WorkflowInstance> instances = workflowEngine.getActiveWorkflows(def.getId());
|
||||||
|
assertNotNull(instances);
|
||||||
|
assertEquals(1, instances.size());
|
||||||
|
assertEquals(processInstance.getId(), BPMEngineRegistry.getLocalId(instances.get(0).getId()));
|
||||||
|
|
||||||
|
WorkflowInstance instance = instances.get(0);
|
||||||
|
|
||||||
|
WorkflowTask startTask = workflowEngine.getStartTask(instance.getId());
|
||||||
|
workflowEngine.endTask(startTask.getId(), null);
|
||||||
|
|
||||||
|
WorkflowTask adhocTask = workflowEngine.getTasksForWorkflowPath(instance.getId()).get(0);
|
||||||
|
workflowEngine.endTask(adhocTask.getId(), null);
|
||||||
|
|
||||||
|
// Validate if workflow is ended and has history
|
||||||
|
instances = workflowEngine.getActiveWorkflows(def.getId());
|
||||||
|
assertNotNull(instances);
|
||||||
|
assertEquals(0, instances.size());
|
||||||
|
|
||||||
|
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||||
|
.processInstanceId(processInstance.getProcessInstanceId())
|
||||||
|
.singleResult();
|
||||||
|
|
||||||
|
assertNotNull(historicProcessInstance);
|
||||||
|
|
||||||
|
|
||||||
|
// Call delete method on component
|
||||||
|
workflowEngine.deleteWorkflow(instance.getId());
|
||||||
|
|
||||||
|
// Historic process instance shouldn't be present anymore
|
||||||
|
historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||||
|
.processInstanceId(processInstance.getProcessInstanceId())
|
||||||
|
.singleResult();
|
||||||
|
|
||||||
|
assertNull(historicProcessInstance);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteUnexistingWorkflow() throws Exception
|
public void testDeleteUnexistingWorkflow() throws Exception
|
||||||
{
|
{
|
||||||
|
@@ -280,19 +280,22 @@ public class ActivitiWorkflowEngine extends BPMEngine implements WorkflowEngine
|
|||||||
String localId = createLocalId(workflowId);
|
String localId = createLocalId(workflowId);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Delete the runtime process instance if still running, this calls the end-listeners if any
|
||||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(localId).singleResult();
|
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(localId).singleResult();
|
||||||
if(processInstance == null)
|
if(processInstance != null)
|
||||||
{
|
{
|
||||||
throw new WorkflowException(messageService.getMessage(ERR_DELETE_UNEXISTING_WORKFLOW));
|
runtimeService.deleteProcessInstance(processInstance.getId(), ActivitiConstants.DELETE_REASON_DELETED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete the process instance
|
|
||||||
runtimeService.deleteProcessInstance(processInstance.getId(), ActivitiConstants.DELETE_REASON_DELETED);
|
|
||||||
|
|
||||||
// Convert historic process instance
|
// Convert historic process instance
|
||||||
HistoricProcessInstance deletedInstance = historyService.createHistoricProcessInstanceQuery()
|
HistoricProcessInstance deletedInstance = historyService.createHistoricProcessInstanceQuery()
|
||||||
.processInstanceId(processInstance.getId())
|
.processInstanceId(localId)
|
||||||
.singleResult();
|
.singleResult();
|
||||||
|
|
||||||
|
if(deletedInstance == null) {
|
||||||
|
throw new WorkflowException(messageService.getMessage(ERR_DELETE_UNEXISTING_WORKFLOW, localId));
|
||||||
|
}
|
||||||
|
|
||||||
WorkflowInstance result = typeConverter.convert(deletedInstance);
|
WorkflowInstance result = typeConverter.convert(deletedInstance);
|
||||||
|
|
||||||
// Delete the historic process instance
|
// Delete the historic process instance
|
||||||
|
@@ -307,7 +307,7 @@ public interface WorkflowService
|
|||||||
public List<WorkflowInstance> cancelWorkflows(List<String> workflowIds);
|
public List<WorkflowInstance> cancelWorkflows(List<String> workflowIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete an "in-flight" Workflow instance
|
* Delete a Workflow instance.
|
||||||
*
|
*
|
||||||
* NOTE: This will force a delete, meaning that the workflow instance may not
|
* NOTE: This will force a delete, meaning that the workflow instance may not
|
||||||
* go through all the appropriate cancel events.
|
* go through all the appropriate cancel events.
|
||||||
|
Reference in New Issue
Block a user