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

工作流activiti技术学习和研究第五天

阅读更多

上节学习了流程实例,任务执行的知识点,今天接着学习流程变量相关知识。

1.流程变量

流程图请看附件;

流程变量在整个工作流中扮演很重要的作用。例如:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)

部署流程定义

public void deploymentProcessDefinition_inputStream(){
  InputStream inputStreambpmn = this.getClass().getResourceAsStream("/diagrams/processVariables.bpmn");
  InputStream inputStreampng = this.getClass().getResourceAsStream("/diagrams/processVariables.png");
  Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
      .createDeployment()//创建一个部署对象
      .name("请假流程定义")//添加部署的名称
      .addInputStream("processVariables.bpmn", inputStreambpmn)//使用资源文件的名称(要求:与资源文件的名称要一致),和输入流完成部署
      .addInputStream("processVariables.png", inputStreampng)//使用资源文件的名称(要求:与资源文件的名称要一致),和输入流完成部署
      .deploy();//完成部署
  System.out.println("部署ID:"+deployment.getId());//
  System.out.println("部署名称:"+deployment.getName());//
 }

启动流程实例

public void startProcessInstance() {
  ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service
    .startProcessInstanceByKey("processVariables");
  System.out.println("流程实例ID:" + pi.getId());// 流程实例ID
  System.out.println("流程定义ID:" + pi.getProcessDefinitionId());// 流程定义ID
 }

设置流程变量

public void setVariables(){
  TaskService taskService=processEngine.getTaskService();//获取service
  String taskId="904";
  taskService.setVariable(taskId,"请假天数",5);
  taskService.setVariableLocal(taskId,"请假原因","年假");
  taskService.setVariable(taskId,"请假时间",new Date());
  System.out.println("设置流程变量成功");
 }

获取流程变量

public void getVariables(){
  TaskService taskService = processEngine.getTaskService();
  String taskId="904";
  Integer days=(Integer) taskService.getVariable(taskId,"请假天数");
  Date date =(Date) taskService.getVariable(taskId,"请假时间");
  String reasean =(String) taskService.getVariable(taskId,"请假原因");
  System.out.println("请假天数:"+days);
  System.out.println("请假时间:"+date);
  System.out.println("请假原因:"+reasean);
 }

查询历史的流程变量

public void findHistoryProcessVariables(){
  List<HistoricVariableInstance> list =processEngine.getHistoryService()
                          .createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询对象
                          .variableName("请假时间").list();
  if(list!=null && list.size()>0){
   for(HistoricVariableInstance hvi:list){
    System.out.println(hvi.getId()+"   "+hvi.getProcessInstanceId()+"   "+hvi.getVariableName()+"   "+hvi.getVariableTypeName()+"    "+hvi.getValue());
   }
  }
 }

总结

    1:流程变量

在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。

对应的表:

act_ru_variable:正在执行的流程变量表

act_hi_varinst:流程变量历史表

该例子的bpmn文件内容如下:

 

<?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="processVariables" name="processVariablesProcess" isExecutable="true">
    <startEvent id="startevent1" name="Start"></startEvent>
    <userTask id="usertask1" name="提交申请" activiti:assignee="张晓晓"></userTask>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
    <userTask id="usertask2" name="经理审批" activiti:assignee="李大大"></userTask>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_processVariables">
    <bpmndi:BPMNPlane bpmnElement="processVariables" id="BPMNPlane_processVariables">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="300.0" y="70.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="265.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
        <omgdc:Bounds height="55.0" width="105.0" x="265.0" y="257.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="300.0" y="360.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="317.0" y="105.0"></omgdi:waypoint>
        <omgdi:waypoint x="317.0" y="160.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="317.0" y="215.0"></omgdi:waypoint>
        <omgdi:waypoint x="317.0" y="257.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="317.0" y="312.0"></omgdi:waypoint>
        <omgdi:waypoint x="317.0" y="360.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

2. 流程执行历史记录

查询历史流程实例

