首页 > 解决方案 > Activiti REST API 不再检索任务

问题描述

经过几年的正常操作,Activiti 5.17.0 检索任务的 API 不再返回最新的任务。调用的 API 是/runtime/tasks?includeProcessVariables=true&size=600000&order=desc带有基本身份验证的 GET。

没有人改变它,但它只是停留在返回 10 天前的任务。我检查了 Activiti 表,它们包含我需要检索的任务的记录。

我还尝试从act_hi_taskinst和清理一些旧数据act_ru_task,假设这是基数问题(可能任务太多),但没有任何改变。

我还尝试增加请求中的 size 参数,但没有任何变化(未达到该限制)。

到底是怎么回事?

- - 编辑

这似乎是ID的问题。如果我尝试通过 create_time_desc 获取最后 10 个任务的顺序,则只返回 ID 999907 之前的任务。下一个 ID 超过 1.000.000,我可以在数据库中看到它,但 API 没有返回它。

标签: javaspringactiviti

解决方案


我更改了顺序:按 id 排序(这是数据库中的一个可变字符)是违反直觉的。事实上,当按id_ descID 超过 1.000.000 的任务排序时,是在任务 900.000 之后。设置大小Integer.MAX_VALUE并没有解决问题,由于某种原因我没有得到(可能原因是在 Activiti 查询构建代码中)。

顺便说一句,我更改了订单并使用了createTime desc. 也就是说,无论 ID 是什么,都会返回最近的任务。

这是我定制的控制器(有待改进,但适用于我的特定用例)。

@RestController
@RequestMapping("/api/")
public class CustomRest extends TaskBaseResource {

    @Autowired
    TaskService taskService;

    /*
    @RequestMapping(method = RequestMethod.GET, path = "custom")
    public List<Task> retrieveAllTasks() {
        return taskService.createTaskQuery().includeProcessVariables().active().list();
    }
     */
    @RequestMapping(method = RequestMethod.GET, path = "custom")
    public DataResponse getTasks(@RequestParam Map<String, String> requestParams, HttpServletRequest httpRequest) {
        // Create a Task query request
        TaskQueryRequest request = new TaskQueryRequest();

        // Populate filter-parameters
        if (requestParams.containsKey("name")) {
            request.setName(requestParams.get("name"));
        }

        request.setIncludeProcessVariables(true);
        request.setActive(true);

        return getTasksFromQueryRequest(request, requestParams);
    }

    protected DataResponse getTasksFromQueryRequest(TaskQueryRequest request,
                                                    Map<String, String> requestParams) {

        TaskQuery taskQuery = taskService.createTaskQuery();
        taskQuery.active();
        taskQuery.includeProcessVariables();


        HashMap<String, QueryProperty> properties = new HashMap<String, QueryProperty>();

        properties.put("id", TaskQueryProperty.TASK_ID);
        properties.put("name", TaskQueryProperty.NAME);
        properties.put("description", TaskQueryProperty.DESCRIPTION);
        properties.put("dueDate", TaskQueryProperty.DUE_DATE);
        properties.put("createTime", TaskQueryProperty.CREATE_TIME);
        properties.put("priority", TaskQueryProperty.PRIORITY);
        properties.put("executionId", TaskQueryProperty.EXECUTION_ID);
        properties.put("processInstanceId", TaskQueryProperty.PROCESS_INSTANCE_ID);
        properties.put("tenantId", TaskQueryProperty.TENANT_ID);

        request.setSize(Integer.MAX_VALUE);
        //request.setSize(10);
        request.setOrder("createTime");
        request.setOrder("desc");

        DataResponse paginatedList = new TaskPaginateList(restResponseFactory).paginateList(
                requestParams, request, taskQuery, "createTime", properties);


        return paginatedList;
    }
}

推荐阅读