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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:07:14