• 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);
            
        }
    
    }

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

     

      

  • 相关阅读:
    bootstrap表格
    Bootstrap的学习
    cssText文本格式化
    for循环坐标生成《逢五向上转》
    for循环坐标生成《逢十往下一行》
    for
    bootstrap学习笔记细化(表格)
    bootstrap学习笔记细化(按钮)
    bootstrap学习笔记细化(表单)
    bootstrap学习笔记细化(标题)
  • 原文地址:https://www.cnblogs.com/homeword/p/7096540.html
Copyright © 2020-2023  润新知