Skip Task in Camunda Using ProcessInstanceModification

HI Vamsi,

if I understood correctly, you need to skip your next task(user,service, etc) in current instance of ProcessDefinition.

There are two ways:

  1. Complete the next execution task using the Camunda REST endpoint for task completion. Brief explanation provided here:
    Example of completing a User Task with REST API

  2. Another way is providing following classes in Camunda Project:
    SkipExecutionListener and SkipTaskListener implemented ExecutionListener and TaskListener respectively.

Code Snippet:

public class SkipTaskListener implements TaskListener {

@Override
public void notify(DelegateTask delegateTask) {

		TaskService taskService = delegateTask.getExecution().getProcessEngineServices()
				.getTaskService();
		try {
			ExecutionEntity executionEntity = (ExecutionEntity) delegateTask.getExecution();
			String taskId = executionEntity.getTasks().get(0).getId();
			taskService.complete(taskId);
		}  catch (AuthorizationException e) {
			throw e;
		} catch (NullPointerException ne){
			throw ne;
		}
}

}

//Process Modification Approach
public class SkipExecutionListener implements ExecutionListener {

@Override
public void notify(DelegateExecution execution) throws Exception {
		RuntimeService runtimeService = execution.getProcessEngineServices().getRuntimeService();
		
		TaskService taskService = execution.getProcessEngineServices()
				.getTaskService();
		
		
	try{
		String outTransitionId = null;
			PvmActivity activity = ((ActivityExecution)execution).getActivity();
			List<PvmTransition> outgoingTransitions =   (activity.getOutgoingTransitions());
			
			if(null!= outgoingTransitions && !outgoingTransitions.isEmpty()){
				ListIterator<E> itr = (ListIterator<E>) outgoingTransitions.listIterator();
				
				while(itr.hasNext()){
					TransitionImpl outTransition = (TransitionImpl) itr.next();
					//TODO check outTransition for default flow , then condition of forward execution
					if(null != outTransition){
						outTransitionId =  outTransition.getId();
						break;
					}
				}
			}
			try {
				runtimeService.createProcessInstanceModification(execution.getProcessInstanceId())
				.startTransition(outTransitionId)
				.cancelActivityInstance(execution.getActivityInstanceId())
				.execute();

		      }  catch (AuthorizationException e) {
		        throw e;
		      }
		} catch (Exception e){
			throw e;
		}
		
	}

}