`
man1900
  • 浏览: 428911 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Activiti 5 在线流程设计器开发

阅读更多

    jbpm4的开发成员tom离开了jboss后,加入afresco公司,并且才有activiti5的项目,这开源项目继承了jbpm4的所有优点,同时将其发扬光大,相对jbpm4,activiti5改进了储多我们国内开发人员关心的问题,如:

  • 流程代办
  • 在线流程设计器
  • 流程嵌入式部署
  • 流程独立部署
  • 动流程节点
  • 自由流程
  • 支持了bpmn2的标准
  • 支持规则引擎

 

     activiti 5 底层上的api跟jbpm4的api相似程序也达60%以上,特别是service提供的接口,都是在jbpm4上提供扩展,大大方便了jbpm4的开发人员,这也是tom的先明之处,毕竟jbpm原来打的品牌效应不可否认的,把原来的jbpm4积累的人气再次带至activiti5上,这也将是该项目能够断续前进的重要保障。

 

     尽管activiti5目前发展趋势前途光明,但其也有不足的地方,其前端的的表现总是存在不足,如在线流程设计器,目前eclipse插件生成的bpmn20.xml文件则不行,而官方提供的activiti-modler设计器,扩展及实现均面临困难,并且对浏览器的要求让它在国内的项目实施总会面临技术难度。

 

       宏天estbpm3则又是一个基于activiti5的产品,并且公司也有打算断续原来的产品销售模式,对企业开放源代码,而原来的设计器通过改进后,则可以直接支持activiti5的流程设计的需要,如:

 

activiti文件转化

设计器按设计器生成一份文档格式,通过系统中提供的xslt转化文档,完成转化后,生成bpmn20的格式文档,该文档可被activiti5直接识别。

 

其设计器及转化效果如下所示:

流程设计器

 

 

发布后,通过activiti5的api生成的流程图如下所示:

 

 

 

 

设计器原生成的文档格式:

<diagram xmlns:bg="bpm.graphic" xmlns:ciied="com.hotent.bpm.editor"
	xmlns:fg="flash.geom">
	<bg:Task id="task1" height="50" user="true" width="90" x="230"
		y="110">
		<label>用户任务1</label>
		<ports>
			<ciied:Port id="port1" clipOnShape="true" movable="false" />
			<ciied:Port id="port2" x="0" />
			<ciied:Port id="port3" y="1" />
			<ciied:Port id="port4" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
		</ports>
	</bg:Task>
	<bg:StartEvent id="startEvent1" height="46" width="31" x="60"
		y="119.5">
		<label>开始</label>
		<ports>
			<ciied:Port id="port5" clipOnShape="true" movable="false" />
			<ciied:Port id="port6" x="1" />
			<ciied:Port id="port7" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
		</ports>
	</bg:StartEvent>
	<bg:SubProcess id="subProcess1" automaticGraphLayout="false"
		expandedHeight="210" expandedWidth="570" height="210" width="570" x="360"
		y="230">
		<label>子流程</label>
		<ports>
			<ciied:Port id="port8" clipOnShape="true" movable="false" />
			<ciied:Port id="port9" x="0" />
			<ciied:Port id="port10" y="0" />
			<ciied:Port id="port11" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
			<ciied:Port id="port12" horizontalOffset="-5" y="1">
				<id>BOTTOM</id>
			</ciied:Port>
			<ciied:Port id="port13" horizontalOffset="5" y="1">
				<id>BOTTOM</id>
			</ciied:Port>
		</ports>
		<bg:Task id="task2" height="50" user="true" width="90" x="180"
			y="53">
			<label>用户任务2</label>
			<ports>
				<ciied:Port id="port14" clipOnShape="true" movable="false" />
				<ciied:Port id="port15" x="0" />
				<ciied:Port id="port16" x="1" />
				<ciied:Port id="port17" clipOnShape="true" movable="false">
					<id>CENTER</id>
				</ciied:Port>
			</ports>
		</bg:Task>
		<bg:StartEvent id="startEvent2" height="46" width="32"
			x="29" y="62.5">
			<label>开始2</label>
			<ports>
				<ciied:Port id="port18" clipOnShape="true" movable="false" />
				<ciied:Port id="port19" x="1" />
				<ciied:Port id="port20" clipOnShape="true" movable="false">
					<id>CENTER</id>
				</ciied:Port>
			</ports>
		</bg:StartEvent>
		<bg:SequenceFlow id="sequenceFlow1" endPort="port15"
			startPort="port19">
			<fallbackEndPoint>
				<fg:Point id="point1" x="198" y="58" />
			</fallbackEndPoint>
			<fallbackStartPoint>
				<fg:Point id="point2" />
			</fallbackStartPoint>
			<label></label>
		</bg:SequenceFlow>
		<bg:EndEvent id="endEvent1" height="49" width="34" x="380"
			y="61">
			<label>结束2</label>
			<ports>
				<ciied:Port id="port21" clipOnShape="true" movable="false" />
				<ciied:Port id="port22" x="0" />
				<ciied:Port id="port23" clipOnShape="true" movable="false">
					<id>CENTER</id>
				</ciied:Port>
			</ports>
		</bg:EndEvent>
		<bg:SequenceFlow id="sequenceFlow2" endPort="port22"
			startPort="port16">
			<fallbackEndPoint>
				<fg:Point id="point3" x="364" y="68" />
			</fallbackEndPoint>
			<fallbackStartPoint>
				<fg:Point id="point4" />
			</fallbackStartPoint>
			<label></label>
		</bg:SequenceFlow>
	</bg:SubProcess>
	<bg:EndEvent id="endEvent2" height="49" width="34" x="740"
		y="120">
		<label>结束1</label>
		<ports>
			<ciied:Port id="port24" clipOnShape="true" movable="false" />
			<ciied:Port id="port25" x="0" />
			<ciied:Port id="port26" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
		</ports>
	</bg:EndEvent>
	<bg:SequenceFlow id="sequenceFlow3" endPort="port2"
		startPort="port6">
		<fallbackEndPoint>
			<fg:Point id="point5" x="237" y="125" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point6" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
	<bg:SequenceFlow id="sequenceFlow4" endPort="port9"
		startPort="port3">
		<fallbackEndPoint>
			<fg:Point id="point7" x="396" y="461" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point8" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
	<bg:SequenceFlow id="sequenceFlow5" endPort="port25"
		startPort="port10">
		<fallbackEndPoint>
			<fg:Point id="point9" x="674" y="191" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point10" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
	<bg:Task id="task3" height="50" user="true" width="90" x="440"
		y="520">
		<label>用户任务3</label>
		<ports>
			<ciied:Port id="port27" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
			<ciied:Port id="port28" y="0">
				<id>TOP</id>
			</ciied:Port>
			<ciied:Port id="port29" y="1">
				<id>BOTTOM</id>
			</ciied:Port>
		</ports>
	</bg:Task>
	<bg:SequenceFlow id="sequenceFlow6" endPort="port28"
		startPort="port12">
		<fallbackEndPoint>
			<fg:Point id="point11" x="623" y="568" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point12" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
	<bg:Task id="task4" height="50" user="true" width="90" x="750"
		y="520">
		<label>用户任务4</label>
		<ports>
			<ciied:Port id="port30" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
			<ciied:Port id="port31" y="0">
				<id>TOP</id>
			</ciied:Port>
			<ciied:Port id="port32" y="1">
				<id>BOTTOM</id>
			</ciied:Port>
		</ports>
	</bg:Task>
	<bg:SequenceFlow id="sequenceFlow7" endPort="port31"
		startPort="port13">
		<fallbackEndPoint>
			<fg:Point id="point13" x="760" y="536" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point14" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
	<bg:EndEvent id="endEvent3" height="49" width="34" x="620"
		y="630">
		<label>结束3</label>
		<ports>
			<ciied:Port id="port33" clipOnShape="true" movable="false">
				<id>CENTER</id>
			</ciied:Port>
			<ciied:Port id="port34" x="1">
				<id>RIGHT</id>
			</ciied:Port>
			<ciied:Port id="port35" x="0">
				<id>LEFT</id>
			</ciied:Port>
		</ports>
	</bg:EndEvent>
	<bg:SequenceFlow id="sequenceFlow8" endPort="port35"
		startPort="port29">
		<fallbackEndPoint>
			<fg:Point id="point15" x="632" y="653" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point16" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
	<bg:SequenceFlow id="sequenceFlow9" endPort="port34"
		startPort="port32">
		<fallbackEndPoint>
			<fg:Point id="point17" x="688" y="651" />
		</fallbackEndPoint>
		<fallbackStartPoint>
			<fg:Point id="point18" />
		</fallbackStartPoint>
		<label></label>
	</bg:SequenceFlow>
</diagram>

 

 

通过XSLT转化后的文档格式:

 

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
	xmlns:ciied="com.ibm.ilog.elixir.diagram" xmlns:bg="bpm.graphic"
	xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
	xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
	xmlns:activiti="http://activiti.org/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	targetNamespace="http://www.activiti.org/test" expressionLanguage="http://www.w3.org/1999/XPath"
	typeLanguage="http://www.w3.org/2001/XMLSchema">
	<process id="subGraph2" name="子流程">
		<startEvent id="startEvent1" name="开始" />
		<endEvent id="endEvent2" name="结束1" />
		<endEvent id="endEvent3" name="结束3" />
		<userTask id="task1" name="用户任务1" />
		<userTask id="task3" name="用户任务3" />
		<userTask id="task4" name="用户任务4" />
		<sequenceFlow id="sequenceFlow3" name="" sourceRef="startEvent1"
			targetRef="task1" />
		<sequenceFlow id="sequenceFlow4" name="" sourceRef="task1"
			targetRef="subProcess1" />
		<sequenceFlow id="sequenceFlow5" name="" sourceRef="subProcess1"
			targetRef="endEvent2" />
		<sequenceFlow id="sequenceFlow6" name="" sourceRef="subProcess1"
			targetRef="task3" />
		<sequenceFlow id="sequenceFlow7" name="" sourceRef="subProcess1"
			targetRef="task4" />
		<sequenceFlow id="sequenceFlow8" name="" sourceRef="task3"
			targetRef="endEvent3" />
		<sequenceFlow id="sequenceFlow9" name="" sourceRef="task4"
			targetRef="endEvent3" />
		<subProcess id="subProcess1" name="子流程">
			<startEvent id="startEvent2" name="开始2" />
			<endEvent id="endEvent1" name="结束2" />
			<userTask id="task2" name="用户任务2" />
			<sequenceFlow id="sequenceFlow1" name="" sourceRef="startEvent2"
				targetRef="task2" />
			<sequenceFlow id="sequenceFlow2" name="" sourceRef="task2"
				targetRef="endEvent1" />
		</subProcess>
	</process>
	<bpmndi:BPMNDiagram id="BPMNDiagram_subGraph2">
		<bpmndi:BPMNPlane bpmnElement="subGraph2" id="BPMNPlane_subGraph2">
			<bpmndi:BPMNShape bpmnElement="startEvent1"
				id="BPMNShape_startEvent1">
				<omgdc:Bounds height="31" width="31" x="60" y="119.5" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="startEvent2"
				id="BPMNShape_startEvent2">
				<omgdc:Bounds height="32" width="32" x="389.0" y="292.5" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="endEvent1" id="BPMNShape_endEvent1">
				<omgdc:Bounds height="34" width="34" x="740.0" y="291.0" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="endEvent2" id="BPMNShape_endEvent2">
				<omgdc:Bounds height="34" width="34" x="740" y="120" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="endEvent3" id="BPMNShape_endEvent3">
				<omgdc:Bounds height="34" width="34" x="620" y="630" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="task1" id="BPMNShape_task1">
				<omgdc:Bounds height="50" width="90" x="230" y="110" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="task2" id="BPMNShape_task2">
				<omgdc:Bounds height="50" width="90" x="540.0" y="283.0" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="task3" id="BPMNShape_task3">
				<omgdc:Bounds height="50" width="90" x="440" y="520" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="task4" id="BPMNShape_task4">
				<omgdc:Bounds height="50" width="90" x="750" y="520" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNShape bpmnElement="subProcess1"
				id="BPMNShape_subProcess1">
				<omgdc:Bounds height="210" width="570" x="360" y="230" />
			</bpmndi:BPMNShape>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow1" id="BPMNEdge_sequenceFlow1">
				<omgdi:waypoint x="421.0" y="308.5"></omgdi:waypoint>
				<omgdi:waypoint x="480.5" y="308.5"></omgdi:waypoint>
				<omgdi:waypoint x="480.5" y="308.0"></omgdi:waypoint>
				<omgdi:waypoint x="540.0" y="308.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow2" id="BPMNEdge_sequenceFlow2">
				<omgdi:waypoint x="630.0" y="308.0"></omgdi:waypoint>
				<omgdi:waypoint x="740.0" y="308.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow3" id="BPMNEdge_sequenceFlow3">
				<omgdi:waypoint x="91.0" y="135.0"></omgdi:waypoint>
				<omgdi:waypoint x="230.0" y="135.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow4" id="BPMNEdge_sequenceFlow4">
				<omgdi:waypoint x="275.0" y="160.0"></omgdi:waypoint>
				<omgdi:waypoint x="275.0" y="335.0"></omgdi:waypoint>
				<omgdi:waypoint x="360.0" y="335.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow5" id="BPMNEdge_sequenceFlow5">
				<omgdi:waypoint x="645.0" y="230.0"></omgdi:waypoint>
				<omgdi:waypoint x="645.0" y="137.0"></omgdi:waypoint>
				<omgdi:waypoint x="740.0" y="137.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow6" id="BPMNEdge_sequenceFlow6">
				<omgdi:waypoint x="640.0" y="440.0"></omgdi:waypoint>
				<omgdi:waypoint x="640.0" y="480.0"></omgdi:waypoint>
				<omgdi:waypoint x="485.0" y="480.0"></omgdi:waypoint>
				<omgdi:waypoint x="485.0" y="520.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow7" id="BPMNEdge_sequenceFlow7">
				<omgdi:waypoint x="650.0" y="440.0"></omgdi:waypoint>
				<omgdi:waypoint x="650.0" y="480.0"></omgdi:waypoint>
				<omgdi:waypoint x="795.0" y="480.0"></omgdi:waypoint>
				<omgdi:waypoint x="795.0" y="520.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow8" id="BPMNEdge_sequenceFlow8">
				<omgdi:waypoint x="485.0" y="570.0"></omgdi:waypoint>
				<omgdi:waypoint x="485.0" y="647.0"></omgdi:waypoint>
				<omgdi:waypoint x="620.0" y="647.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
			<bpmndi:BPMNEdge bpmnElement="sequenceFlow9" id="BPMNEdge_sequenceFlow9">
				<omgdi:waypoint x="795.0" y="570.0"></omgdi:waypoint>
				<omgdi:waypoint x="795.0" y="647.0"></omgdi:waypoint>
				<omgdi:waypoint x="654.0" y="647.0"></omgdi:waypoint>
			</bpmndi:BPMNEdge>
		</bpmndi:BPMNPlane>
	</bpmndi:BPMNDiagram>
</definitions>

 

转成后,则直接通过以下api可发布至流程引擎:

 

 

Deployment deployment= repositoryService.createDeployment().name(bpmDefinition.getSubject()).addString(bpmDefinition.getSubject()+".bpmn20.xml",actFlowDefXml).deploy();

 

最新实现效果图如:

activiti在线流程设计器

 

 

 

想部署及学习了解,可参考本人新的博客获得下载源代码。

 

http://redxun.iteye.com/blog/2406509

  • 大小: 47.2 KB
  • 大小: 61.5 KB
  • 大小: 34.9 KB
  • 大小: 125 KB
  • 大小: 66.9 KB
  • 大小: 235.1 KB
分享到:
评论
13 楼 man1900 2012-06-12  
这部分源码目前只对合作伙伴开放
12 楼 mrgaosiyuan 2012-06-12  
可以看看你的源码么?谢谢了。875411900@qq.com
11 楼 xy2zhangheng 2012-05-01  
源码mark下,281765849@qq.com

谢谢,我好像找了很久了。
10 楼 man1900 2012-04-09  

引用

man1900你好:
我想通过activiti实现这样一种功能:
假如有一个请假申请,审批该申请单的人数不定,所以在流程图建模时,只有一个审批节点。提交申请单之后,流程就流到了审批Task节点。用户A对该审批通过了,同时想把审批流程forward给用户B进行审批。用户B可能在把审批assign给用户C。
这样的一个自由流程,目前的Activiti5.9应该是支持不了的。
设想:用户A审批完成之后此时的审批Task就应该complete了,希望能够clone一个审批Task,只是assignee变成了用户B,最重要的是流程不要向前流动,停留在审批节点。但事实上Activiti引擎会在此时结束流程,很多上下文变量全都归档到历史表了。

如果想实现我这里描述的自由流,扩展起来的复杂度应该不小吧!
希望能够得到你的一些建议。


可以通过串行的多实例任务来处理
9 楼 wwwchenbing 2012-04-09  
wwwchenbing 写道
昨晚我又定义了一个这样的流程(想解决不定人数的依次审批的流程):

流程图: startEvent --> HandleVacationReqeust --- o --> endEvent
                                    ^             |
                                    |             |
                                    |             |
                                    ---------------
但是当第一次结束审批Task,流程满足再次指向HandleVacationReqeust 的条件时,整个审批流程还是结束了。在AC_RU_TASK表中并没有新建一个HandleVacationReqeust 的任务。

不知道博主是否解决类似问题的经验,希望得到你的解答!



上面的流程图中循环流程是由O指向HandleVacationReqeust
8 楼 wwwchenbing 2012-04-09  
昨晚我又定义了一个这样的流程(想解决不定人数的依次审批的流程):

流程图: startEvent --> HandleVacationReqeust --- o --> endEvent
                                    ^             |
                                    |             |
                                    |             |
                                    ---------------
但是当第一次结束审批Task,流程满足再次指向HandleVacationReqeust 的条件时,整个审批流程还是结束了。在AC_RU_TASK表中并没有新建一个HandleVacationReqeust 的任务。

不知道博主是否解决类似问题的经验,希望得到你的解答!
7 楼 wwwchenbing 2012-04-08  
man1900 写道
activiti中对自由流程的支持是通过扩展来实现的,即是执行过程中,动态改变其任务节点的定义,使其后续有连接至你想的任务节点。

activiti是支持动态创建任务的,其提供newTask的接口,但这产生出来的任务只能用于抄送的任务,因为他产生的任务是跟流程定义无关的,我们目前只是提供从一个任务复制另一任务出来,以达到动态创建任务的目的。


man1900你好:
我想通过activiti实现这样一种功能:
假如有一个请假申请,审批该申请单的人数不定,所以在流程图建模时,只有一个审批节点。提交申请单之后,流程就流到了审批Task节点。用户A对该审批通过了,同时想把审批流程forward给用户B进行审批。用户B可能在把审批assign给用户C。
这样的一个自由流程,目前的Activiti5.9应该是支持不了的。
设想:用户A审批完成之后此时的审批Task就应该complete了,希望能够clone一个审批Task,只是assignee变成了用户B,最重要的是流程不要向前流动,停留在审批节点。但事实上Activiti引擎会在此时结束流程,很多上下文变量全都归档到历史表了。

如果想实现我这里描述的自由流,扩展起来的复杂度应该不小吧!
希望能够得到你的一些建议。
6 楼 man1900 2012-04-06  
activiti中对自由流程的支持是通过扩展来实现的,即是执行过程中,动态改变其任务节点的定义,使其后续有连接至你想的任务节点。

activiti是支持动态创建任务的,其提供newTask的接口,但这产生出来的任务只能用于抄送的任务,因为他产生的任务是跟流程定义无关的,我们目前只是提供从一个任务复制另一任务出来,以达到动态创建任务的目的。
5 楼 wwwchenbing 2012-04-04  
man1900你好,在你的博客中提到activiti支持自由流程,你能详细描述一下这个特性吗?我看了两天的文档,没有找到Activiti是如何支持自由流程的。
还有一个问题,Aciviti支持动态创建Task吗,我差了很多资料都没有找到。希望得到你的解答。灰常感谢!
4 楼 cooperay 2012-03-23  
能不能把折线 的 代码粘一下勒?

这个折线总是画不好。

cooperay@qq.com
3 楼 cooperay 2012-03-23  
楼主你好,我最近也在做这个东西,我想问一下 设计器问什么不直接生成 bpmn文件呢,而是再通过xslt 转换一下,有什么好处吗?  还是Activiti有什么我没有了解到的功能, 谢谢
2 楼 jakic 2012-03-09  
源码能不能也发给我看看呢?非常感谢!675718973@qq.com
1 楼 nilm61 2012-01-11  
源码能发我我吗?谢谢!1147659453@qq.com

相关推荐

    SpringBoot 集成 Activiti在线设计器(完整Demo)

    小编 做的这个项目有部分功能用到了 Activiti工作流,目前对工作流的掌握程度是基本会用,我之前写过一篇 Activiti 入门篇,当前这篇文章是属于Activiti 实战部分,如果你想知道Activiti 工作流是如何使用的话,那就...

    Activiti可视化流程设计器

    Activiti Designer是#Activiti#配套的基于Eclipse的可视化流程设计器,有Activiti团队开发,紧密贴合BPMN2.0规范以及Activiti的扩展元素。

    Activiti流程设计器代码

    Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。 Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速、超...

    easyui实现的Activiti工作流引擎web版流程设计器

    easyui实现的Activiti工作流引擎web版流程设计器 跨浏览器流程设计器 打开文件 processDesigner\wf\designer\index.html

    集成activiti moduler流程设计器的springboot工程

    集成activiti moduler5.22官方流程设计器的springboot工程。自行修改yml配置文件中的数据库地址。启动后先访问 地址:端口/activiti/model获得model的id,再访问 地址:端口/modeler.html?modelId=xx,将xx改为获得...

    Activiti6.0工作流引擎入门Demo

    Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由activiti进行管理,减少业务系统由于...

    bpmn.js 2.0流程编辑器 搭配 Activiti 7.0 进行工作流编辑器集成开发

    BPMN 无处不在,适合所有人 在浏览器中创建、嵌入和扩展 BPMN 图。单独使用它或将其集成到您的应用...3. 集成浏览器内流程引擎、令牌模拟、自定义元素、样式或建模规则。这取决于您,因为 bpmn-js 是一个开放的工具包。

    activiti5.22.0集成流程設計器

    之前上傳了一份源碼,這是基于5.22版本的流程设计器

    MyEclipse10安装activiti5插件完美解决方案

    MyEclipse10开发环境下安装activiti5流程设计器插件的完美解决方案,包含所有的安装包和补丁包

    基于Draw2dTouch实现的Activiti工作流Web设计器,支持多种主流浏览器

    基于Draw2d Touch实现的Activiti工作流Web设计器,本设计器完全使用JQuery语法开发,集成Easyui前端框架,支持多种主流浏览器。支持Activiti5以上语法结构。采用目前比较流行的JS库-JQuery。符合BPMN2.0标准。可视化...

    Activiti7.0源码官方完整版

    Activiti7.0源码官方完整版;Activiti是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速,稳定的BPMN2流程引擎。它易于与 Spring集成使用。

    Activiti基础视频教程下载

    上手迅速,功能丰富,对于一般的工作流应用都可以满足,什么是流程、工作流作用、Activiti背景简介、Activiti流程设计器安装、Activity环境搭建、通过HelloWorld掌握 Activiti操作流程的步奏、常见API使用、流程部署...

    ACTIVITI 实战

    实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述...

    activiti-explorer.war

    Activiti是一个优秀的业务流程管理(BPM)框架,优点是开源、灵活、易扩展。同时提供了eclipse,idea等插件,开发人员可以通过插件直接绘画出业务流程图,将业务...activiti-explorer 即Activiti自带的一款流程设计器

    Activiti工作流笔记.chm

    4.3:安装流程设计器(eclipse插件) 6 4.4:对流程设计器的使用说明 10 4.5:准备Activiti5开发环境 11 5:核心API 12 5.1:ProcessEngine 13 5.2:RepositoryService 13 5.3:RuntimeService 14 5.4:TaskService 14...

    Activiti6-modeler-demo-master.zip

    activiti6+springboot1.5.8 web开发整合流程设计器,activiti moder模型设计界面

    Activiti实战-高清PDF电子书-完整书签目录

    实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述...

    activiti实战(闫洪磊 高清完整中文PDF版(含书签))

    实战篇(5~14章)系统讲解了Activiti的用法、技巧和最佳实践,包含流程定义、流程实例、任务、子流程、多实例、事件以及监听器等;高级篇(15~21)通过集成WebService、规则引擎、JPA、ESB等各种服务和中间件来阐述...

    Activiti6.0教程例子下载

    6. ManagementService: ManagementService提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。 7. HistoryService: HistoryService用于获取正在...

Global site tag (gtag.js) - Google Analytics