You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Activiti BPMN:如何传递完成任务的用户名至Shell任务参数

如何在Activiti中将任务办理人传递给Shell任务并存入数据库

嘿,作为Activiti新手,你这个需求其实挺常见的,我来给你一步步拆解怎么实现~

1. 先把任务办理人存成流程变量

当用户完成User Task时,Activiti会自动记录这个任务的办理人(也就是assignee)。我们需要把这个值存到流程变量里,方便后续Shell任务调用。

最简单的方式是给User Task加一个任务完成监听器:

  • 在BPMN编辑器里选中你的User Task,找到「任务监听器」配置项
  • 添加一个监听器,事件类型选complete(任务完成时触发)
  • 选择「表达式」类型,输入以下表达式:
    execution.setVariable("completedUsername", task.assignee)
    
    这样就把完成任务的用户名存到名为completedUsername的流程变量里了。

2. 给Shell任务配置参数

接下来到你的Shell Task配置页面,在「命令」输入框里,把流程变量作为参数传给你的脚本。比如你的脚本叫save-user-to-db.sh,那命令可以写成:

./save-user-to-db.sh ${completedUsername}

Activiti在执行Shell任务时,会自动把${completedUsername}替换成实际的用户名。

3. 编写Shell脚本处理参数并存库

最后写你的Shell脚本,接收传入的用户名参数,然后插入到数据库里。这里举个MySQL的例子:

#!/bin/bash
# 第一个参数就是传递过来的用户名
TARGET_USER=$1

# 替换成你的数据库信息
DB_USER="your_db_username"
DB_PASS="your_db_password"
DB_NAME="your_database_name"
TABLE_NAME="your_target_table"

# 执行插入操作(注意:生产环境要避免SQL注入,建议用参数化方式)
mysql -u ${DB_USER} -p${DB_PASS} -D ${DB_NAME} -e "INSERT INTO ${TABLE_NAME} (username) VALUES ('${TARGET_USER}');"

⚠️ 重要提醒:直接把参数拼进SQL有SQL注入风险,生产环境可以考虑用mysql的--execute配合预处理语句,或者用其他工具(比如psql对于PostgreSQL)来安全传递参数。

小测试技巧

你可以先启动一个测试流程,完成User Task后,用Activiti的API或者控制台查看completedUsername这个变量是否正确设置,再触发Shell任务验证参数是否传递成功,这样能快速定位问题~

内容的提问来源于stack exchange,提问作者Ravindra Rane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:20:47