首页 > 其他分享 >FlowableAPI的使用

FlowableAPI的使用

时间:2024-04-03 19:11:24浏览次数:17  
标签:Map String variables executionId 使用 FlowableAPI processEngine 变量

image

// 它涉及启动流程定义的新流程实例。
RuntimeService runtimeService = processEngine.getRuntimeService();

// RepositoryService 可能是使用 Flowable 引擎时需要的第一个服务。
RepositoryService repositoryService = processEngine.getRepositoryService();
// 围绕任务的所有内容都分组在 TaskService 中
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

Query API 查询接口

从引擎查询数据有两种方式:查询API和本机查询。查询 API 允许您使用流畅的 API 编写完全类型安全的查询。您可以向查询添加各种条件(所有这些条件都作为逻辑 AND 一起应用)和精确的一个排序。以下代码显示了一个示例:

//  指定查询条件,仅返回分配给 "kermit" 用户的任务
//指定查询条件,仅返回流程变量 "orderId" 的值为 "0815" 的任务。这表示只查询具有特定订单ID的任务。
//按照任务的到期日期(Due Date)升序
List<Task> tasks = taskService.createTaskQuery()
    .taskAssignee("kermit") 
    .processVariableValueEquals("orderId", "0815")
    .orderByDueDate().asc()
    .list();

Variables 变量

每个流程实例都需要并使用数据来执行其组成的步骤。在 Flowable 中,这些数据称为变量,存储在数据库中。变量可以用在表达式中(例如,在独占网关中选择正确的外出顺序流),在调用外部服务时的Java服务任务中(例如,提供服务调用的输入或存储服务调用的结果)等等。在。
image

流程实例可以具有变量(称为流程变量),而且执行(是指向流程活动位置的特定指针)和用户任务也可以具有变量。流程实例可以具有任意数量的变量。每个变量都存储在 ACT_RU_VARIABLE 数据库表中的一行中。

所有 startProcessInstanceXXX 方法都有一个可选参数,用于在创建和启动流程实例时提供变量。例如,从运行时服务:

     RuntimeService runtimeService = processEngine.getRuntimeService();
        /*键是稍后将用于检索变量的标识符*/
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("employee", employee);
        variables.put("nrOfHolidays", nrOfHolidays);
        variables.put("description", description);
        /*当流程实例启动时,将创建一个执行并将其放入启动事件中。从那里开始,此执行遵循用户任务的序列流以供经理批准并执行用户任务行为。
        此行为将在数据库中创建一个任务,稍后可以使用查询找到该任务。用户任务处于等待状态,引擎将停止进一步执行任何操作,返回 API 调用。*/
        ProcessInstance processInstance =
                runtimeService.startProcessInstanceByKey("holidayRequest", variables);//<!--    使用密钥启动流程   -->

可以在流程执行期间添加变量。例如,(运行时服务):

void setVariable(String executionId, String variableName, Object value);
void setVariableLocal(String executionId, String variableName, Object value);
void setVariables(String executionId, Map<String, ? extends Object> variables);
void setVariablesLocal(String executionId, Map<String, ? extends Object> variables);

还可以检索变量,如下所示。请注意,TaskService 上也存在类似的方法。这意味着任务(如执行)可以具有仅在任务持续时间内“活动”的局部变量。

Map<String, Object> getVariables(String executionId);
Map<String, Object> getVariablesLocal(String executionId);
Map<String, Object> getVariables(String executionId, Collection<String> variableNames);
Map<String, Object> getVariablesLocal(String executionId, Collection<String> variableNames);
Object getVariable(String executionId, String variableName);
<T> T getVariable(String executionId, String variableName, Class<T> variableClass);

变量通常用在 Java 委托、表达式、执行或任务侦听器、脚本等中。在这些构造中,当前执行或任务对象可用,并且可用于变量设置和/或检索。最简单的方法是:

// 获取实际的任务列表
TaskService execution = processEngine.getTaskService();

execution.getVariables();
execution.getVariables(Collection<String> variableNames);
execution.getVariable(String variableName);

