CompileFlow 基本组件--第二节

bpm基本组件讲解

1.BPM根节点

1.1 xml代码

<bpm code="bpm.testStudy" name="testStudy" type="process" description="This is test demo."></bpm>

1.2 字段说明

属性code:该属性最重要,当引擎start执行流程时,会要求传入code参数,这个参数就是流程文件中的code字段.code约定用点表示文件存放目录层级.如上bpm.ktvExample表示文件在resources下的bpm文件夹下,名字叫ktvExample.

属性type:目前固定写死process,后续可扩展支持多种类型流程.

属性name:按自己工程需要命名.

属性description:按自己工程需要命名.

引擎执行流程代码片段:

Map result = ProcessEngineFactory.getProcessEngine().start(code, context);

2.全局变量

2.1 xml代码

<var name="locationId" description="门店编号" dataType="java.lang.Integer" inOutType="param"> 

<var name="longitude" description="经度" dataType="java.lang.Double" inOutType="param"> 

<var name="latitude" description="纬度" dataType="java.lang.Double" inOutType="param">

<var name="checkResult" description="校验结果" dataType="java.lang.Boolean" inOutType="return">

2.2 字段说明

参数用var节点表示,直接在根节点bpm下的就叫全局参.

inOutType属性: 表示参数类型,值有3种: param、inner、return.

    1. param: 表示对应引擎start的入参.当我们start流程时,除了需要设置code,还需要设置contex.他是一个MAP,其中key就需要映射成上面var节点的name属性.

    2.inner: 表示内部运行时各个节点执行后的中间变量.

    3.return: 表示返回结果变量.流程执行完成后,我们拿到了一个result结果.是个MAP.其中指定了return类型的var节点,我们可以通过name作为key从result拿到值.

dataType属性:参数类型,支持java类型写法例如上面的: java.lang.Integer.

name属性:变量名称

description属性:变量描述

3.开始节点: start

3.1 xml代码

<start id="1" name="开始" tag="223" g="105,17,30,30">

3.2 字段说明

流程的开始节点用start表示.

transition属性:表示指向下一个节点.

to:就是下一个节点的id.

id属性:节点的唯一标志,请保持唯一

 tag属性:节点的附加数据

name属性:节点名称会在流程图上显示

g属性:布局

4.结束节点: end

4.1 xml代码

<end id="11" name="结束" tag="已经结束" g="101,549,30,30">

4.2 字段说明

id属性:节点的唯一标志,请保持唯一

tag属性:节点的附加数据

name属性:节点名称会在流程图上显示

g属性:布局

5.自动节点: autoTask--流程节点

5.1 xml代码

<autoTask id="12" name="返回验证结果" g="72,269,88,48">       

<var name="locationId" description="门店编号" dataType="java.lang.Integer" contextVarName="locationId" inOutType="param">       

<var name="longitude" description="经度" dataType="java.lang.Double" contextVarName="longitude" inOutType="param">     

  <var name="latitude" description="纬度" dataType="java.lang.Double" contextVarName="latitude" inOutType="param">     

  <var name="checkResult" description="校验结果" dataType="java.lang.Boolean" contextVarName="checkResult" inOutType="return">

5.2 字段说明

自动节点用autoTask表示是最常见的.他主要执行一段逻辑.目前支持springBean的配置和普通javaBean的配置.其中action就是要配置的动作.下面actionHandle配置该动作出入参.最终这个节点会被编译成javaCode如下:

//AutoTaskNode: 返回验证结果((MockSpringBean)BeanProvider.getBean("mockSpringBean")).checkLocation(locationId,longitude,latitude);

6.判断节点: decision

6.1 xml代码

<decision id="8" name="验证地址信息" g="72,109,88,48">    <transition to="9" priority="1" name="离得近" g=":-15,20">   

<transition to="10" priority="2" name="离得远" expression="locationId>=5" g=":-15,20">       

<var name="locationId" description="门店编号" dataType="java.lang.Integer" contextVarName="locationId"  inOutType="param">     

  <var name="longitude" description="经度" dataType="java.lang.Double" contextVarName="longitude"  inOutType="param">     

  <var name="latitude" description="纬度" dataType="java.lang.Double" contextVarName="latitude"  inOutType="param">   

    <var name="checkResult" description="校验结果" dataType="java.lang.Boolean" contextVarName="checkResult" inOutType="return">

 6.2 字段说明

判断节点用decision表示.他主要执行一段逻辑.然后根据执行后的逻辑值进行表达式判断后,再走不同的分支.例如上面会先执行com.alibaba.compileflow.demo.mock.MockLocations的checkLocation方法.checkLocation方法会返回checkResult变量.其中他的上下文名称是checkResult.执行完成后,引擎会根据transition的expression表达式.进行逻辑选择,例如该节点会编译成javaCode:

