cancel
Showing results for 
Search instead for 
Did you mean: 

Skip expression on User Task

hari
Star Contributor
Star Contributor
Hi,

I see a property called "Skip expression" on a user task in eclipse. I could not see any information being available about it anywhere so I am requesting you here to please tell us more about it.

Thanks,
Hari.
11 REPLIES 11

hari
Star Contributor
Star Contributor
To add  to the above issue, the complete doesn't seem to work.
Below is the modified code as per your suggestion.  Also the other change is that I have added code to try to complete the task.

Did I miss  something again  ?
<code>
public void test() {
  HashMap<String,Object> mpvar = new HashMap<String,Object>();
  mpvar.put("fname", "Hari");
  mpvar.put("_ACTIVITI_SKIP_EXPRESSION_ENABLED", true);
  ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("TestSkipExp",mpvar);
  System.out.println("STARTED PROCESS");
  System.out.println("=======================================================================");

  List<Task> tasks = activitiRule.getTaskService().createTaskQuery().taskAssignee("Hari").list();
  for(Task t:tasks){
   System.out.println(t.getName());
   try{
    activitiRule.getTaskService().complete(t.getId());
   }
   catch(Exception ex){
    ex.printStackTrace();
   }
  }
  System.out.println("END");
  System.out.println("====================================================================");

}
</code>

When I try to complete them, I see the below exception.

<code>
org.activiti.engine.ActivitiException: UserTask should not be signalled before complete
at org.activiti.engine.impl.bpmn.behavior.UserTaskActivityBehavior.signal(UserTaskActivityBehavior.java:146)
at org.activiti.engine.impl.persistence.entity.ExecutionEntity.signal(ExecutionEntity.java:407)
at org.activiti.engine.impl.persistence.entity.TaskEntity.complete(TaskEntity.java:201)
at org.activiti.engine.impl.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:50)
at org.activiti.engine.impl.cmd.CompleteTaskCmd.execute(CompleteTaskCmd.java:24)
at org.activiti.engine.impl.cmd.NeedsActiveTaskCmd.execute(NeedsActiveTaskCmd.java:59)
at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:24)
at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:57)
at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:37)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40)
at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35)
at org.activiti.engine.impl.TaskServiceImpl.complete(TaskServiceImpl.java:175)
at org.activiti.MyUnitTest.test(MyUnitTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.activiti.engine.test.ActivitiRule$1.evaluate(ActivitiRule.java:126)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
</code>

rhafner
Champ on-the-rise
Champ on-the-rise
Hi Hari,

What version of Activiti are you running this test case on? I am able to run the test case on Activiti 6 successfully and have validated the behavior is correct by tweaking the test case as shown below. FWIW, I am running the test case from within the Activiti test suite using the SkipExpressionUserTaskTest.

  @Deployment
  public void test2() {
  HashMap<String,Object> mpvar = new HashMap<String,Object>();
  mpvar.put("fname", "Hari");
  mpvar.put("_ACTIVITI_SKIP_EXPRESSION_ENABLED", true);
  ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("TestSkipExp",mpvar);
  System.out.println("STARTED PROCESS");
  System.out.println("====================================================================================================");
  assertNotNull(processInstance);

  List<Task> tasks = taskService.createTaskQuery().taskAssignee("Hari").list();
  assertEquals(1, tasks.size());
  assertEquals("UT2", tasks.get(0).getTaskDefinitionKey());
  for(Task t:tasks){
   System.out.println(t.getTaskDefinitionKey() + " " + t.getName());
  }
 
  taskService.complete(tasks.get(0).getId());
  assertNull(runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).singleResult());
 
  System.out.println("END");
  System.out.println("====================================================================================================");

}

thanks,
Rob