JBPM4.4工作流引擎学习(五)

本文详细介绍了工作流引擎中的执行服务、任务服务和历史服务。包括如何启动流程实例、操作流程变量、完成任务以及访问历史流程实例等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



执行服务ExecutionService

ExecutionService主要用于维护流程实例,执行等待状态的流程,并且包含了流程实例的查询和流程变量的操作。

.启动新的流程实例

1)使用Key启动最新的流程实例

executionService.startProcessInstanceByKey("VWIN");

上述方法会以KeyVWIN流程定义的最新版本启动一个新的流程实例,是最简单且最常用的方法。

  1. 指定流程版本

executionService.startProcessInstanceById("VWIN-2");

上述方法会以流程为VWIN-2的定义启动一个新的流程实例,VWIN是流程定义的Key2是流程定义的版本。

  1. 指定流程实例的ID

executionService.startProcessInstanceByKey("VWIN","CGD0008");

上述方法与第a种方法类似,唯一区别是手动指定了流程实例的ID,这个ID可以用我们的业务对象ID,例如采购单。

  1. 使用变量

Map<String,Object> variables = new HashMap<String,Object>(); variables.put("customer", "John Doe");

variables.put("type", "Accident");

variables.put("amount", new Float(763.74));

executionService.startProcessInstanceByKey("VWIN",variables);

上述方法在启动流程实例时,就会将设置的变量保存,启动后可以使用这些变量。任务服务TaskService

  1. 任务列表的访问

TaskService主要是提供了对任务列表的访问及操作,如:

//查找指定用户的任务列表

List<Task> taskList=taskService.findPersonalTasks("marker");

//查找指定组的任务列表

List<Task> groupTaskList = taskService.findGroupTasks("hr-group");

for (Task task : taskList) {

//TODO

taskService.completeTask(task.getId());

}

2) 读写相关数据

一般情况下,我们在执行任务时都会对应一个表单,表单可以读写任务的相关数据。

taskService.getVariable(taskId, variableName);

taskService.getVariables(taskId,variableNames); taskService.getVariableNames(taskId);

taskService.setVariables(taskId, variables);

3) 完成任务

我们可以通过以下几种方式完成任务:

taskService.completeTask(taskId);

taskService.completeTask(taskId,variables); taskService.completeTask(taskId,outcome); taskService.completeTask(taskId,outcome,variables);

我们可以提供一个map,在任务完成之前作为流程变量添加到流程实例中,也可以提供一个outcome(出口),以决定任务完成后的流向。但是我们需要注意任务的不同配置将会带来的问题:

taskService.getOutComes(taskId)

  1. 如果一个任务拥有一个没有nametransition

<task name="myTask">

<transition to="end"/>

</task>

taskService.getOutcomes(taskId);//返回一个包含null值的集合

taskService.completeTask(taskId);//使用这个

transition taskService.completeTask(taskId, variables);//使用这个transition

taskService.completeTask(taskId,outcome);//抛出异常

taskService.completeTask(taskId, outcome, variables);//抛出异常

  1. 如果一个任务拥有一个有nametransition

<task name="myTask">

<transition name="to end" to="end"/>

</task>

taskService.getOutcomes(taskId);//返回包含这个transition名称的集合 taskService.completeTask(taskId);//使用这个transition

taskService.completeTask(taskId, variables); //抛出异常(因为没有无名的transition

taskService.completeTask(taskId, outcome);//根据指定的名称执行转移(如果没有该名称,则抛出异常)

taskService.completeTask(taskId, outcome, variables);//抛出异常(因为没有无名的transition

  1. 如果一个任务拥有多个transition,而其中一个没有name,其他都有name

<task name="myTask">

<transition to="next"/>

<transition name="to other task" to="otherTask"/>

<transition name="to end" to="end"/>

</task>

taskService.getOutcomes(taskId);//返回一个包含null值和其他transition名称的集合

taskService.completeTask(taskId);//使用没有名称的transition

taskService.completeTask(taskId, variables);//使用没有名称的transition

taskService.completeTask(taskId, outcome);//使用指定名称的transition

taskService.completeTask(taskId, outcome, variables);//使用指定名称的transition

  1. 如果一个任务拥有多个transition,并且都有唯一的name

<task name="myTask">

<transition name="to next" to="next"/>

<transition name="to other task" to="otherTask"/>

<transition name="to end" to="end"/> </task> taskService.getOutcomes(taskId);//返回一个包含null值和其他transition名称的集合

taskService.completeTask(taskId);//抛出异常(因为没有无名的transitiontaskService.completeTask(taskId, variables); //抛出异常(因为没有无名的 transition

taskService.completeTask(taskId, outcome);//使用指定名称的transition

taskService.completeTask(taskId, outcome, variables);//使用指定名称的transition

历史服务HistoryService

历史服务顾名思义就是对流程实例的运行时历史进行访问,如果想查询某流程定义的所有历史流程实例,可以使用如下方法:

historyService.createHistoryProcessInstanceQuery() .processDefinitionId(processDefinitionId

.orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME) .list();

 
 

以上是我们常用的几个服务

### 如何使用 Dify 创建 ChatFlow Dify 是一款强大的工具,支持 RAG 和 Chat 功能,并允许用户通过简单的配置来创建复杂的对话流 (ChatFlow)[^1]。以下是关于如何利用 Dify 来构建 ChatFlow 的详细说明。 #### 配置环境 在开始之前,确保已经安装并运行了 Dify 平台。如果尚未完成此操作,请参考官方文档或相关教程进行初始化设置[^2]。 #### 创建基础 Chat 流程 1. **启动新项目** 登录到 Dify 控制面板后,在界面中找到新建项目的选项,选择适合自己的模板或者手动建立空白项目用于自定义开发[^1]。 2. **集成大模型服务** 在 Dify 中可以通过简单几步实现与主流云端 AI 模型以及本地化部署的大规模预训练模型连接。这一步通常涉及 API 密钥输入或其他认证方式验证过程。 3. **设计交互逻辑** 使用图形化编辑器拖拽节点组件来搭建整个会话路径图谱。每个节点代表特定功能模块比如问候语句处理、问题分类解析等环节;边线则表示不同条件分支下的跳转关系。 4. **测试初步效果** 完成上述基本架构设定之后就可以立即试用看看实际表现情况怎么样啦!点击模拟按钮开启一轮虚拟客户交流体验吧~ 如果发现某些地方不够理想的话记得返回调整优化哦! #### 进阶定制化 当熟悉了基础框架运作原理以后还可以进一步探索更多高级特性: - 添加多媒体素材支持:除了纯文字形式外还能够嵌入图片链接地址甚至是实时音视频通话能力扩展; - 调整权重算法提升精准度:通过对历史数据的学习不断改进预测准确性从而让回复更加贴近真实需求场景; - 外部数据库联动查询:假如企业内部存在现成可用的数据源那么完全可以将其无缝融入进来作为补充参考资料来源之一。 ```python # 示例代码片段展示如何调用远程API接口获取动态更新内容填充至最终呈现给用户的答案部分当中去。 import requests def fetch_latest_news(topic): url = f"https://api.example.com/news?topic={topic}" response = requests.get(url) if response.status_code == 200: news_data = response.json() return news_data['articles'][0]['title'] else: return "Failed to retrieve the latest news." latest_headline = fetch_latest_news('technology') print(latest_headline) ``` 以上就是有关于怎样借助 Dify 工具平台快速高效地打造出属于自己的个性化聊天机器人解决方案的整体思路概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值