activiti流程开发基本步骤_第1页
activiti流程开发基本步骤_第2页
activiti流程开发基本步骤_第3页
activiti流程开发基本步骤_第4页
activiti流程开发基本步骤_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、activiti流程开发指南 一、BPMN 二、activiti主要接口 三、如何实现一个业务流程 四、如何管理所有流程与实例 五、开发流程 六、api 、BPMN 1. 什么是BPMN 首先BPMN规范是由标准组织 BPMI发布的.BPMN 1.0规范发布于2004年5月。此规范展示 了 BPMI组织两年多的努力成果。 BPMN的主要目标就是要提供被所有业务用户理解的一套标记 语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的 BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。 BPMN定义了业务流程图,其基于流程图技术,

2、同时为创建业务流程操作的图形化模型进行了裁 减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控 制。 2. BPMN基础 业务流程图由一系列的图形化元素组成。这些元素简化了模型的开发,且业务分析者看上去非 常熟悉。这些元素每个都有各自的特性,且与大多数的建模器类似。比如,活动是矩形,条件是菱 形。应该强调的是:开发 BPMN的动力就是为了在创建业务流程模型时提供一个简单的机制,同 时又能够处理来自业务流程的复杂性。要处理这两个矛盾的需求的方法就是将标记的图形化方面组 织分类为特定的类别。这里提供标记类别中的一小部分,以便业务流程图 的读者可以简单地识别 岀元素

3、的基本类型从而理解图形。以下是四种基本的类型: 1 )流对象 2 )连接对象 3 )泳道 4 )人工信息 BPMN2.0 概要:Qn/workclass/201206272.asp 1、activiti 主要接口 / UL 1 3Il : I C3 ProcessE ngine processE ngine = ProcessE ngines .getDefaultProcessE ngi ne (); Run timeServicerun timeService= processE ngine .getRu ntimeService (); Reposito

4、ryService repositoryService = processE ngine . getRepositoryService (); TaskService taskService = processEngine .getTaskService (); Man ageme ntServiceman ageme ntService = processE ngine .getMa nageme ntService(); Ide ntityService ide ntityService = processE ngine .getIde ntityService (); HistorySe

5、rvice historyService= processE ngine .getHistoryService (); FormService formService = processE ngine .getFormService (); ProcessE ngi nes.getDefaultProcessE ngi ne()会在第一次调用时初始化并创建一个流 程引擎,以后再调用就会返回相同的流程引擎。使用对应的方法可以创建和关闭所有流程引擎: ProcessEngines.init()和 ProcessEngines.destroy()。 ProcessEngines会扫描所有 activ

6、iti.cfg.xml 和 activiti-context.xml文件。对于 activiti.cfg.xml文件,流程引擎会使用Activiti的经典方式构建: ProcessE ngineCon figurati on .createProcessE ngineCon figurati onF romI nputStream (inputStream).buildProcessEngine().对于 activiti-context.xml文件,流程引擎会使 用Spring方法构建:先创建一个Spring的环境,然后通过环境获得流程引擎。 所有服务都是无状态的。这意味着可以在多节点集群环

7、境下运行Activiti,每个节点都指向同一个数据 库,不用担心哪个机器实际执行前端的调用。无论在哪里执行服务都没有问题 Repositoryservice可能是使用Activiti引擎时最先接触的服务。它提供了管理和控制发布包和 流程定义的操作。这里不涉及太多细节,流程定义是BPMN 2.0流程的java实现。它包含了一个 流程每个环节的结构和行为。发布包是Activiti引擎的打包单位。一个发布包可以包含多个BPMN 2.0 xml文件和其他资源。开发者可以自由选择把任意资源包含到发布包中。既可以把一个单独的 BPMN 2.0 xml文件放到发布包里,也可以把整个流程和相关资源都放在一起。

8、(比如,hr- processes实例可以包含hr流程相关的任何资源)。可以通过RepositoryService来部署这种发 布包。发布一个发布包,意味着把它上传到引擎中,所有流程都会在保存进数据库之前分析解析好。 从这点来说,系统知道这个发布包的存在,发布包中包含的流程就已经可以启动了。 除此之外,服务可以 o 查询引擎中的发布包和流程定义。 o 暂停或激活发布包,对应全部和特定流程定义。暂停意味着它们不能再执行任何操作了, 激活是对应的反向操作。 o 获得多种资源,像是包含在发布包里的文件,或引擎自动生成的流程图。 o 获得流程定义的 pojo版本,可以用来通过java解析流程,而不必通