public void findHistoryActiviti(){
  List<HistoricActivityInstance> list =processEngine.getHistoryService()//创建历史活动实例的查询
    .createHistoricActivityInstanceQuery().processInstanceId("501")
    .orderByHistoricActivityInstanceStartTime().asc().list();
  if(list!=null && list.size()>0){
   for(HistoricActivityInstance hai:list){
    System.out.println(hai.getId()+"   "+hai.getProcessInstanceId()+"   "+hai.getActivityType()+"  "+hai.getStartTime()+"   "+hai.getEndTime()+"   "+hai.getDurationInMillis());
    System.out.println("#####################");
   }
  }
 }

/**查询历史任务*/
 @Test
 public void findHistoryTask(){
  String processInstanceId = "601";
  List<HistoricTaskInstance> list = processEngine.getHistoryService()//与历史数据(历史表)相关的Service
      .createHistoricTaskInstanceQuery()//创建历史任务实例查询
      .processInstanceId(processInstanceId)//
      .orderByHistoricTaskInstanceStartTime().asc()
      .list();
  if(list!=null && list.size()>0){
   for(HistoricTaskInstance hti:list){
    System.out.println(hti.getId()+"    "+hti.getName()+"    "+hti.getProcessInstanceId()+"   "+hti.getStartTime()+"   "+hti.getEndTime()+"   "+hti.getDurationInMillis());
    System.out.println("################################");
   }
  }
 }

/**查询历史流程变量*/
 //@Test
 public void findHistoryProcessVariables(){
  String processInstanceId = "601";
  List<HistoricVariableInstance> list = processEngine.getHistoryService()//
      .createHistoricVariableInstanceQuery()//创建一个历史的流程变量查询对象
      .processInstanceId(processInstanceId)//
      .list();
  if(list!=null && list.size()>0){
   for(HistoricVariableInstance hvi:list){
    System.out.println(hvi.getId()+"   "+hvi.getProcessInstanceId()+"   "+hvi.getVariableName()+"   "+hvi.getVariableTypeName()+"    "+hvi.getValue());
    System.out.println("###############################################");
   }
  }
 }

  • 大小: 6.4 KB
分享到:
评论

