Activiti 工作流入门指南
概览
如我们的介绍部分所述,Activiti目前分为两大类:
如果你想上手Activiti的核心是否遵循了新的运行时API的入门指南:Activiti Core
如果你想基于Kuberantes构建Activiti,你可以参考Activiti Cloud HELM Charts:Activiti Cloud
Activiti Core入门
Activiti Core Runtime API入门
创建新API的目的明确,以满足以下要求:
为我们的云方法提供明确的途径
隔离内部和外部API以提供向后兼容性
遵循单一责任方法,提供模块化的未来之路
减少以前版本的API的混乱
将安全和身份管理作为一等公民
减少您希望依赖流行框架提供的约定的常见用例的价值时间
提供底层服务的替代实现
使社区能够在尊重既定合同的同时进行创新
我们尚未弃用旧API,因此您仍然可以自由使用它,但我们强烈建议您使用新API以获得长期支持。
我们尚未弃用旧API,因此您仍然可以自由使用它,但我们强烈建议您使用新API以获得长期支持。
是时候通过几个示例项目弄清楚了 。
TaskRuntime API
如果要构建业务应用程序,则可以为组织中的用户和组创建任务。
TaskRuntime API可以帮助您。
您可以从GitHub克隆这个例子:https://github.com/Activiti/activiti-examples
本节中的代码可以在“activiti-api-basic-task-example”maven模块中找到。
如果您在Spring Boot 2应用程序中运行,则只需添加activiti-spring-boot-starter依赖项和DB驱动程序,您可以将H2用于内存存储。
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
我们建议使用我们的BOM(物料清单)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.0.0.Beta1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
现在让我们切换到我们的DemoApplication.class : https://github.com/Activiti/activiti-examples/blob/master/activiti-api-basic-task-example/src/main/java/org/activiti/examples/DemoApplication.java#L25
现在让我们切换到我们的DemoApplication.class
@Autowired
private TaskRuntime taskRuntime;
将bean注入应用程序后,您应该能够创建任务并与任务交互。
public interface TaskRuntime {
TaskRuntimeConfiguration configuration();
Task task(String taskId);
Page tasks(Pageable pageable);
Page tasks(Pageable pageable, GetTasksPayload payload);
Task create(CreateTaskPayload payload);
Task claim(ClaimTaskPayload payload);
Task release(ReleaseTaskPayload payload);
Task complete(CompleteTaskPayload payload);
Task update(UpdateTaskPayload payload);
Task delete(DeleteTaskPayload payload);
...
}
例如,您可以通过执行以下操作来创建任务:
taskRuntime.create(
TaskPayloadBuilder.create()
.withName("First Team Task")
.withDescription("This is something really important")
.withGroup("activitiTeam")
.withPriority(10)
.build());
只有属于activitiTeam的用户和所有者(当前登录的用户)才能看到此任务。
您可能已经注意到,您可以使用TaskPayloadBuilder以流畅的方式参数化将要发送到TaskRuntime的信息。
为了处理安全性,角色和组,我们依赖于Spring Security模块。因为我们在Spring Boot应用程序中,所以我们可以使用UserDetailsService来配置可用用户及其各自的组和角色。我们目前在@Configuration类中执行此操作:https://github.com/Activiti/activiti-examples/blob/master/activiti-api-basic-task-example/src/main/java/org/activiti/examples /DemoApplicationConfiguration.java#L26
需要注意的一点是,为了与用户交互TaskRuntime API,您需要具有以下角色:ACTIVITI_USER(授权机构:ROLE_ACTIVITI_USER)。
虽然与REST端点交互授权机制将建立在当前登录的用户,但对于例如起见,我们使用的是实用类(https://github.com/Activiti/activiti-examples/blob/master/activiti -api-basic-task-example / src / main / java / org / activiti / examples / SecurityUtil.java#L26)允许我们在上下文中设置手动选择的用户。请注意,除非您正在尝试并且想要在不通过REST端点的情况下更改用户,否则不应该这样做。查看“web”示例以查看根本不需要此实用程序类的更多真实场景。
从示例中突出显示的最后一件事是任务事件监听器的注册:
@Bean
public TaskRuntimeEventListener taskAssignedListener() {
return taskAssigned
-> logger.info(
">>> Task Assigned: '"
+ taskAssigned.getEntity().getName()
+"' We can send a notification to the assignee: "
+ taskAssigned.getEntity().getAssignee());
}
您可以根据需要注册任意数量的TaskRuntimeEventListeners。这将使您的应用程序能够通过服务触发的运行时事件得到通知。
ProcessRuntime API
以类似的方式,如果要开始使用ProcessRuntime API,则需要包含与以前相同的依赖项。我们的目标是在未来提供更多的灵活性和单独的运行时,但是现在相同的Spring Boot Starter提供了TaskRuntime和ProcessRuntime API。
本节中的代码可以在“activiti-api-basic-process-example”maven模块中找到。
public interface ProcessRuntime {
ProcessRuntimeConfiguration configuration();
ProcessDefinition processDefinition(String processDefinitionId);
Page processDefinitions(Pageable pageable);
Page processDefinitions(Pageable pageable,
GetProcessDefinitionsPayload payload);
ProcessInstance start(StartProcessPayload payload);
Page processInstances(Pageable pageable);
Page processInstances(Pageable pageable,
GetProcessInstancesPayload payload);
ProcessInstance processInstance(String processInstanceId);
ProcessInstance suspend(SuspendProcessPayload payload);
ProcessInstance resume(ResumeProcessPayload payload);
ProcessInstance delete(DeleteProcessPayload payload);
void signal(SignalPayload payload);
...
}
与TaskRuntime API类似,为了与ProcessRuntime API交互,当前登录的用户需要具有角色“ACTIVITI_USER”。
首先,让我们自动装配我们的ProcessRuntime:
@Autowired
private ProcessRuntime processRuntime;
@Autowired
private SecurityUtil securityUtil;
与以前一样,我们需要SecurityUtil帮助器来代表我们与API交互的用户进行定义。
现在我们可以开始与ProcessRuntime进行交互:
Page processDefinitionPage = processRuntime
.processDefinitions(Pageable.of(0, 10));
logger.info("> Available Process definitions: " +
processDefinitionPage.getTotalItems());
for (ProcessDefinition pd : processDefinitionPage.getContent()) {
logger.info("\t > Process definition: " + pd);
}
流程定义需要放在/ src / main / resources / processes /中。对于此示例,我们定义了以下过程:
我们使用Spring Scheduling功能每秒启动一个进程,从数组中获取随机值来处理:
@Scheduled(initialDelay = 1000, fixedDelay = 1000)
public void processText() {
securityUtil.logInAs("system");
String content = pickRandomString();
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yy HH:mm:ss");
logger.info("> Processing content: " + content
+ " at " + formatter.format(new Date()));
ProcessInstance processInstance = processRuntime
.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey("categorizeProcess")
.withProcessInstanceName("Processing Content: " + content)
.withVariable("content", content)
.build());
logger.info(">>> Created Process Instance: " + processInstance);
}
这些连接器使用Bean名称自动连接到ProcessRuntime,在此示例中为“processTextConnector”。这个bean名称是从我们的流程定义中的serviceTask元素的implementation属性中获取的:
<bpmn:serviceTask id="Task_1ylvdew" name="Process Content" implementation="processTextConnector">
这个新的Connector接口是JavaDelegates的自然演变,新版本的Activiti Core将尝试通过将它们包装在Connector实现中来重用JavaDelagates:
public interface Connector {
IntegrationContext execute(IntegrationContext integrationContext);
}
连接器接收带有过程变量的IntegrationContext,并返回一个修改后的IntegrationContext,其结果需要映射回过程变量。
在前面的示例中,连接器实现正在接收“content”变量并基于内容处理逻辑添加“approved”变量。
在这些连接器中,您可能包括系统到系统调用,例如REST调用和基于消息的交互。这些交互往往变得越来越复杂,因此我们将在未来的教程中看到如何从ProcessRuntime(云连接器)的上下文之外的运行中提取这些连接器,从而将这些外部交互的责任分离出去。 ProcessRuntime范围。
检查maven模块activiti-api-spring-integration-example以获得更高级的示例,使用Spring Integrations基于File轮询器来启动进程。
完整的例子
您可以使用ProcessRuntime和TaskRuntime API找到一个示例来自动执行以下过程:
本节中的代码可以在“activiti-api-basic-full-example”maven模块中找到。
仅作为ProcessRuntime示例,这也是对某些输入内容进行分类,但在这种情况下,该进程依赖于Human Actor来决定是否批准内容。我们像以前一样有一个计划任务,每5秒创建一个新的流程实例,模拟用户检查是否有可用的任务。
和
UserTask创建给一组潜在的用户,在本例中为“activitiTeam”组。但在这种情况下,我们不会像第一个示例那样手动创建任务。每次启动进程时,流程实例都会为我们创建任务。
<bpmn:userTask id="Task_1ylvdew" name="Process Content">
<bpmn:incoming>SequenceFlow_09xowo4</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_1jzbgkj</bpmn:outgoing>
<bpmn:potentialOwner>
<bpmn:resourceAssignmentExpression>
<bpmn:formalExpression>activitiTeam</bpmn:formalExpression>
</bpmn:resourceAssignmentExpression>
</bpmn:potentialOwner>
</bpmn:userTask>
属于该组的用户将能够声明并处理该任务。
我们建议您运行这些示例并进行实验,如果您有疑问或发现问题,请与我们联系。
概要
在这篇博文中,我们已经了解了如何开始使用新的Activiti Core Beta1项目中的新ProcessRuntime和TaskRuntime API。
我们建议您检查Activiti的例子库,为更多的例子:https://github.com/Activiti/activiti-examples
帮助我们编写更多这些示例可能是一个非常好的初始社区贡献。如果您有兴趣,请联系我们,我们非常乐意为您提供指导。
如果您对这些示例和教程有疑问或反馈,请随时通过Gitter与我们联系:https://gitter.im/Activiti/Activiti7 ? utm_source = share-link & utm_medium = link & utm_campaign = share-link 。
更多博客文章将介绍Runtime Admin API以及如何调整这些示例以在我们的新Activiti Cloud方法中执行。
原文地址:https://blog.csdn.net/tanjie_123/article/details/82598157
Activiti 工作流入门指南的更多相关文章
- activiti工作流入门学习
工作流一般在OA系统用的比较多,当然,只要有流程审批的地方都会用到,activiti只是开源的工作流中比较流行的一个,还有其他的开源的工作流,这里学习activiti工作流:前面部分是关于activi ...
- Activiti工作流入门
Activiti简介 Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度. Activiti 作为一个遵从 Apache 许可的工 ...
- 工作流Activiti新手入门学习路线整理
写在前面: 最近项目中使用到了工作流,虽然此部分不是自己需要完成的,但是也涉及到了要调用写的接口.正好有时间,就了解下,以便之后能在其他项目中用到时,不至于什么都不知道什么都不了解. 这里就主要整理下 ...
- 【Activiti工作流引擎】官方快速入门demo
Activiti官方快速入门demo 地址: https://www.activiti.org/quick-start 0. 版本 activiti 5.22.0 JDK 1.8 1. 介绍 这个快速 ...
- mxGraph进阶(一)mxGraph教程-开发入门指南
mxGraph教程-开发入门指南 概述 mxGraph是一个JS绘图组件适用于需要在网页中设计/编辑Workflow/BPM流程图.图表.网络图和普通图形的Web应用程序.mxgraph下载包中包括用 ...
- 深入了解Activiti工作流流程定义
深入了解Activiti工作流流程定义 2016-03-27| 发布: | 浏览: 2363 |保存PDF 部署流程定义 部署流程定义的流程: 1. 先获取流程引擎对象:在创建时会自动加载 class ...
- 【转】mxGraph教程-开发入门指南
原文:https://blog.csdn.net/sunhuaqiang1/article/details/51289580 mxGraph教程-开发入门指南 概述 mxGraph是一个JS绘图组件适 ...
- KNIME快速入门指南
一.介绍 KNIME Analytics Platform是用于创建数据科学应用程序和服务的开源软件.KNIME直观,开放,不断整合新的开发,使人们可以理解数据,设计数据科学工作流程和可重用组件. ...
- Docker 入门指南
Docker 入门指南 目录 基础概念 安装教程 基本操作 常用安装 构建操作 容器编排 壹.基础概念 什么是Docker? Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装 ...
随机推荐
- 用两个栈实现队列功能【剑指offer】
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 程序代码: [方法一] class Solution { public: void push(int ...
- js面向对象开发基础
js的面向对象开发能力较弱,基本是以prototype为核心的面向对象,虽然现在出了个class这玩意,但本文还是先不做探讨. 面向对象基础——构造函数方法 var Fly = function (s ...
- Mysql查询优化-DB篇
本文重点从数据库本身角度,硬件和环境的优化不在本文范围内 1. 使用索引(Index All Columns Used in 'where', 'order by', and 'group by' C ...
- 为什么DW的可视化下看到的效果与浏览器的效果有所区别?
可视区不是调用外面浏览器,Dreamweav 可视化区是为用户编辑而设计. 支持最基本的 HTML 与 CSS ,对 CSS 而言,我写入样式时如果你使用最基本的样式时它显示与你浏览器中看的效果相差不 ...
- Redhad的开源Paas平台:OpenShift
参考redHat的官方文章翻译而来:https://openshift.redhat.com/community/wiki/architecture-overview OpenShift Origin ...
- Mybatis - plus 配置与运用
Mybatis - plus mybatis-plus 官方文档 1.配置 引入对应的文件包,spring boot + mybatis 需添加依赖文件如下: <dependencies> ...
- 学习es6
#第一节 初始化项目 npm init -y 安装babel-cli npm install -g babel-cli npm install --save-dev babel-preset-es20 ...
- Leetcode849.Maximize Distance to Closest Person到最近的人的最大距离
在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的. 至少有一个空座位,且至少有一人坐在座位上. 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上. 返回 ...
- input的表单验证(不断更新中~~)
1 手机号验证 <input type="tel" id="phone" name="phone" placeholder=" ...
- Sublime Text3安装教程,配置教程,常用插件安装等方法
前言: sublimeText3的特点: 1.Sublime Text 是一款跨平台代码编辑器,在Linux.OS X和Windows下均可使用. 2.Sublime Text 是可扩展的,并包含大量 ...