flowable 自定义条件表达式获取流程变量
时间: 2023-08-18 21:53:43 浏览: 108
要在Flowable中自定义条件表达式并获取流程变量,可以按照以下步骤进行操作:
1. 实现org.flowable.bpmn.model.CustomProperty接口,自定义一个属性类,用于存储流程变量的名称。
2. 在BPMN模型中添加自定义属性,将属性值设置为要获取的流程变量的名称。
3. 实现org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior类,重写execute方法,并在方法中获取自定义属性中的流程变量名称,然后通过流程引擎API获取流程变量的值。
4. 在BPMN模型中设置条件表达式,将自定义条件表达式的类名和方法名设置为刚才实现的类和方法。
这样就可以在Flowable中自定义条件表达式并获取流程变量了。需要注意的是,自定义条件表达式的类必须在流程引擎的类路径中,否则会找不到该类。
相关问题
flowable 自定义条件表达式获取流程变量示例
下面是一个获取流程变量的示例:
1. 自定义属性类
```java
public class ProcessVariableProperty implements CustomProperty {
protected String processVariableName;
@Override
public String getName() {
return "processVariable";
}
@Override
public String getSimpleValue() {
return processVariableName;
}
@Override
public void setSimpleValue(String value) {
processVariableName = value;
}
// getter and setter
}
```
2. 在BPMN模型中添加自定义属性
在BPMN模型中,找到要获取流程变量的节点,右键选择"Properties",在"Custom Properties"中添加一个名称为"processVariable"的属性,设置属性值为要获取的流程变量的名称。
3. 实现自定义条件表达式
```java
public class ProcessVariableExpression implements Expression {
protected String processVariableName;
@Override
public Object getValue(VariableScope variableScope) {
return variableScope.getVariable(processVariableName);
}
@Override
public void setValue(Object value, VariableScope variableScope) {
// do nothing
}
@Override
public String getExpressionText() {
return processVariableName;
}
// getter and setter
}
```
4. 实现自定义活动行为
```java
public class MyActivityBehavior extends AbstractBpmnActivityBehavior {
protected ProcessVariableProperty processVariableProperty;
@Override
public void execute(ActivityExecution execution) throws Exception {
String processVariableName = processVariableProperty.getProcessVariableName();
Object processVariableValue = execution.getVariable(processVariableName);
// do something with processVariableValue
leave(execution);
}
// getter and setter
}
```
5. 在BPMN模型中设置条件表达式
在BPMN模型中,找到要设置条件表达式的连线,右键选择"Properties",在"Sequence Flow Properties"中设置条件表达式,将类名设置为"ProcessVariableExpression",将方法名设置为"getValue"。
经过以上步骤,就可以在Flowable中自定义条件表达式并获取流程变量了。
flowable6.5 条件表达式xml引用java类
在 Flowable 6.5 中,可以通过实现 `org.flowable.engine.delegate.Expression` 接口来引用 Java 类。具体步骤如下:
1. 创建一个 Java 类,实现 `org.flowable.engine.delegate.Expression` 接口,例如:
```java
public class MyExpression implements Expression {
@Override
public Object getValue(VariableScope variableScope) {
// 根据变量作用域计算出表达式的值
// ...
return value;
}
@Override
public void setValue(Object value, VariableScope variableScope) {
// 不支持设置值,抛出异常
throw new UnsupportedOperationException("Cannot set value on MyExpression");
}
@Override
public boolean isLiteralText() {
// 指示表达式是否为文本字面量
return false;
}
}
```
2. 在 BPMN XML 文件中,使用 `${}` 表达式来引用 Java 类,例如:
```xml
<sequenceFlow id="flow1" sourceRef="start" targetRef="task1">
<conditionExpression xsi:type="tFormalExpression">
${new com.example.MyExpression().getValue(execution)}
</conditionExpression>
</sequenceFlow>
```
在上面的示例中,`com.example.MyExpression` 是自定义的 Java 类,`getValue()` 方法返回了一个布尔值,用于计算条件表达式的结果。这个表达式被用作 `sequenceFlow` 元素的条件表达式。
需要注意的是,使用 Java 类实现条件表达式时,这个类必须在 Flowable 引擎的类路径下可见。如果在使用自定义表达式时出现类找不到的错误,可以将自定义类打包成 jar 文件,并将其放置在 Flowable 引擎的 classpath 下。