工作流控制台Activiti Explorer使用指南!使用Activiti Explorer定义部署执行工作流

简介: 本篇文章详细地介绍了工作流Activiti控制台的使用。工作流Activiti控制台是一个简单的工作流客户端程序,默认使用内存数据库。主要包括四个功能模块:任务管理模块,流程定义模块,历史数据模块和流程引擎模块。通过了解使用Activiti控制台,可以很方便地通过Web界面使用工作流。

Activiti Explorer简介

  • Activiti Explorer: Activiti控制台,是一个web应用程序
  • 从Activiti的官方网站下载Activiti的压缩zip文件时,Activiti控制台在 ${Activiti_home}/wars文件夹下面
  • 该控制台的目的并不是创建一个完善的web应用程序,仅仅是为客户端用户准备的应用程序.对于该控制台,使用了一个内存数据库,也可以换成自定义的数据库(查看WEB-INF文件夹下面的applicationContext.xml文件)
  • 登录控制台,有四个主要功能模块:

    • Tasks: 任务管理功能

      • 如果是任务执行人,可以看见运行中流程实例的待办任务,也可以拾取组任务
      • 控制台涉及的功能有子任务的工作,不同角色的人...
      • 控制台允许创建一个独立的任务,该任务不需要关联任何流程实例
    • Processes: 显示部署的流程定义列表,并且可以启动一个新的流程实例
    • Reports: 生成报表和显示之前保存历史的结果数据
    • Manage: 用于管理Activiti的流程引擎

      • 管理用户和组
      • 执行和查看停止的jobs
      • 查看数据库和部署新的流程定义
      • 登录的用户具有超级管理员权限才会显示

流程图

  • 控制台包含的功能,使用RaphaëlJavascript框架自动生成一张流程图:

    • 当流程定义XML包含的BPMN注入信息时,该流程图才能够生成
    • 当流程定义XML中并没有BPMN注入信息,但是部署的时候包含一张流程图,那么该图片也将会被显示

    -

  • 如果不想使用Javascript生成流程图,可以在ui.properties文件禁用
activiti.ui.jsdiagram = false
  • 控制台上显示流程图,也可以对流程图进行查看,根据流程定义的ID,显示流程定义图片:
http://localhost:8080/activiti-explorer/diagram-viewer/index.html?processDefinitionId=reviewSaledLead:1:36
  • 通过processInstanceId的请求参数,可以显示当前流程实例的状态:
http://localhost:8080/activiti-explorer/diagram-viewer/index.html?processDefinitionId=reviewSaledLead:1:36&processInstanceId=41

Tasks

  • 任务

在这里插入图片描述

  • Inbox: 显示登录用户需要办理的所有任务列表
  • My Tasks: 显示登录用户任务拥有者的任务列表:

    • 当创建一个独立的任务时,可以自动化操作该任务
  • Queued: 显示不用的组任务列表,并且登录用户在该组中:

    • 这里的所有任务都必须先拾取,然后才能够完成
  • Involved: 显示登录用户被参与的任务,即不是执行人和任务拥有者
  • Archived: 归档,包含已经完成历史任务

Processes

Deployed process definitions(部署流程定义)

  • 在流程定义选项卡中,允许查看Activiti流程引擎部署的所有流程定义
  • 可以使用页面顶部右边的按钮启动一个新的流程实例
  • 如果该流程定义有一个启动表单, 那么在启动流程实例之前就会先显示表单

-

My instances(我的流程实例)

  • 显示当前登录用户未完成的用户任务的所有流程实例
  • 直观地显示流程实例的当前活动和存储的流程变量

-

Manage

  • 在管理功能中,只有当登录用户是权限组admin中的成员时,该功能才会显示
  • 当点击Manage图标按钮:

Database

  • Database: 数据库.显示Activiti有关内容.当开发流程或者排除故障等问题的时候是非常有用的

在这里插入图片描述

Deployments

  • Deployments: 部署.显示当前部署的流程引擎,并且可以看到部署的内容:流程定义,流程图,业务规则,等等...

-

  • 当点击部署按钮时,可以上传新的部署:

    • 从自己的计算机中选择一个业务文档或者一个BPMN20.XML文件
    • 简单的拖拽到指定的区域就可以部署一个新的业务流程

在这里插入图片描述

