首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Activiti REST API不再检索任务

Activiti REST API不再检索任务
EN

Stack Overflow用户
提问于 2021-07-02 05:03:44
回答 1查看 49关注 0票数 1

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

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

我还试图从act_hi_taskinstact_ru_task中清理一些旧数据,假设这是一个基数问题(可能任务太多),但什么都没有改变。

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

怎么一回事?

-编辑

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

EN

回答 1

Stack Overflow用户

发布于 2021-07-04 00:52:14

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

顺便说一句,我改变了顺序,使用了createTime desc。这就是说,无论ID如何,最近的任务都会被返回。

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

代码语言:javascript
复制
@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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68216924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档