经过几年的正常操作,Activiti 5.17.0用于检索任务的API不再返回最新的任务。调用的API是一个带有基本身份验证的GET to /runtime/tasks?includeProcessVariables=true&size=600000&order=desc。
没有人改变它,但它只是停留在返回10天前的任务。我检查了Activiti表,它们包含我需要检索的任务的记录。
我还试图从act_hi_taskinst和act_ru_task中清理一些旧数据,假设这是一个基数问题(可能任务太多),但什么都没有改变。
我还尝试增加请求中的size参数,但没有任何变化(未达到该限制)。
怎么一回事?
-编辑
这似乎是ID的问题。如果我尝试获取最后10个按create_time_描述排序的任务,则只返回ID为999907的任务。下一个ID超过1.000.000,我可以在数据库中看到它,但API没有返回它。
发布于 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如何,最近的任务都会被返回。
这是我的定制控制器(有待改进,但适用于我的特定用例)。
@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;
}
}https://stackoverflow.com/questions/68216924
复制相似问题