Activiti设置流程发起用户信息

简介:

先来看一段API调用:

?
1
2
List hpis = historyService.createHistoricProcessInstanceQuery()
             .startedBy(userCode).list();

查询结果为空,这是为什么?

1.原因说明

当通过runtimeService接口启动(startProcessInstance[Byxxx])流程的时候会设置一个变量,代码片段(ProcessDefinitionEntity.java#createProcessInstance):

?
85
86
87
88
89
String initiatorVariableName = (String) getProperty(BpmnParse.PROPERTYNAME_INITIATOR_VARIABLE_NAME);
if (initiatorVariableName!= null ) {
     String authenticatedUserId = Authentication.getAuthenticatedUserId();
     processInstance.setVariable(initiatorVariableName, authenticatedUserId);
}

从上面的代码片段中可以看出在启动流程的时候引擎会先从Authentication读取已认证用户信息;现在我们只要能设置认证用户的ID就可以了。

2.解决问题

查看API发现接口IdentityService有一个方法:setAuthenticatedUserId(String authenticatedUserId),正是这个方法在其接口实现类:org.activiti.engine.impl.IdentityServiceImpl#setAuthenticatedUserId中调用了Authentication.setAuthenticatedUserId()

解决办法很简单只要在启动流程之前调用API即可:identityService.setAuthenticatedUserId(userId);

?
1
2
identityService.setAuthenticatedUserId(userId);
processInstance = runtimeService.startProcessInstanceByKey( "leave" , entityId, variables);

当流程启动之后可以到表ACT_HI_PROCINST中查看字段START_USER_ID_的值来验证是否生效。

3.结束

问题很简单,但是官网的手册没有提到,希望让遇到问题的人少走弯路。

目录
相关文章
|
算法 安全 JavaScript
通过Postman实现API网关的请求签名与调试
Postman是一个非常强大的HTTP发包测试工具, 目前Postman已经提供了Windows/Mac/Linux系统的客户端的下载,使用很方便。不过API网关的调试,需要对HTTP请求进行签名才能调用,无法使用简单的curl等发包工具完成,但我们可以使用Postman工具提供的Pre-request Script脚本来实现API网关的签名功能,实现API的调试功能。
7099 0
|
10月前
|
人工智能 自然语言处理 供应链
AI技术落地方法论--从技术到生态的系统化落地
本文三桥君围绕AI技术落地难题,提出“点线面体”金字塔法则,系统解析从单点技术突破到行业生态构建的演进路径,并探讨技术支撑底座如何助力AI落地全过程。
511 29
|
弹性计算 自然语言处理 测试技术
30分钟私有部署Deepseek-R1和V3,轻松拥有企业专属超大模型
阿里云计算巢推出了基于 ECS镜像、Vllm和Ray集群的超大模型一键部署方案。该方案通过预置标准化环境的ECS镜像,结合自动化云资源编排模板(如Ros模板),将Deepseek-R1和Deepseek-V3的私有化部署流程简化为一键操作。用户无需深入理解底层技术细节,即可在 30分钟内 快速完成模型环境搭建与服务启动,真正实现“开箱即用”的企业级超大模型服务。
|
10月前
|
人工智能 自然语言处理 前端开发
AI 时代,那些你需要了解的开源项目(二) |AI开发工具篇
随着人工智能技术的发展,AI驱动的开发工具正改变软件开发方式。Bolt.diy和OpenHands作为GitHub上热门的开源项目,分别在Web应用构建与全栈开发自动化方面表现突出。Bolt.diy支持通过自然语言快速生成完整Web应用,适合原型开发与小型项目;而OpenHands则专注于复杂软件任务自动化,如代码编写、调试与测试,适用于专业团队和大型项目。两者均提供自部署方案,助力开发者提升效率,推动AI在软件开发中的深度应用。
1145 0
|
移动开发 前端开发
基于jeecg-boot的flowable流程收回功能实现(全网首创功能)
基于jeecg-boot的flowable流程收回功能实现(全网首创功能)
478 0
|
Shell Linux API
C语言在linux环境下执行终端命令
本文介绍了在Linux环境下使用C语言执行终端命令的方法。首先,文章描述了`system()`函数,其可以直接执行shell命令并返回结果。接着介绍了更强大的`popen()`函数,它允许程序与命令行命令交互,并详细说明了如何使用此函数及其配套的`pclose()`函数。此外,还讲解了`fork()`和`exec`系列函数,前者创建新进程,后者替换当前进程执行文件。最后,对比了`system()`与`exec`系列函数的区别,并针对不同场景推荐了合适的函数选择。
|
并行计算 数据可视化 算法
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
`CMplot`和`rMVP`是R语言中的两个包,用于全基因组关联分析(GWAS)的数据可视化。`CMplot`专注于曼哈顿图和QQ图的绘制,支持多种图表类型,如常见的SNP密度图、环状曼哈顿图、矩阵图、单条染色体图和多重曼哈顿图等。`rMVP`不仅包含了`CMplot`的功能,还支持更复杂的GWAS方法,如线性/混合线性模型和基因组选择算法,优化了内存管理和计算效率,特别适合大规模数据集。此外,它还提供PCA图和柱状图。两者都提供了丰富的参数定制图表。
2426 1
CMplot & rMVP | 全基因组曼哈顿图和QQ图轻松可视化!
|
固态存储 程序员 C#
游戏热更新:游戏客户端热更新那点事
游戏热更新:游戏客户端热更新那点事
|
XML Java 数据库
【二十三】springboot整合activiti7(1)实战演示篇
【二十三】springboot整合activiti7(1)实战演示篇
1522 0