我正在使用Activiti 5.12
。正如在其用户指南中所提供的,REST API可以获取流程实例的详细信息:
GET /process-instance/{processInstanceId}
它的反应是这样的:
{
"id": "2",
"processDefinitionId": "financialReport:1",
"businessKey": "55",
"startTime": "2010-10-13T14:54:26.750+02:00",
"startActivityId": "startFinancialAnalysis",
"startUserId": "kermit",
"completed": false,
"tasks": [
{
"taskId": "3",
"taskName": "Analyze report",
"owner": null,
"assignee": "Kermit",
"startTime": "2010-10-13T14:53:26.750+02:00",
"completed": false
}
],
"activities": [
{
"activityId": "4",
"activityName": "Get report",
"activityType": "ServiceTask",
"startTime": "2010-10-13T14:53:25.950+02:00",
"completed": true,
"duration": 200
}
],
"variables": [
{
"variableName": "reportName",
"variableValue": "classified.pdf"
}
],
"historyVariables": [
{
"variableName": "reportName",
"variableValue": "classified.pdf",
"variableType": "String",
"revision": 1,
"time": "2010-10-13T14:53:26.750+02:00"
}
]
}
还提供了相同的JAVA API,它是:
ProcessEngines.getProcessEngine(configuredProcessEngineName).getHistoryService().createHistoricProcessInstanceQuery().processInstanceId("somevalue").singleResult()
此Java API不起作用,因为返回类型HistoricProcessInstance
没有获取任务列表的方法。
我的目标是获取流程实例的当前状态,即它当前所处的任务。
REST API列出了流程实例已执行的所有任务,列表的最后一项任务是当前正在执行的任务,因为其属性completed
为false
。
我想从java代码中实现相同的目标。
你能帮我解决一下吗?达到我的目标的任何其他方式对我来说也没问题。答案 0 :(得分:1)
您可以使用HistoricService
API的另一个查询:
List<HistoricTaskIntance> taskList = getHistoryService()
.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.list()
当前任务状态可以由HistoricTaskInstance.getEndTime()
定义,对于打开的任务将返回null
。
答案 1 :(得分:0)
我已经尝试过了。
SELECT NAME_ FROM act_hi_taskinst where PROC_INST_ID_= 1000 and END_TIME_ IS NULL;"
act_hi_taskinst
包含每个实例的历史记录任务。
如果具有实例ID的进程已完成,那么您将无法获得任何结果,因此您可以在继续前进之前检查该条件。
我已经运行了这段SQL语句来获取所需的任务名称。
@Mike给出的答案也符合目标。即使在这里,您也必须检查过程是否不完整。