public Map execute(Map _pContext) throws Exception {

locationId = (Integer)DataType.transfer(_pContext.get("locationId"), Integer.class);

longitude = (Double)DataType.transfer(_pContext.get("longitude"), Double.class);

latitude = (Double)DataType.transfer(_pContext.get("latitude"),

Double.class);Map _pResult = new HashMap<>();       

//DecisionNode: 验证地址信息mockLocationsCheckLocation();

if (locationId>=5) {            //离得远{                //ScriptTaskNode: 失败((MockLocations)ObjectFactory.getInstance("com.alibaba.compileflow.demo.mock.MockLocations")).failCheck(locationId);}} else {            //离得近{                //ScriptTaskNode: 成功((MockLocations)ObjectFactory.getInstance("com.alibaba.compileflow.demo.mock.MockLocations")).successCheck(locationId);}}        //AutoTaskNode: 返回验证结果

checkResult = ((MockSpringBean)BeanProvider.getBean("mockSpringBean")).checkLocation(locationId, longitude, latitude);

_pResult.put("checkResult", checkResult);return _pResult;}

7.脚本节点: scriptTask

7.1 xml代码

<scriptTask id="9" name="成功" g="132,189,88,48">       

<var name="locationId" description="地址id" dataType="java.lang.Integer" contextVarName="locationId" inOutType="param">

7.2 字段说明

脚本节点和自动节点差不多含义.就是执行一段逻辑.只是自动节点可以执行一个springBean或者一个javaBean.而脚本节点指定的是一个表达式.目前支持QL表示环境执行.例如上面会编译成javaCode:

  //ScriptTaskNode: 成功((MockLocations)ObjectFactory.getInstance("com.alibaba.compileflow.demo.mock.MockLocations")).successCheck(locationId);

8.循环节点

8.1 xml代码

<loopProcess id="13" name="循环节点" collectionVarName="pList" variableName="p" indexVarName="i" variableClass="java.lang.String" startNodeId="13-1" endNodeId="13-1" g="20,75,198,190">

<transition to="8" g=":-15,20"></transition>

<autoTask id="13-1" name="每人唱一首歌" g="50,80,88,48">

<action type="spring-bean">

<actionHandle bean="mockSpringBean" clazz="com.alibaba.compileflow.demo.mock.MockSpringBean" method="sing">

<var name="p1" dataType="java.lang.String" contextVarName="p" inOutType="param"></var> </actionHandle> </action>

</autoTask>

</loopProcess>

8.2 字段说明

循环节点的作用是,包裹部分流程进行循环执行.collectionVarName表示要循环的列表变量.variableName表示每个循环的局部变量.indexVarName表示循环的次数.如上面的协议会翻译下面的javaCode:

int i = -1;

for (String p : pList) {

    i++; 

  //AutoTaskNode: 每人唱一首歌((MockSpringBean)BeanProvider.getBean("mockSpringBean")).sing((String)DataType.transfer(p, String.class));}

以上内容源于:https://blog.csdn.net/qq_32447301/article/details/118890003

CompileFlow 使用 - 简书 (jianshu.com)https://www.jianshu.com/p/9bb2f01ad816?u_atoken=29f672e9-60d7-46b2-8e82-0ac7e9c5fb71&u_asession=017AA7N81Yqv4K-L3l0dk-1qVIFuvR__qzDtV2cQHuS8VEfGmbshxtNalfgXqw04HlX0KNBwm7Lovlpxjd_P_q4JsKWYrT3W_NKPr8w6oU7K89x0UoU5BP40Kza9FBOg-_slvTX-jMTLEIhdGFg3rxgWBkFo3NEHBv0PZUm6pbxQU&u_asig=05QZIoXbmOlEEvUjqc1jGrYW1EUoYdhd9edqcgtpw9QtODiPwiZmIabL8J8Xd7tWgIMzPGZm6DcR4jKYc9C2VABZLDmj2QWOQJqpv54sSEBP_FVstB0sDyMLuf3VuDLhXSI8qCBh4TThF0PupemneOBjV1VcsoL6rEJnYWh68_7Hv9JS7q8ZD7Xtz2Ly-b0kmuyAKRFSVJkkdwVUnyHAIJzRsUqRr1NM_FLE5brDM-fvlKfdLcytygIYm_qC9jV-Ee6FPw117USKdEPc8n7HkzU-3h9VXwMyh6PgyDIVSG1W8ORB9pZ_dX-D_kgobNO31FmIWt_1zFY_I1WBa8sehU0S0E3Orlu_hXcdcxMyyFTYI3Bo1xDnJbk_r7trZV0vNVmWspDxyAEEo4kbsryBKb9Q&u_aref=eUruGFkSCzEUM9uDbvgEKoVIBS4%3D

https://github.com/alibaba/compileflow

如果存在疑问,可以下方评论也可以加QQ 641200958一起讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值