0

我正在使用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 列出了流程实例已执行的所有任务,列表中的最后一个任务是它当前正在执行的任务,因为它的属性completedfalse.

我想从 java 代码中实现相同的目标。

你能帮帮我吗?任何达到我的目标的替代方法对我来说也很好。

4

2 回答 2

1

您可以使用HistoricServiceAPI 的另一个查询:

List<HistoricTaskIntance> taskList = getHistoryService()
  .createHistoricTaskInstanceQuery()
  .processInstanceId(processInstanceId)
  .list()

当前任务状态可以定义为HistoricTaskInstance.getEndTime()将返回null打开的任务。

于 2013-08-23T04:47:47.273 回答
0

我已经尝试过这种方法。

SELECT NAME_ FROM act_hi_taskinst where PROC_INST_ID_= 1000  and END_TIME_ IS NULL;"

act_hi_taskinst包含每个实例的历史任务。

如果具有实例 id 的进程已完成,那么您将不会得到任何结果,因此您可以在继续之前检查该条件。

我已经运行了这条 SQL 语句来获取所需的任务名称。

@Mike 给出的答案也符合目标。即使在这里,您也必须检查过程是否不完整。

于 2013-08-23T08:29:32.803 回答