9、过xml。 正如RepositoryService负责静态信息(比如,不会改变的数据,至少是不怎么改变 的),Run timeService正好是完全相反的。它负责启动一个流程定义的新实例。如上所述,流程 定义定义了流程各个节点的结构和行为。流程实例就是这样一个流程定义的实例。对每个流程定义 来说,同一时间会有很多实例在执行。RuntimeService也可以用来获取和保存流程变量。这些 数据是特定于某个流程实例的,并会被很多流程中的节点使用(比如,一个排他网关常常使用流程变 量来决定选择哪条路径继续流程)。Runtimeservice也能查询流程实例和执行。执行对应bpmn 2.0中的tok

10、en。基本上执行指向流程实例当前在哪里。最后,RuntimeService可以在流程实 例等待外部触发时使用,这时可以用来继续流程实例。流程实例可以有很多 暂停状态,而服务提供 了多种方法来触发实例,接受外部触发后,流程实例就会继续向下执行。 任务是由系统中真实人员执行的,它是Activiti这类BPMN引擎的核心功能之一。所有与任务有关的 功能都包含在 TaskService 中: o 查询分配给用户或组的任务 o 创建独立运行任务。这些任务与流程实例无关。 o 手工设置任务的执行者,或者这些用户通过何种方式与任务关联。 o 认领并完成一个任务。认领意味着一个人期望成为任务的执行者,即这个用

11、户会完成这个 任务。完成意味着 做这个任务要求的事情”。通常来说会有很多种处理形式。 IdentityService非常简单。它可以管理(创建,更新,删除,查询)群组和用户。请注意, Activiti执行时并没有对用户进行检查。例如,任务可以分配给任何人,但是引擎不会校验系统中是否 存在这个用户。这是Activiti弓I擎也可以使用外部服务,比如ldap,活动目录,等等。 FormService是一个可选服务。即使不使用它,Activiti也可以完美运行,不会损失任何功能。这 个服务提供了 启动表单和任务表单两个概念。启动表单会在流程实例启动之前展示给用户,任务表 单会在用户完成任务时展示。A

12、ctiviti支持在BPMN 2.0流程定义中设置这些表单。这个服务以一种简 单的方式将数据暴露出来。再次重申,它时可选的,表单也不一定要嵌入到流程定义中。 HistoryService 提供了 Activiti引擎收集的所有历史数据。在执行流程时,引擎会保存很多数据 (根据配置),比如流程实例启动时间,任务的参与者,完成任务的时间,每个流程实例的执行路 径,等等。这个服务主要通过查询功能来获得这些数据。 ManagementService 在使用Activiti的定制环境中基本上不会用到。它可以查询数据库的表和表的 元数据。另外,它提供了查询和管理异步操作的功能。Activiti的异步操作用

13、途很多,比如定时器,异 步操作,延迟暂停、激活,等等。 如何实现一个业务流程 1. 静态表单(每个节点绘制对应的表单) o 创建工作流实例(process_model ) 冒市咳 幵培三请 o 创建每个节点的jsp表单 taskListl.jsp w view-formljsp 一般以list页面弹岀一个form表单页面就可以,至于表单的字段隐藏或者展示,由表单自己控制 o 部署流程 把process_model导出为BPMN.XML格式,再导入进行流程部署 ID KEY Karr# TO鯛 环J-1 11 175D5 qjDBmD 1 FUF注韻呼黑站C5T 2D1Ei FflF肋為叩代胡S