Jobs

  • Jobs: 作业

    • 在左边显示当前的作业(定时器等等)并且运行手动执行(例如在截止时间之前触发定时器)
    • 如果作业执行失败(例如邮件服务器不能正常工作),那么就会显示所有的异常

    -

Users

  • Users: 管理用户

    • 创建,修改和删除用户.关联用户
    • 获取权限查看任务分配特定用户信息在这里插入图片描述

Groups

  • Groups: 管理组

    • 创建,修改和删除组,关联组
    • 获取权限查看任务分配特定组等信息

Reports

  • 报表:

在这里插入图片描述

  • ==注意:== 如果要让报表工作,控制台需要配置历史的级别不能为none.默认的配置是满足要求的
  • 报表选项卡的子选项卡有2个:

    • 生成报表:

      • 显示系统中已知的报表列表
      • 允许运行生成的报表
    • 保存报表:

      • 显示之前保存的所有报表列表
      • 仅仅显示的是个人保存的报表,并且不能看见其他人保存的报表
  • 流程的数据被用于生成报表中的列表和图标.使用流程生成报表数据的优势:

    • 该流程能够直接访问Activiti流程引擎的内部:

      • 直接可以使用流程引擎访问数据库
    • 作业执行器能够用于任何其他的流程:

      • 能够异步生成流程
      • 仅仅异步执行某些步骤
      • 可以使用定时器:在某些时间点上面生成报表数据
    • 可以用已知的工具和已知的概念创建一个新的报表:

      • 没有新的概念,服务或者应用被需要
      • 部署或者上传一个新的报表与部署一个新的流程是一样的
    • 可以使用BPMN2.0结构:

      • 意味着所有的东西:比如并行网关,可以实现基于数据或用户请求输入生成分支
  • 生成报表数据的流程定义需要把activiti-report设置为分类,这样就能在Explorer的报表列表中显示出来。
  • 能够看到报表的唯一要求是:

    • 流程创建一个名为reportData的流程变量,这个变量必须是json对象的二进制数组
    • 变量必须保存到Activiti的历史表中,所以要求引擎必须启用历史功能
    • 因此可以在后面报表保存时获取

在这里插入图片描述

reportData

  • 报表流程必须生成一个变量reportData, 作为展示给用户的JSON数据:
{
  "title": "My Report",
  "datasets": [
    {
      "type" : "lineChart",
      "description" : "My first chart",
      "xaxis" : "Year"
      "yaxis" : "Total sales"
      "data" :
      {
        "2010" : 50,
        "2011" : 33,
        "2012" : 17,
        "2013" : 87,
      }
    }
  ]
}

json数据会在Explorer中获取,并用来生成图表或列表

  • json的元素有:

    • title: 报表的标题
    • datasets: 数据集的数组,对应报表中不同的图表和列表
    • type: 数据集的类型. 这个类型会用来决定如何渲染数据,支持的值:

      • pieChart
      • lineChart
      • barChart
      • list
    • description: 每个图表在报表中显示一个描述,这个是可选的
    • xaxis: 只对lineChart类型起作用,这个参数是可选的,用来修改图表坐标系x轴的名称
    • yaxis: 只对lineChart类型起作用,这个参数是可选的,用来修改图表坐标系y轴的名称
    • data: 实际的数据,数据是一个key:value格式的json对象

流程实例

  • 流程实例总览报表:

    • 只包含一个脚本任务:使用javascript生成json数据集
    • 虽然所有Explorer中的例子都使用javascript, 也可以使用java服务任务
    • 执行流程最后的结果就是reportData变量,保存数据