相关推荐

    工作流Activiti的学习总结(五)activiti的API和虚拟工作流测试.pdf

    在学习工作流Activiti的过程中,第五部分主要涵盖了Activiti API的使用和虚拟工作流的测试。Activiti是一个开源的工作流引擎,它提供了丰富的API来帮助开发者实现业务流程管理(BPM)功能。以下是对这些关键知识点的...

    工作流例子-activiti5

    工作流是一种用于自动化业务流程的技术,它通过定义和执行任务之间的逻辑关系来协调跨部门、跨系统的协同工作。Activiti 是一个开源的工作流引擎,它实现了业务流程模型与表示法(BPMN 2.0)标准,为开发者提供了一...

    Activiti工作流HelloWorld入门

    Activiti是一款开源的工作流引擎,它基于Java技术,用于在企业级应用中实现业务流程自动化。这个“Activiti工作流HelloWorld入门”旨在帮助初学者快速理解并掌握Activiti的基本用法。下面,我们将详细讲解如何创建一...

    Activiti工作流整合Web流程设计器整合

    Activiti是由Alfresco开发的一款轻量级工作流引擎,它基于Java技术,遵循BPMN 2.0标准,提供了丰富的API和工具支持,使得开发者能够轻松地构建复杂的业务流程。其核心功能包括流程定义、流程实例的启动和执行、任务...

    activiti-学习第一天

    ### 工作流基础知识与Activiti框架详解 #### 一、工作流概念解析 工作流(Workflow)是指“业务过程的部分或整体在计算机应用环境下的自动化”。它旨在通过自动化文档、信息或任务在多个参与者之间的传递流程,实现...

    Activiti学习第一天

    总之,"Activiti学习第一天"是一个良好的开端,通过逐步学习和实践,你将能够掌握Activiti的基本操作,并能将其应用于实际的业务流程自动化项目中,提高工作效率,优化工作流程。记住,持续学习和不断实践是掌握任何...

    基于Activiti5工作流实战企业协同OA办公系统教程第三部分

    在本教程中,我们将深入探讨基于Activiti5的工作流实战,特别是如何应用于企业协同OA(Office Automation)办公系统。Activiti5是一个强大的、轻量级的业务流程管理系统(BPMN 2.0)引擎,它为企业提供了一种高效、...

    activiti第四天

    在学习Activiti的第五天课程中,我们通常会涵盖以下几个关键知识点: 1. **流程定义与模型**:在这一天,我们将更深入地研究如何使用 Activiti Designer 创建和编辑BPMN 2.0流程图。这包括学习各种节点类型,如开始...

    《疯狂Workflow讲义:基于Activiti的工作流应用开发》

    第5部分:在第17章中讲述了Activiti的核心架构流程虚拟机以及Activiti的表单知识,本书最后一章,通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的...

    Activiti6.0教程例子下载

    以上部分对工作流、BPMN、Activiti的概念做了一个简单的介绍,目的是了解Activiti究竟是什么,能做些什么…及在学习Activiti之前需要了解的知识与技术。其中大部分文字来自Copy网上的各种资料与文档,通过总结而来的...

    activiti资料.zip

    探索Activiti Cloud,它是Activiti的云原生版本,旨在支持分布式、高可用和可扩展的工作流场景。 综上所述,"activiti资料.zip"中的资源是学习和掌握Activiti的宝贵材料,通过学习源码、观看视频教程并动手实践,你...

    activiti-5.22.0zip下载

    Activiti 是一个开源的工作流和业务流程管理(BPM)平台,它被广泛用于企业级应用中,以实现流程自动化和提升工作效率。标题中的 "activiti-5.22.0zip下载" 指的是Activiti的一个特定版本——5.22.0的压缩包文件,...

    Activiti7最新工作引擎资料.rar

    5. **Activiti基础**: "Activiti基础.pdf"可能涵盖如何安装和配置Activiti7,创建第一个流程定义,理解流程实例、任务和变量的概念,以及如何通过API或Web服务进行交互。这包括流程图的绘制、部署流程定义、启动流程...

    activiti-5.21.0-第一卷

    Activiti,作为一款开源的工作流引擎,被广泛应用于企业的业务流程自动化和管理中。它以其强大的功能、灵活的设计以及友好的社区支持,赢得了全球开发者的喜爱。在本资料包中,我们迎来了Activiti的5.21.0版本,这是...

    Activiti-6.0 官网资源

    Activiti 是一个强大的开源业务流程管理系统(BPM)和工作流引擎,专为开发人员和系统管理员设计。它提供了一套全面的工具和技术,帮助企业实现流程自动化,提高工作效率,并简化IT与业务之间的协作。 在 Activiti ...

    传智播客 activiti 视频资料 第2天 共4天

    Activiti 是一个开源的工作流引擎,它主要用于自动化业务流程。由Alfresco公司开发并维护,现已成为Apache软件基金会的顶级项目。这个“传智播客 activiti 视频资料 第2天 共4天”显然是一个针对Activiti的学习资源...

    activiti第一天1_2

    本教程“activiti第一天1_2”是针对初学者设计的一个五天学习计划,旨在确保你在短短几天内能够掌握Activiti的核心概念和技术。 在第一天的第二个阶段,我们将会深入探讨以下几个关键知识点: 1. **Activiti简介**...

    Activiti 视频课件 代码

    这套Activiti视频课件不仅覆盖了从基础到高级的所有知识点,还提供了丰富的代码示例和实战经验分享,对于想要学习和掌握Activiti工作流引擎的开发者来说是非常宝贵的资源。通过系统的学习,不仅可以帮助开发者快速...

    activiti-5.22.0.zip

    Activiti 是一个开源的工作流程引擎,它主要用于设计、部署和执行业务流程。这个"activiti-5.22.0....通过深入学习和实践 Activiti 5.22.0,你可以掌握工作流引擎的原理和操作,为企业的流程管理提供强大的技术支撑。

Global site tag (gtag.js) - Google Analytics