execution.setVariables(Map<String, object> variables);
execution.setVariable(String variableName, Object value);

标签:Map,String,variables,executionId,使用,FlowableAPI,processEngine,变量
From: https://www.cnblogs.com/zgf123/p/18113371

相关文章

  • 从基础到高级,带你深入了解和使用curl命令(二)
    前言之前我们介绍了curl命令的请求网络,设置代理等操作,本文我们继续来介绍curl命令的操作,本文我们将会介绍curl命令中有关cookie的操作。获取cookie要获取服务器发送的Cookie,可以使用curl命令的-c选项,将Cookie保存到文件中。例如:curl-ccookiec.txthttp://www.baidu.com......
  • 【进来一起刷Java题】Java中使用空对象引用调用静态方法的奇特现象 附题目+解析 | ((Te
    目录一、题目二、解析三、答案:一、题目有关下述Java代码描述正确的选项是____。答案直接点目录里的跳转。publicclassTestClass{  privatestaticvoidtestMethod(){    System.out.println("testMethod");  }  publicstaticvoidmain(Str......
  • Python 使用matplotlib创建各种静态、动态、交互式和3D图表的功能
    在Python中,你可以使用各种库来创建和显示图表。其中,最常用的库之一是matplotlib,它提供了创建各种静态、动态、交互式和3D图表的功能。另一个流行的库是seaborn,它基于matplotlib,并提供了更高级别的界面,用于绘制有吸引力的统计图形。以下是一个使用matplotlib创建并显示简单折线......
  • RabbitMQ3.x之六_RabbitMQ使用场景
    RabbitMQ3.x之六_RabbitMQ使用场景文章目录RabbitMQ3.x之六_RabbitMQ使用场景1.为什么选择RabbitMQ?1.可互操作2.灵活3.可靠2.常见用户案例1.服务解耦2.远程过程调用3.流处理4.物联网1.为什么选择RabbitMQ?RabbitMQ是一个可靠且成熟的消息传递和流代......
  • 工作中使用Redis的10种场景
    工作中使用Redis的10种场景 前言Redis作为一种优秀的基于key/value的缓存,有非常不错的性能和稳定性,无论是在工作中,还是面试中,都经常会出现。今天这篇文章就跟大家一起聊聊,我在实际工作中使用Redis的10种场景,希望对你会有所帮助。1.统计访问次数对于很多官方网站的首页,经......
  • Markdown的使用
    Markdown的使用分割线在一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西,也可以在星号或是减号中间插入空格书写格式:***********-------------效果:Markdown段落书写格式:#一级标题##二级标题###三级标题####四级标题#####五级标题......
  • [转帖]浅堆深堆与内存泄露以及使用OQL语言查询对象信息
    https://www.cnblogs.com/lvxueyang/p/14833614.html 1.浅堆(ShallowHeap)浅堆是指一个对象所消耗的内存。在32位系统中,一个对象引用会占据4个字节,一个int类型会占据4个字节,long型变量会占据8个字节,每个对象头需要占用8个字节。根据堆快照格式不同,对象的大小可能会同8字......
  • 使用 Node.js 连接 MySQL
    使用Node.js连接MySQL 概述当使用Node.js开发Web应用程序时,经常需要与数据库进行交互来存储和检索数据。MySQL 是一个流行的关系型数据库管理系统,它提供了强大的功能和性能。本文将介绍如何使用Node.js连接MySQL数据库,并展示一些常见的操作示例。开始在这里我们将......
  • 在Express中使用Cookie和Session
    在Express中使用Cookie和Session 如果想要通过NodeJS使用cookie,那么你需要安装"cookie-parser"包,如果是session那么需要安装"cookie-session"安装方法:npminstallcookie-parser-Snpminstallcookie-session-S然后在服务端引用varcookieParser=require('cookie-p......
  • 使用NodeJS将数据保存成JSON文件
    使用NodeJS将数据保存成JSON文件 在平时我需要把后端一些object变量保存至本地,可以这样做:constexpress=require("express");constapp=express();constserver=require("http").createServer(app);constfs=require('fs');app.use(express.static("publ......