public class SkipActivityResource extends AbstractCockpitPluginResource {
private String jobId;
public SkipActivityResource(String engineName, String jobId) {
super(engineName);
this.jobId = jobId;
}
@POST
public void skipActivity() {
Job job = getProcessEngine().getManagementService().createJobQuery().jobId(jobId).singleResult();
String processInstanceId = job.getProcessInstanceId();
ExecutionEntity execution =
(ExecutionEntity)getProcessEngine().getRuntimeService().createExecutionQuery().executionId(job.getExecutionId()).singleResult();
String activityId = execution.getActivityId();
String activityInstanceId = execution.getActivityInstanceId();
if (activityInstanceId != null) {
getProcessEngine().getRuntimeService().createProcessInstanceModification(processInstanceId)
.startAfterActivity(activityId, activityInstanceId)
.cancelActivityInstance(activityInstanceId)
.execute();
} else {
getProcessEngine().getRuntimeService().createProcessInstanceModification(processInstanceId)
.cancelAllForActivity(activityId)
.startAfterActivity(activityId)
.execute();
}
}
} engine.getRuntimeService().createProcessInstanceModification(processInstanceId)
.startAfterActivity(activityId, transitionInstance.getParentActivityInstanceId())
.cancelTransitionInstance(transitionInstance.getId())
.execute();java.lang.NullPointerException
at
org.camunda.bpm.engine.impl.cmd.TransitionInstanceCancellationCmd.determineSourceInstanceExecution(TransitionInstanceCancellationCmd.java:43)
at org.camunda.bpm.engine.impl.cmd.AbstractInstanceCancellationCmd.execute(AbstractInstanceCancellationCmd.java:33)
at org.camunda.bpm.engine.impl.cmd.AbstractInstanceCancellationCmd.execute(AbstractInstanceCancellationCmd.java:26)
at org.camunda.bpm.engine.impl.cmd.ModifyProcessInstanceCmd.execute(ModifyProcessInstanceCmd.java:52)
at org.camunda.bpm.engine.impl.cmd.ModifyProcessInstanceCmd.execute(ModifyProcessInstanceCmd.java:30)
at org.camunda.bpm.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
at org.camunda.bpm.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:97)
at org.camunda.bpm.engine.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
at org.camunda.bpm.engine.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)
at org.camunda.bpm.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:32)
at
org.camunda.bpm.engine.impl.ProcessInstanceModificationBuilderImpl.execute(ProcessInstanceModificationBuilderImpl.java:219)
at
org.camunda.bpm.engine.impl.ProcessInstanceModificationBuilderImpl.execute(ProcessInstanceModificationBuilderImpl.java:210)
└── SkipRetrySampleProcess:1:3=>18
└── SubProcess_1#multiInstanceBody=>SubProcess_1#multiInstanceBody:40
├── SubProcess_1=>SubProcess_1:52
│ └── transition to/from ServiceTask_2:51
└── SubProcess_1=>SubProcess_1:58
└── transition to/from ServiceTask_2:57
└── SkipRetrySampleProcess:1:3=>18
└── SubProcess_1#multiInstanceBody=>SubProcess_1#multiInstanceBody:40
├── SubProcess_1=>SubProcess_1:52
│ ├── transition to/from ServiceTask_2:80
│ └── transition to/from EndEvent_2:81
└── SubProcess_1=>SubProcess_1:58
└── transition to/from ServiceTask_2:57
transition to/from ServiceTask_2:51" replaced by "transition to/from ServiceTask_2:80"?engine.getRuntimeService().createProcessInstanceModification(processInstanceId)
.startAfterActivity(activityId, transitionInstance.getParentActivityInstanceId()) // FIXME how to find correct common ancestor? Is this correct?
.cancelTransitionInstance(transitionInstance.getId())
.execute();