使用pyzeebe Worker无法获取Camunda任务变量的问题排查
问题:PyZeebe Worker无法获取Camunda用户任务表单变量
我用Python开发了一个PyZeebe Worker,目的是借助Camunda BPMN中前置用户任务的变量值与数据库交互。已定义带表单的用户任务,创建了服务任务并配置taskDefinition,Worker可以和Zeebe正常通信,但始终无法获取到表单变量。
Python Worker代码
from pyzeebe import ZeebeWorker, Job, create_insecure_channel import asyncio import psycopg2 import logging async def handle_database_transaction(job: Job) -> dict: variables = job.variables # 记录接收到的变量 logging.info(f"Received variables: {variables}") selected_date = variables.get('selected_date') selected_project_id = int(variables.get('selected_project_id')) if variables.get('selected_project_id') else None # 记录提取的字段值 logging.info(f"Selected date: {selected_date}, Project ID: {selected_project_id}") # 若变量存在,执行数据库插入操作(此处省略具体逻辑) return {}
当前BPMN的IO映射配置
<zeebe:ioMapping> <zeebe:output source="=select_0swn49" target="output_project" /> <zeebe:output source="=datetime_gporzh" target="output_date" /> </zeebe:ioMapping> <zeebe:ioMapping> <zeebe:input source="=output_project" target="selected_project_id" /> <zeebe:input source="=output_date" target="selected_date" /> </zeebe:ioMapping>
问题排查与修复方案
1. IO映射配置位置错误
你将用户任务的输出映射和服务任务的输入映射放在了两个独立的<zeebe:ioMapping>节点中,这不符合Zeebe的BPMN规范。正确的做法是:
- 用户任务的输出映射必须配置在用户任务节点的
ioMapping内部 - 服务任务的输入映射必须配置在服务任务节点的
ioMapping内部
2. 修正后的IO映射配置
用户任务节点内的输出映射
<userTask id="userTask1" name="选择项目和日期"> <zeebe:ioMapping> <zeebe:output source="=select_0swn49" target="output_project" /> <zeebe:output source="=datetime_gporzh" target="output_date" /> </zeebe:ioMapping> <!-- 其他用户任务配置(如表单、分配规则等) --> </userTask>
服务任务节点内的输入映射
<serviceTask id="serviceTask1" name="数据库操作"> <zeebe:taskDefinition type="database-transaction" /> <zeebe:ioMapping> <zeebe:input source="=output_project" target="selected_project_id" /> <zeebe:input source="=output_date" target="selected_date" /> </zeebe:ioMapping> </serviceTask>
3. 额外验证步骤
- 用Zeebe Operate工具查看流程实例的变量列表,确认用户任务完成后,
output_project和output_date是否已被写入流程变量 - 检查Worker注册的任务类型(如
database-transaction)是否与服务任务的taskDefinition中的type完全一致(大小写、拼写均需匹配) - 查看Worker日志,确认
Received variables中是否包含selected_project_id和selected_date
内容的提问来源于stack exchange,提问作者okaeiz
相关产品推荐
相关产品推荐