<?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="activiti-report">

    <process id="process-instance-overview-report" name="Process Instance Overview" isExecutable="true">

        <startEvent id="startevent1" name="Start" />
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="generateDataset" />

        <scriptTask id="generateDataset" name="Execute script" scriptFormat="JavaScript" activiti:autoStoreVariables="false">
          <script><![CDATA[

               importPackage(java.sql);
               importPackage(java.lang);
               importPackage(org.activiti.explorer.reporting);

               var result = ReportingUtil.executeSelectSqlQuery("SELECT PD.NAME_, PD.VERSION_ , count(*) FROM ACT_HI_PROCINST PI inner join ACT_RE_PROCDEF PD on PI.PROC_DEF_ID_ = PD.ID_ group by PROC_DEF_ID_");

               var reportData = {};
               reportData.datasets = [];

               var dataset = {};
               dataset.type = "pieChart";
               dataset.description = "Process instance overview (" + new java.util.Date() + ")";
               dataset.data = {};

               while (result.next()) { // process results one row at a time
                 var name = result.getString(1);
                 var version = result.getLong(2)
                 var count = result.getLong(3);
                 dataset.data[name + " (v" + version + ")"] = count;
               }
               reportData.datasets.push(dataset);

               execution.setVariable("reportData", new java.lang.String(JSON.stringify(reportData)).getBytes("UTF-8"));
          ]]></script>
        </scriptTask>
        <sequenceFlow id="flow3" sourceRef="generateDataset" targetRef="theEnd" />

        <endEvent id="theEnd" />

    </process>

</definitions>
  • 除了流程xml顶部的标准xml,主要区别是targetNamespace设置为activiti-report,分类设置为与部署的流程定义一样的名称

    • 脚本的第一行是进行一些导入,避免每次使用时,都要写包名
    • 第一个有意义的代码是使用ReportingUtil读取activiti数据库.返回结果是一个JDBC 结果集
    • 查询语句下面 ,javascript创建了使用的json.json是符合上面描述的需求的
    • 最后一行脚本,首先需要把json对象转换成字符串,使用javascript函数JSON.stringify(). 字符串需要保存为二进制数组类型的变量

      • 这是一个技术问题:

        • 二进制数组的大小是无限的,但是字符串的长度有限制
        • 这就是为什么javascript字符串必须转换成一个java字符串以获得转换成二进制的功能
  • 原生json功能无法使用,这里提供了一些帮助类ReportDataDataset:
<?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="activiti-report">

    <process id="process-instance-overview-report" name="Process Instance Overview" isExecutable="true">

        <startEvent id="startevent1" name="Start" />
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="generateDataset" />

        <scriptTask id="generateDataset" name="Execute script" scriptFormat="js" activiti:autoStoreVariables="false">
          <script><![CDATA[

               importPackage(java.sql);
               importPackage(java.lang);
               importPackage(org.activiti.explorer.reporting);

               var result = ReportingUtil.executeSelectSqlQuery("SELECT PD.NAME_, PD.VERSION_ , count(*) FROM ACT_HI_PROCINST PI inner join ACT_RE_PROCDEF PD on PI.PROC_DEF_ID_ = PD.ID_ group by PROC_DEF_ID_");





               var reportData = new ReportData;
               var dataset = reportData.newDataset();
               dataset.type = "pieChart";
               dataset.description = "Process instance overview (" + new java.util.Date() + ")"


               while (result.next()) { // process results one row at a time
                 var name = result.getString(1);
                 var version = result.getLong(2);
                 var count = result.getLong(3);
                 dataset.add(name + " (v" + version + ")", count);
               }

               execution.setVariable("reportData", reportData.toBytes());

          ]]></script>
        </scriptTask>
        <sequenceFlow id="flow3" sourceRef="generateDataset" targetRef="theEnd" />

        <endEvent id="theEnd" />

    </process>

</definitions>

报告开始表单

  • 报表是使用普通流程来生成的,所以表单功能也可以使用
  • 直接在开始事件里加一个开始表单 ,Explorer就会在生成报表之前展示给用户
<startEvent id="startevent1" name="Start">
  <extensionElements>
    <activiti:formProperty id="processDefinition" name="Select process definition" type="processDefinition" required="true" />
      <activiti:formProperty id="chartType" name="Chart type" type="enum" required="true">
        <activiti:value id="pieChart" name="Pie chart" />
        <activiti:value id="barChart" name="Bar chart" />
      </activiti:formProperty>
  </extensionElements>
</startEvent>
  • 为用户渲染一个普通的表单:

-

  • 表单属性会在启动流程时提交,然后就可以像普通的流程变量一样使用.脚本中可以使用这些流程变量来生成数据:
var processDefinition = execution.getVariable("processDefinition");

