1 Star 5 Fork 2

李金升 / vue-bpmn-flowable

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
bpm2.0结构.md 6.77 KB
一键复制 编辑 原始数据 按行查看 历史
李金升 提交于 2021-08-20 09:16 . first commit

https://tkjohn.github.io/flowable-userguide/#bpmnUserTask

SequenceFlow

条件顺序流

图中显示带小菱形。

<sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask">
  <conditionExpression xsi:type="tFormalExpression">
    <![CDATA[${order.price > 100 && order.price < 250}]]>
  </conditionExpression>
</sequenceFlow>

默认顺序流

所有的BPMN 2.0任务与网关都可以使用默认顺序流,默认顺序流用起点带有“斜线”标记的一般顺序流表示。

Gateway

排他网关

<exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" />

并行网关

<parallelGateway id="myParallelGateway" />

包容网关

排他网关与并行网关的组合。

<inclusiveGateway id="myInclusiveGateway" />

基于事件的网关

<eventBasedGateway id="gw1" />

UserTask

<userTask id="theTask" name="Important task" />

添加描述(description)信息

<userTask id="theTask" name="Schedule meeting" >
  <documentation>
      Schedule an engineering meeting for next week with the new hire.
  </documentation>
</userTask>

设定到期日期

可以在任务定义中使用扩展指定表达式,以在任务创建时设定到期日期。 该表达式必须解析为java.util.Date,java.util.String (ISO8601格式),ISO8601时间长度(例如PT50M),或者null。 例如,可以使用在流程里前一个表单中输入的日期,或者由前一个服务任务计算出的日期。 如果使用的是时间长度,则到期日期基于当前时间加上给定长度计算。例如当dueDate使用“PT30M”时,任务在从现在起30分钟后到期。

<userTask id="theTask" name="Important task" flowable:dueDate="${dateVariable}"/>

用户指派

用户任务可以直接指派(assign)给用户。 可以定义humanPerformer子元素来实现。humanPerformer需要resourceAssignmentExpression来实际定义用户。 目前,只支持formalExpressions。

  <userTask id='theTask' name='important task' >
    <humanPerformer>
      <resourceAssignmentExpression>
        <formalExpression>kermit</formalExpression>
      </resourceAssignmentExpression>
    </humanPerformer>
  </userTask>

只能指定一个用户作为任务的humanPerformer。在Flowable术语中,这个用户被称作办理人(assignee)。拥有办理人的任务,在其他人的任务列表中不可见,而只能在该办理人的个人任务列表中看到。

任务也可以放在用户的候选任务列表中。在这个情况下,需要使用potentialOwner(潜在用户)结构。 用法与humanPerformer结构类似。请注意需要指定表达式中的每一个元素为用户还是组(引擎无法自行判断)。

如果并未指定给定字符串是用户还是组,引擎默认其为组。

  <userTask id='theTask' name='important task' >
    <potentialOwner>
      <resourceAssignmentExpression>
        <formalExpression>user(kermit), group(management)</formalExpression>
      </resourceAssignmentExpression>
    </potentialOwner>
  </userTask>
public class MyAssignmentHandler implements TaskListener {
  public void notify(DelegateTask delegateTask) {
    // 在这里执行自定义身份查询

    // 然后调用如下命令:
    delegateTask.setAssignee("kermit");
    delegateTask.addCandidateUser("fozzie");
    delegateTask.addCandidateGroup("management");
  }
}

任务监听器

<userTask id="task1" name="My task" >
  <extensionElements>
    <flowable:taskListener event="create" class="org.flowable.MyAssignmentHandler" />
  </extensionElements>
</userTask>
用于任务指派的Flowable扩展

很明显,当指派关系不复杂时,这种用户与组的指派方式十分笨重。为避免这种复杂性,可以在用户任务上使用自定义扩展。

  • assignee(办理人) <userTask id="theTask" name="my task" flowable:assignee="kermit" />
  • candidateUsers(候选用户)<userTask id="theTask" name="my task" flowable:candidateUsers="kermit, gonzo" /> 这个属性只能用于用户。
  • candidateGroups(候选组)<userTask id="theTask" name="my task" flowable:candidateGroups="management, accountancy" /> 这个属性只能用于组。
<userTask id="task" name="My Task" flowable:assignee="${ldapService.findManagerForEmployee(emp)}"/>

<userTask id="task" name="My Task" flowable:candidateUsers="${ldapService.findAllSales()}"/>

通过调用ldapService Spring bean的findManagerOfEmployee方法,emp参数是一个流程变量。

调用方法的返回类型必须是String或Collection(候选用户或组)

ScriptTask

脚本任务(script task)是自动执行的活动。当流程执行到达脚本任务时,会执行相应的脚本。

脚本任务使用scriptscriptFormat元素定义。

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="groovy">
  <script>
    sum = 0
    for ( i in inputArray ) {
      sum += i
    }
  </script>
</scriptTask>

到达脚本引擎的执行中,所有的流程变量都可以在脚本中使用。

调用execution.setVariable("variableName", variableValue),在脚本中设置流程变量。

默认情况下,变量不会自动储存。可以将scriptTaskautoStoreVariables参数设置为true,以自动保存任何在脚本中定义的变量(例如上例中的sum)。

<scriptTask id="script" scriptFormat="JavaScript" flowable:autoStoreVariables="false"></scriptTask>

这个参数的默认值为false。也就是说如果在脚本任务定义中忽略这个参数,则脚本声明的所有变量将只在脚本执行期间有效。

脚本任务的返回值,可以通过为脚本任务定义的flowable:resultVariable'`属性设置为流程变量。

<scriptTask id="theScriptTask" name="Execute script" scriptFormat="juel" flowable:resultVariable="myVar">
  <script>#{echo}</script>
</scriptTask>

当使用javascript作为脚本语言时,可以使用“安全脚本(secure scripting)”。

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-secure-javascript</artifactId>
    <version>${flowable.version}</version>
</dependency>

添加这个依赖会同时引入Rhino依赖,是一个用于JDK的javascript引擎。过去包含在JDK6与7中,并已被Nashorn引擎取代。然而,Rhino项目仍然在继续开发。许多(包括Flowable用于实现安全脚本的)功能都在之后才加入。

ServiceTask

Java服务任务(Java service task)用于调用Java类。

  1. 指定实现了JavaDelegate或ActivityBehavior的类。
    <serviceTask id="javaService"
                 name="My Java Service Task"
                 flowable:class="org.flowable.MyJavaDelegate" />
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/li-jinsheng/vue-bpmn-flowable.git
git@gitee.com:li-jinsheng/vue-bpmn-flowable.git
li-jinsheng
vue-bpmn-flowable
vue-bpmn-flowable
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891