Flowable入门系列文章72 - JPA高级用法

Posted 分享牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章72 - JPA高级用法相关的知识,希望对你有一定的参考价值。

1、查询JPA流程变量

您可以查询具有特定JPA实体的ProcessInstances和Executions作为变量值。请注意,只variableValueEquals(name, entity)支持对JPA实体ProcessInstanceQuery和ExecutionQuery。方法variableValueNotEquals,variableValueGreaterThan,variableValueGreaterThanOrEqual,variableValueLessThan和variableValueLessThanOrEqual不支持,将抛出FlowableException时,JPA实体作为值传递。

ProcessInstance result = runtimeService.createProcessInstanceQuery()
.variableValueEquals("entityToQuery", entityToQuery).singleResult();

2、使用Spring bean和JPA的高级示例

更高级的例子JPASpringTest可以在这里找到flowable-spring-examples。它描述了以下简单的用例:

  • 现有的使用JPA实体的Spring bean已经存在,允许存储贷款请求。
  • 使用Flowable,我们可以使用现有的实体,通过现有的bean获得,并在我们的过程中使用它们作为变量。过程在以下步骤中定义:
    • 服务任务创建一个新的LoanRequest,使用LoanRequestBean开始进程时收到的现有使用变量(例如可能来自一个开始表单)。创建的实体存储为变量,使用flowable:resultVariable该变量将表达式结果存储为变量。
    • UserTask允许经理审查请求并批准/不批准,将其存储为布尔变量 approvedByManager。
    • ServiceTask更新贷款申请实体,以便实体与流程同步。
    • 取决于实体属性的值approved,独占网关用于决定下一步要采取的路径:当请求被批准时,流程结束,否则,一个额外的任务将变为可用(发送拒绝字母),所以客户可以通过拒收信手动通知。

请注意,该过程不包含任何形式,因为它只用于单元测试。

<?xml version="1.0" encoding="UTF-8"?>
<definitions id="taskAssigneeExample"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:flowable="http://flowable.org/bpmn"
targetNamespace="org.flowable.examples">
<process id="LoanRequestProcess" name="Process creating and handling loan request">
<startEvent id='theStart' />
<sequenceFlow id='flow1' sourceRef='theStart' targetRef='createLoanRequest' />
<serviceTask id='createLoanRequest' name='Create loan request'
flowable:expression="$loanRequestBean.newLoanRequest(customerName, amount)"
flowable:resultVariable="loanRequest"/>
<sequenceFlow id='flow2' sourceRef='createLoanRequest' targetRef='approveTask' />
<userTask id="approveTask" name="Approve request" />
<sequenceFlow id='flow3' sourceRef='approveTask' targetRef='approveOrDissaprove' />
<serviceTask id='approveOrDissaprove' name='Store decision'
flowable:expression="$loanRequest.setApproved(approvedByManager)" />
<sequenceFlow id='flow4' sourceRef='approveOrDissaprove' targetRef='exclusiveGw' />
<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway approval" />
<sequenceFlow id="endFlow1" sourceRef="exclusiveGw" targetRef="theEnd">
<conditionExpression xsi:type="tFormalExpression">$loanRequest.approved</conditionExpression>
</sequenceFlow>
<sequenceFlow id="endFlow2" sourceRef="exclusiveGw" targetRef="sendRejectionLetter">
<conditionExpression xsi:type="tFormalExpression">$!loanRequest.approved</conditionExpression>
</sequenceFlow>
<userTask id="sendRejectionLetter" name="Send rejection letter" />
<sequenceFlow id='flow5' sourceRef='sendRejectionLetter' targetRef='theOtherEnd' />
<endEvent id='theEnd' />
<endEvent id='theOtherEnd' />
</process>
</definitions>

虽然上面的例子很简单,但它展示了使用JPA和Spring以及参数化方法表达式的强大功能。这个过程不需要自定义的java代码(除了Spring bean之外),并大大加速了开发。

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:

以上是关于Flowable入门系列文章72 - JPA高级用法的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章70 - JPA介绍

Flowable入门系列文章68 - 表单属性

Flowable入门系列文章9 - 基本配置三

Flowable入门系列文章78 - Flowable Designer编辑器功能

Flowable入门系列文章56 - 多实例

Flowable入门系列文章58 - 子过程