首页 > 代码库 > Activiti实战03_Hello World

Activiti实战03_Hello World

  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