流程示例

  • 控制台中包含4个报表示例:

    • Employee productivity(员工的工作效率):

      • 报表演示使用折线图和开始表单
      • 报表的脚本比其他例子要复杂,因为数据会在脚本中先进行解释,再保存到报表数据中
    • Helpdesk(一线与升级):

      • 使用饼图进行展示
      • 结合两个不同的数据库查询结果
    • Process instance overview(流程实例总览):

      • 使用多个数据集的报表实例
      • 报表包含使用相同数据的饼图和列表视图
      • 展示多种数据集可以用来在一个页面中生成不同图表
    • Task duration(任务持续时间):

      • 另一个使用开始表单的例子
      • 会使用对应的变量来动态生成SQL查询语句

修改数据库

  • 要修改控制台例子所用的数据库:

    • 改变属性文件:apps/apache-tomcat-6.x/webapps/activiti-explorer/WEB-INF/classes/db.properties
    • 在类路径下放上合适的数据库驱动:

      • Tomcat共享类库
      • apps/apache-tomcat-6.x/webapps/activiti-explorer/WEB-INF/lib/
相关文章
|
消息中间件 Java Apache
RocketMQ5.0 搭建 Name Server And Broker+Proxy 同进程部署、搭建RocketMQ控制台图形化界面
RocketMQ5.0 搭建 Name Server And Broker+Proxy 同进程部署、搭建RocketMQ控制台图形化界面
1320 0
|
运维 Kubernetes Linux
【Kubernetes】 Dashboard 控制台web部署应用
相比kubectl命令和yaml文件配置部署,图形化部署更简单,但是作为k8s运维,还是需要掌握yaml编写配置
924 0
【Kubernetes】 Dashboard 控制台web部署应用
|
10天前
|
弹性计算 开发工具 git
2分钟在阿里云ECS控制台部署个人应用(图文示例)
作为一名程序员,我在部署托管于Github/Gitee的代码到阿里云ECS服务器时,经常遇到繁琐的手动配置问题。近期,阿里云ECS控制台推出了一键构建部署功能,简化了这一过程,支持Gitee和GitHub仓库,自动处理git、docker等安装配置,无需手动登录服务器执行命令,大大提升了部署效率。本文将详细介绍该功能的使用方法和适用场景。
2分钟在阿里云ECS控制台部署个人应用(图文示例)
|
测试技术 Android开发
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
244 0
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
|
人工智能 自然语言处理 机器人
阿里云智能对话机器人控制台部署与发布详细说明
智能对话机器人(Intelligent Robot)是一款基于自然语言处理(NLP)和人工智能(AI)技术,面向开发者提供智能会话能力的云服务。开发者可以使用智能对话机器人创建会话机器人,为机器人配置知识库以实现智能问答,使用对话工厂配置意图实现多轮对话与自助服务(如订单查询、物流跟踪、自助退货等),并将机器人部署在不同终端上(如网站、移动APP、智能硬件等)。本文简述智能对话机器人控制台部署与发布的详细说明。
1062 0
阿里云智能对话机器人控制台部署与发布详细说明
|
Java 容器 Spring
Spring练习,定义三个模块,使用<import>标签完成分模块配置开发,模拟实现学生借书和还书的过程,将结束输出到控制台。
Spring练习,定义三个模块,使用<import>标签完成分模块配置开发,模拟实现学生借书和还书的过程,将结束输出到控制台。
197 0
Spring练习,定义三个模块,使用<import>标签完成分模块配置开发,模拟实现学生借书和还书的过程,将结束输出到控制台。
|
Java
Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。
Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。
445 0
Java初学者作业——编写JAVA程序,在控制台输入一位学生的英语考试成绩,根据评测规则,输出对应的成绩等级。定义方法实现学生成绩的评测功能。
|
Java
Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。
Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。
563 0
Java初学者作业——编写Java程序,在控制台中输入一个数字,要求定义方法实现找出能够整除该数字的所有数字。
|
Java
Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
530 0
Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
|
Java 应用服务中间件 数据库
工作流框架Activiti基本介绍!Activiti Explorer流程控制台介绍和Activiti数据库安装说明
本文是对工作流框架的基本介绍,介绍了工作流流程引擎的用户控制台Activiti Explorer和Activiti的集成环境。对工作流框架Activiti安装数据库以及数据库的使用方式进行说明。介绍了工作流框架Activiti生成用户和群组,流程dingyi以及数据模型的方式等功能,以及功能的启用禁用方式。
298 0
工作流框架Activiti基本介绍!Activiti Explorer流程控制台介绍和Activiti数据库安装说明