activiti要点纪要

activiti要点纪要,第1张

act_re_model 用于存放流程模型

act_re_procdef 用于存放流程定义

act_re_deployment 用于存放流程部署

act_ge_bytearray 用于存放各种二进制文件信息(包括流程模型的json,流程定义的xml以及他们各自对应的预览图以及流程进行中的数组参数)

act_re_procdef中会记录该流程定义所对应的部署id

同时,act_ge_bytearray中会记录流程定义所对应的xml和预览图(通过bytearray表中的deploymentId来记录),NAME字段会明确写出是xml还是预览图

也会记录流程模型所对应的json和预览图(act_re_model表中,EDITOR_SOURCE_VALUE_ID_记录的是json,EDITOR_SOURCE_EXTRA_VALUE_ID_记录的是预览图,都对应是act_ge_bytearray表中的ID)

execution是流程实例中的执行器,会有不止一个。

首先要说明,execution和task是两个独立的概念。

每一个节点正在进行的时候,必然会有一个execution停留在这个节点上,但是未必会有task

只有task类节点(如UserTask/EmailTask等等)会生成task(进行中的task存在act_ru_task表中),所以用task是否存在来判断该节点是否在进行是不妥当的。

但是task类节点通常会阻塞,等待人为调用接口来让其流转(最典型的就是UserTask),所以流转的接口才需要传入task。

这时候,task会进入act_hi_taskinst表中。

0首先一个流程实例启动,必然会有一个根execution(我们后面称为exec0)

1随后,exec0会生成一个子exec1并放置于流程图的开始节点(可以在act_ru_execution表中找到,父子execution使用表中的PARENT_ID_进行关联)。

2接着,exec1会根据流程图向前走。如果遇到并行网关,则会分裂。这里假设并行网关有两条支线,则会分裂出一个exec2

exec1和exec2分别走向并行网关的两条支线。最后在并行网关会合时,exec2被销毁。exec1继续复用,走下面的流程。

3根据流程图的不同,execution会分裂出若干个同级/子exection。例如上文提到的并行网关,以及后面要讲解的“调用活动”(callActivity)

下面有一个callActivity对应的例子图,可以参考。

未完待续

一、Activiti的流程分支条件的局限

Activiti的流程分支条件目前是采用脚本判断方式,并且需要在流程定义中进行分支条件的设定,如下图所示:

 

 <sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="theTask1">

     <conditionExpression xsi:type="tFormalExpression">${input == 1}</conditionExpression>

   </sequenceFlow>

   <sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="theTask2">

     <conditionExpression xsi:type="tFormalExpression">${input == 2}</conditionExpression>

   </sequenceFlow>

   <sequenceFlow id="flow4" sourceRef="exclusiveGw" targetRef="theTask3">

     <conditionExpression xsi:type="tFormalExpression">${input == 3}</conditionExpression>

   </sequenceFlow>

从上面的定义可以看到,流程的分支条件存在以下两个致命的局限性:

1.分支条件需要在流程定义(XML)中设定,这要求流程定义必须由开发人员来设计及编写

2.分支条件比较简单,一般为boolean表达式,表达式里的为单变量的判断处理。

以上两个局限性限制了流程的分支判断处理必须由开发人员来设定,而国内的大部分的流程应用都要求是普通的业务人员即可处理,或者是由有一定计算机基础的人员来设置处理。这要求我们对流程的条件设置提出了更高的要求,上一节我们通过修改Activiti的流程定义的XML中的分支条件表达式,同时刷新流程定义的引擎缓存,如下的代码就是基于这种方式:

JsonNode jsonObject=objectMapperreadTree(configJson);

 JsonNode configsNode=jsonObjectget("configs");

   

 BpmSolution bpmSolution=bpmSolutionManagerget(solId);

 BpmDef bpmDef=bpmDefManagergetLatestBpmByKey(bpmSolutiongetDefKey(), ContextUtilgetCurrentTenantId());

    ActProcessDef processDef=actRepServicegetProcessDef(bpmDefgetActDefId());

    String processDefXml=actRepServicegetBpmnXmlByDeployId(bpmDefgetActDepId());

   

    Systemoutprintln("xml:"+processDefXml);

   

    ActNodeDef sourceNode=processDefgetNodesMap()get(nodeId);

    ByteArrayInputStream is=new ByteArrayInputStream(processDefXmlgetBytes());

   

 

    if(configsNode!=null){

    //取得分支条件列表

    JsonNode configs=configsNodeget("conditions");

    if(configs!=null){

    Iterator<JsonNode> it=configselements();

    while(ithasNext()){

    ObjectNode config=(ObjectNode)itnext();

    String tmpNodeId=configget("nodeId")textValue();

    String tmpCondition=configget("condition")textValue();

   

    Element seqFlow=(Element)rootElselectSingleNode("/bpm:definitions/bpm:process/bpm:sequenceFlow[@sourceRef='"

    +sourceNodegetNodeId()+"' and @targetRef='"+tmpNodeId+"']");

    if(seqFlow==null) continue;

   

    Element conditionExpress=(Element)seqFlowselectSingleNode("bpm:conditionExpression");

    if(conditionExpress==null){

    conditionExpress=seqFlowaddElement("conditionExpression");

      conditionExpressaddAttribute("xsi:type", "tFormalExpression");

    }else{

    conditionExpressclearContent();

    }

    conditionExpressaddCDATA(tmpCondition);

 

    }

    }

    }

//修改流程定义的XML,并且清空该流程定义的缓存

    actRepServicedoModifyXmlAndClearCache(bpmDefgetActDefId(),bpmDefgetActDepId(), docasXML());

1BPMN 20模式的根元素是definitions元素。

多实例相关属性,以eclipse中的可视化图形 *** 作为例

Multil instance:

Sequential:执行顺序。必选项,可选值有true、false。用于设置多实例的执行顺序。True:多实例顺序执行,false:多实例并行

loop cardinality:循环基数。可选项。可以直接填整数,表示会签的人数。

Collection:集合。可选项。会签人数的集合,通常为list。和loop cardinality二选一

Element variable:元素变量。选择Collection时必选,为collection集合每次遍历的元素

Completion condition:完成条件。可选。Activiti会签有个特性,比如设置一个人完成后会签结束,那么其他人的代办任务都会消失。

>

以上就是关于activiti要点纪要全部的内容,包括:activiti要点纪要、怎么实现Activiti的分支条件的自定义配置、Activiti主流程各个属性说明BPMN 2.0等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9578844.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存