在使用camunda7的版本中,发一下一个奇怪的特性,任务在没有结束前是可以查询到Variables信息的,但是在任务结束后,就无法通过API或者函数
查询任务变量的API:Get Task Variables
简单工单举例:
通过查询运行中的任务,可以找到任务ID: aefc0127-142d-11f0-aafd-0242ac194011
任务完整信息:
{'assignee': 'user1', 'case_definition_id': None, 'case_execution_id': None, 'case_instance_id': None, 'delegation_state': None, 'description': None, 'execution_id': 'aefbda13-142d-11f0-aafd-0242ac194011', 'form_key': None, 'id_': 'aefc0127-142d-11f0-aafd-0242ac194011', 'name': '审批节点', 'owner': None, 'parent_task_id': None, 'priority': 50, 'process_definition_id': 'Process_0pimjiv:2:b00795e0-13b9-11f0-8e74-0242ac194011', 'process_instance_id': 'aefb8bec-142d-11f0-aafd-0242ac194011', 'suspended': False, 'task_definition_key': 'Activity_1r7zu6e', 'created': datetime.datetime(2025, 4, 8, 11, 58, 9, 32000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'due': None, 'follow_up': None}
任务ID: aefc0127-142d-11f0-aafd-0242ac194011
任务名称: 审批节点
创建时间: 2025-04-08 11:58:09.032000+08:00
流程实例ID: aefb8bec-142d-11f0-aafd-0242ac194011
流程定义ID: Process_0pimjiv:2:b00795e0-13b9-11f0-8e74-0242ac194011
审批人: user1
流程实例详情:
ProcessInstance(id_='aefb8bec-142d-11f0-aafd-0242ac194011', definition_id='Process_0pimjiv:2:b00795e0-13b9-11f0-8e74-0242ac194011', business_key='order-123', case_instance_id=None, tenant_id=None, suspended=False, links=(), variables=None)
同时查询当前任务的Variables
query_task_variable:73 - {'field1': {'type': 'String', 'value': 'some_value', 'valueInfo': {}}, 'initialField1Value': {'type': 'String', 'value': 'some_value', 'valueInfo': {}}, 'assignee1': {'type': 'String', 'value': 'user1', 'valueInfo': {}}}
之后,将任务结束,再次查询任务里的变量,发现无法通过API接口查询
查询出错: 500 Server Error: for url: http://camunda.local:8080/engine-rest/task/aefc0127-142d-11f0-aafd-0242ac194011/variables
root@arr:/service/app/integrations/camunda/test# curl http://camunda.local:8080/engine-rest/task/aefc0127-142d-11f0-aafd-0242ac194011/variables
{"type":"NullValueException","message":"task aefc0127-142d-11f0-aafd-0242ac194011 doesn't exist: task is null","code":0}
使用库函数,也无法获取到已完成的任务变量
class LocalVariablesGetList(pycamunda.base.CamundaRequest):
task_id = PathParameter('id')
deserialize_values = QueryParameter('deserializeValues')
def __init__(
self,
url: str,
task_id: str,
deserialize_values: bool = False
):
"""Get local variables of an user task.
Local variables are variables that do only exist in the context of a task.
:param url: Camunda Rest engine URL.
:param task_id: Id of the task.
:param deserialize_values: Whether serializable variable values are deserialized on server
side.
"""
super().__init__(url=url + URL_SUFFIX + '/{id}/localVariables')
self.task_id = task_id
self.deserialize_values = deserialize_values
评论区