Hello World如此经典,以至于几乎学习没一门新的技术都是从Hello World开始,可能意味着开启了新世界的大门吧,接下来就让我们一起步入到Activiti的世界中吧!

  本文所使用开发环境

  JDK1.8、Maven、Eclipse(Version: Neon Release (4.6.0))

1:最简单的流程定义

  1.1 Activiti项目创建

    打开Eclipse -> File -> New -> Other -> 输入Activiti -> 选择Activiti Project -> 输入文件名

           

    创建好的项目结构如图所示(典型的Maven项目结构):

      

      项目建好了,就可以开始了,右键diagrams -> New -> Other -> Activiti Diagram ,选定后随便起个名字就行了。

      进入文件后会看到在Eclipse的右边有一个控件栏一样的东西

        

      创建一个最简单的流程定义,主要会用到Event控件,至于剩下的其他控件的使用,会在后续做出说明。然后选择一个StartEvent

        

      在开始任务之后在选择一个结束任务(EndEvent),至此,一个最简单的流程定义就完成了,如下图所示:

    

      其实Activiti的Bpmn流程图也是通过Xml进行描述的,右键该流程图 -> Open With -> XML editor

   代码清单

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:activiti="http://activiti.org/bpmn"
    xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
    xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
    xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
    typeLanguage="http://www.w3.org/2001/XMLSchema"
    expressionLanguage="http://www.w3.org/1999/XPath"
    targetNamespace="http://www.activiti.org/test">
<process id="myProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
<bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="140.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="250.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="175.0" y="137.0"></omgdi:waypoint>
<omgdi:waypoint x="250.0" y="137.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

  代码清单解读:

   1:<definitions></definitions>

      在该标签之间的内容属于整个流程定义的所有信息

   2:<process></process>(非常重要)

      在该标签中的是流程相关信息,是能够在Properties中进行修改和添加的。

       id:唯一标识符,如果id相同,表明是同一流程,Activiti将会对其进行升级部署

       name:流程图名称

      <startEvent id="startevent1" name="Start"></startEvent>

        这段XML主要是对开始节点的命名和属性设置

      <endEvent id="endevent1" name="End"></endEvent>

        这段XML主要是对结束节点的命名和属性设置

      <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow>

        这段XML是对流程图中连线的解读,从哪开始,流向哪里:

        sourceRef:连线的起点(对应相关节点的id)

        targetRef:连线的终点(对应相关节点的id)

        id:连线的标识

   3:<bpmndi:BPMNDiagram></bpmndi:BPMNDiagram>(基本不需要关心)

      该标签这个是为了给流程图中任务添加显示框所用的定位信息,标注了每个元素的位置信息。

  在Activiti的开发中,有一个至关重要的窗口——Properties窗口,在这个窗口内包含了这个流程的所有基本信息,以及对这个流程的所有操作。

  Properties窗口的调出方式:Window -> Show View -> Otehr -> Properties即可

2:测试

  

public class VerySimpleLeaveProcessTest {

    @Test
public void testStartProcess(){
// 创建流程引擎,使用内存数据库
ProcessEngine processEngine = ProcessEngineConfiguration
.createStandaloneInMemProcessEngineConfiguration()
.buildProcessEngine();
// 部署流程定义文件
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
.addClasspathResource("diagrams/ch02Leave.bpmn")
.deploy();
// 验证已部署的流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.singleResult();
assertEquals("myProcess",processDefinition.getKey());
// 启动流程并返回流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance instance = runtimeService.startProcessInstanceByKey("myProcess");
assertNotNull(instance); } }

输出结果,如果输出有结果,就说明你成功了:

 

  

Activiti实战03_Hello World的更多相关文章

  1. Activiti实战04_简单流程

    在Activiti实战03_Hello World中我们介绍了一个中间没有任何任务的流程,实现了流程的部署与查阅,而在本章中,将会为流程添加任务节点,是流程能够像个流程,变得更加丰满起来. 在上一节的 ...

  2. activiti实战--第二章--搭建Activiti开发环境及简单示例

    (一)搭建开发环境 学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html ...

  3. activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  4. 2017.3.14 activiti实战--第二十章--REST服务

    学习资料:<Activiti实战> 第二十章 REST服务 20.1 通信协议概述 略. 20.2 REST API概述 资源分类 资源基础URI 说明 Deployments manag ...

  5. 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单

    学习资料:<Activiti实战> 第七章  Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...

  6. 2017.2.28 activiti实战--第六章--任务表单(二)外置表单

    学习资料:<Activiti实战> 第六章 任务表单(二)外置表单 6.3 外置表单 考虑到动态表单的缺点(见上节),外置表单使用的更多. 外置表单的特点: 页面的原样显示 字段值的自动填 ...

  7. 2017.2.28 activiti实战--第六章--任务表单(一)动态表单

    学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. ...

  8. 2017.2.28 activiti实战--第五章--用户与组及部署管理(三)部署流程及资源读取

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(三)部署流程及资源读取 内容概览:如何利用API读取已经部署的资源,比如读取流程定义的XML文件,或流程对应的图片文件. 以 ...

  9. 2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种 ...

随机推荐

  1. Android Support Library 学习入门

    0. 文前闲话 作为一个由原生桌面应用程序开发者(VC.Delphi)转行的Android菜鸟,虐心的事真是数不胜数:安装个开发工具下载个SDK需要整整一夜:早晨一上班点开Android Studio ...

  2. MapReduce模型简介

  3. MATLAB 去掉数组里面不要的元素

    trainfinger=1 testingfinger=(1:8); testingfinger = testingfinger(~ismember(testingfinger,trainfinger ...

  4. 【学术篇】SPOJ-DISQUERY

    一道傻逼链剖我TM总共差不多写了一小时,调了将近一天!!!!!! 题目传送门:http://www.spoj.com/problems/DISQUERY/ 嗯,偷偷递小广告:SPOJ是个挺好的OJ ( ...

  5. 洛谷P2371 [国家集训队]墨墨的等式

    P2371 [国家集训队]墨墨的等式 题目描述 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=Ba_1x_1+a_2y_2+-+a_nx_n=Ba1​x1​+a2​y2​+-+a ...

  6. Apache下更改.htaccess文件名称

    有时候我们需要更改.htaccess的名称以解决一些问题 比如:Eclipse下是不显示点开头的文件的 所以我们可以使用  Apache的AccessFileName来更改此配置文件的名称 Acces ...

  7. openSUSE中启用apache mod_rewrite

    1. 编辑 "/etc/sysconfig/apache2"文件 查找 APACHE_MODULES,你应该会找到一行像 APACHE_MODULES="actions ...

  8. js实现把多个数据分成3个一组

    主要代码: var stuCount = res.data; if (stuCount.length>0){ var objList = new Object(); var arr = new ...

  9. show master status

    只有在主库上执行才能有效抵输出: 具体文档如下: # 在127.:3306主库上执行 tmp@127.0.0.1 ((none))> show variables like '%server%' ...

  10. leetcode-第5周双周赛-1135-最低成本联通所有城市

    方法一: class Solution: def minimumCost(self, N: int, conections: List[List[int]]) -> int: def find( ...