activiti5第三弹-----------脚本任务

首先是流程定义图:

重点关注一下流程节点中 Script Task 节点的 properties中的Main config

这里可以选择不同的脚本语言,由于其他的部怎么会··就用javascript来吧。

从图中可以看出只是定义了一个变量x,它的值为 a;

很多人都说这样定义了这个变量以后就可以在流程中获得这个变量。所以我进行了测试。结果如下:

package final_activiti.progress;

import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;
import org.junit.Test;

public class ScriptTaskTest extends PluggableActivitiTestCase {

	@Test
	@Deployment(resources = "final_activiti/progress/ScriptTask.bpmn")
	public void test() {
		ProcessInstance p = runtimeService
				.startProcessInstanceByKey("javascript");
		Task task = taskService.createTaskQuery().singleResult();
		assertTrue("a".equals(taskService.getVariable(task.getId(), "x")));
	}

}

断言的结果是错误的:


输出一下的话,可以看到居然是null,鼓捣了半天以后,在xml中发现了这样的语句---->

<scriptTask id="scripttask1" name="Script Task" scriptFormat="javascript" activiti:autoStoreVariables="false">
 <script>var x ="a";
 </script>
 </scriptTask>

标红的部分貌似在表示,自动把标量方到流程中在这里是被禁止的,那就改为true吧。结果还是有问题。测试结果是这样的


额,这个错误找了半天也没有明白是怎么个意思。自己水平有限,希望有知道的大神赐教。怎么办呢,然后就看了API,然后看到activiti自己都说这个怎么怎么存在问题,然后说什么最佳实践是把那个设置为fasle,手动把变量加入到流程中。然后重新鼓捣··自己只能做到下面这种程度了,至于那个自动,有待研究,呵呵。


execution.setVariable("x",x);这句话就是把变量放到流程中的语句。

然后是测试代码

package final_activiti.progress;

import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.Deployment;
import org.junit.Test;

public class ScriptTaskTest extends PluggableActivitiTestCase {

	@Test
	@Deployment(resources = "final_activiti/progress/ScriptTask.bpmn")
	public void test() {
		ProcessInstance p = runtimeService
				.startProcessInstanceByKey("javascript");
		Task task = taskService.createTaskQuery().singleResult();
		assertTrue("a".equals(taskService.getVariable(task.getId(), "x")));
		assertTrue(10D == (Double) taskService.getVariable(task.getId(), "y"));

		taskService.complete(task.getId());

		assertProcessEnded(p.getId());
	}

}

测试结果:



posted @ 2015-01-10 09:39  qz程程  阅读(1065)  评论(0编辑  收藏  举报