14、T 201S fnanrna-,QPftmoJiaMdlDn*1 dasovtiDn* 厝僅 17B54 1 FHF梅2R 14-324 CT 2D16 FfiF曲器 1* 苕 24C3T 201S ifnamp J叮.nwHliMf ffiarafcHlBPWHIJSQH aim 17772 1 FrtFw26 17: 开始业务流程 /用来设置启动流程的人员ID,引擎会自动把用户ID保存到activitynitiator中 identityService .setAuthenticatedUserld(entity.getUserld(); /process 为流程 key process

15、, bus in essKey, Map list = query.listPage(pageParams pageParams 1); 已结束列表 HistoricProcess In sta nceQuery query = historyService.createHistoricProcess In sta nceQuery().process Defin iti on Key(process).fi nished().orderByProcessl nsta nceE n dTime().desc(); List list = query.listPage(pageParams0,

16、pageParams 1 ); 四、如何管理所有流程与实例 *查看所有已部署的流程 repositoryService.createProcessDefi nitio nQuery().active().o rderByDeployme ntld().desc(); * 查看所有待办 tasks = taskService .createTaskQuery().active().orderByTaskld().desc ().list(); 个人待办 tasks = taskService .createTaskQuery().taskCa ndidateOrAssig ned(user. g

17、etld().active().orderByTaskld().desc().list(); * 查看所有办理中 Process In sta nceQuery dyn amicQuery = run timeService.createProcess In sta nceQuery().orderByProcessl n sta nceld().desc().active(); 办理中(本人) Process In sta nceQuery dyn amicQuery = run timeService .createProcessl nsta nceQuery().i nvolvedUse

18、r(UserUtil.getUserFromSessio n(sessi on ).getld().orderByProcessl nsta nceld().desc().active(); 查看所有已办 HistoricProcessl nsta nceQuery dyn amicQuery = historyService.createHistoricProcessl nsta nceQuery().fi nishe d().orderByProcessl nsta nceE ndTime().desc(); 已办(本人) HistoricProcessI nsta nceQuery dy

19、n amicQuery = historyService.createHistoricProcess In sta nceQuery().i nv olve dUser(UserUtil.getUserFromSessio n(sessio n).getld().fi nishe d().orderByProcessl nsta nceE ndTime().desc(); 五、开发流程 1. 绘制流程图 Multi-i nsta nee type代表是单用户还是多用户, *单节点,多用户流程:必须设置下图红框属性, Collection (Multi-instance): Completion

20、 condition (Multi- Collectio n (Multi-i nsta nee),代表是用户的集合名称,需要在代码中设置 Eleme nt variable (Multi-i nsta nee),集合中的属性,不需要设置。 id; rtep2 DKurrwrrtatiQin : Np viilue AEynchnonaus; IZJ Exclusive z ExLTtiHi liEtenerE z No cecutkm listcfKT? configuncd Multi-instance lype: | ParalW| Cardiinalrty (Mutti-initair

21、KC): No value Collection (Multi-iinstarice!: | ;j小航 Element viiakrie (Muhi-inftanc): 1 护t CompletioH diticn (Mutti- No alde If for compMcation: instance): Assignmehts:L Aiiiatiee 骂(狙 并行网关 ,不管是否设置条件,都会并行执行 包容网关 根据条件可以执行单个或多个分支。 注意点:1.绘制流程的时候,箭头保证一定要已连接到usertask 2. 保证网关使用的时候,条件要写明 Flow condition:$冏 3.

22、 保证流程绘制的简单化,重复节点最好保证使用同一个usertask,减少jsp代码的编 2. 表单编写 比E 2016-134-0 A9 f:曇軽*匕葺曲區予总 tl|XFHJE宅色 = S!tX 暑埠盍=3t;l0町 4I?TXCt H倉銘屯:KM|I 3. 编写后台entity public 匚lass SendCar extends Model private String phone; private String ycNote; (3Colunin(coluinnDefinition = date) privat亡 Date y匚BeginTime; i3Column(coluinn

23、Definition = date) private Datie ycEndTime; Column(columnDefinition = *number private private privat亡 private private private private int ycNum; String mdd; String ksSuggestion; String IdSuggestion; String carNo; String driv皂厂; String driverPhone; Column(columnDefinition = date11) private Date begin

24、Time; Calumn(columDefinition = date11) private Date endTime; Column( columnDefinition = number) private Float beginLcsj Column(columnDefin ition = number) private Float endLcs; * entity继承model类,model类中存在一个公共的业务实体commmodel,用来存储表单共用的的属 性。 4. 编写后台 controller roller tlgfteqiuestapping(value 7眾Mg/J publi

25、c cla PostConst广u ct private word: initHodel( try if (this.Kdel = ny. made 1 Cl ass I Jr cmtth (Except ion Sendcar(; =(Class model.getclass(j e) gger.error(initModel fai 启訪测程 / Rquszt pping( walue = Etart net hod = RquE tMhthQdFOS?J ResponseBody public String st art Workflow (St ring foniDa t 日 Eizr

26、in 思HttpSession SESsion; String key variable try Tiodel = FastJsonytils parseObje匚七(干口rmDaitaiiS七广久n思 mdslClass ); Hapotringj objects variables = var*getvariabl variables put:(userK6y f Arrays *aList(split)j User user = Uservtil. getUserFroaiSessicnCsession) ticceI 吕EtComEudEl : . setuserlc ; usi String no 書 pc* + seqj md e 1 a ge t CMWitMod e 1 ()set No(no); iTart._2rkf lc.; kea.ariables !: * controller继承 modelcontroller,modelcontroller存在待办,已办,办理的查询列表,完成以及 开始功能也存在,只是由于开始和完成可能存在不同的业务需求,所以还是写在自己的 controller 中。 startWorkflow 开始流程 complete完成任务 + taskList待办列表 runningList 办理列表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论