标签:dia 图形 oid ocs 归档 images 字符串转换 群组 方法
业务流程的XML内容大致可以包含以下几个方面:
图像表示:
图像表示:
图像表示:
图像表示:
source
和 target
属性, 定义了连线的方向。1)有4钟方法来声明java调用逻辑:
执行一个在流程执行中调用的类, 需要在‘activiti:class‘属性中设置全类名。
<serviceTask id="javaService" name="My Java Service Task" activiti:class="org.activiti.MyJavaDelegate" />
也可以使用表达式调用一个对象。对象必须遵循一些规则, 并使用activiti:class属性进行创建。
<serviceTask id="serviceTask" activiti:delegateExpression="${delegateExpressionBean}" />
这里,delegateExpressionBean是一个实现了JavaDelegate接口的bean, 它定义在实例的spring容器中。
要指定执行的UEL方法表达式, 需要使用activiti:expression。
<serviceTask id="javaService" name="My Java Service Task" activiti:expression="#{printer.printMessage()}" />
方法printMessage(无参数)会调用 名为printer对象的方法。
也可以为表达式中的方法传递参数。
<serviceTask id="javaService" name="My Java Service Task" activiti:expression="#{printer.printMessage(execution, myVar)}" />
这会调用名为printer对象上的方法printMessage。 第一个参数是DelegateExecution,在表达式环境中默认名称为execution。 第二个参数传递的是当前流程的名为myVar的变量。
要指定执行的UEL值表达式, 需要使用activiti:expression属性。
<serviceTask id="javaService" name="My Java Service Task" activiti:expression="#{split.ready}" />
ready属性的getter方法,getReady(无参数), 会作用于名为split的bean上。 这个对象会被解析为流程对象和 (如果合适)spring环境中的对象。
要在流程执行中实现一个调用的类,这个类需要实现org.activiti.engine.delegate.JavaDelegate接口, 并在execute方法中提供对应的业务逻辑。 当流程执行到特定阶段,它会指定方法中定义好的业务逻辑, 并按照默认BPMN 2.0中的方式离开节点。
让我们创建一个java类的例子,它可以流程变量中字符串转换为大写。 这个类需要实现org.activiti.engine.delegate.JavaDelegate接口, 这要求我们实现execute(DelegateExecution)方法。 它包含的业务逻辑会被引擎调用。流程实例信息,如流程变量和其他信息, 可以通过 DelegateExecution 接口访问和操作。
public class ToUppercase implements JavaDelegate { public void execute(DelegateExecution execution) throws Exception { String var = (String) execution.getVariable("input"); var = var.toUpperCase(); execution.setVariable("input", var); } }
注意:serviceTask定义的class只会创建一个java类的实例。 所有流程实例都会共享相同的类实例,并调用execute(DelegateExecution)。 这意味着,类不能使用任何成员变量,必须是线程安全的,它必须能模拟在不同线程中执行。 这也影响着属性注入的处理方式。
流程定义中引用的类(比如,使用activiti:class)不会 在部署时实例化。只有当流程第一次执行到使用类的时候, 类的实例才会被创建。如果找不到类,会抛出一个ActivitiException。 这个原因是部署环境(更确切是的classpath)和真实环境往往是不同的。 比如当使用ant或业务归档上传到Activiti Explorer来发布流程 classpath没有包含引用的类。
<activiti:string>标签和<activiti:expression>标签
activiti:resultVariable用于表示返回值
<serviceTask id="aMethodExpressionServiceTask" activiti:expression="#{myService.doSomething()}" activiti:resultVariable="myVar" />
3.task.Task的执行过程
假设是一个UserTask,
task.Task的execute()会
调用它的activityBehavior.execute(execution);
UserTaskActivityBehavior.execute()会根据TaskDefinition构造Task对象
注意这个过程中,会对Task的受托人、候选组、候选用户等Expression进行getValue()的计算
最后,Task的信息保存入库
标签:dia 图形 oid ocs 归档 images 字符串转换 群组 方法
原文地址:http://www.cnblogs.com/gaoyup/p/7748184.html