Feature to make custom queries in jbpm.
ProcessInstanceQuery query = new ProcessInstanceQueryImpl();
query.processDefinitionId(definitionId);
query.finished();
query.setPageList(start, end);
or simple
ProcessInstanceQuery query = new ProcessInstanceQueryImpl()
.variableValueEquals("companyId", companyId)
.variableValueEquals("userId", userId)
.processInstanceIds(longSet)
.unfinished();
You need to use EntityManager
public static long findProcessInstancesCount(ProcessInstanceQuery processInstanceQuery) {
EntityManager em = getEntityManager();
boolean newTx = joinTransaction(em);
// ProcessInstanceQuery
ProcessInstanceQueryImpl piQueryImpl = (ProcessInstanceQueryImpl) processInstanceQuery;
long count = (Long) piQueryImpl.count(em);
closeEntityManager(em, newTx);
return count;
}
TaskQuery query = new TaskQueryImpl()
.actualOwner("iam")
.processInstanceId(101)
.taskVariableValueEquals("companyId", 10156)
.taskVariableValueNotEqualsIgnoreCase("manager", "dmitry far")
.taskCompleted(true)
.setPageList(50, 100);
After that in TaskPersistenceManager, for example, you can retrieve task list:
public List<Task> getTasks(TaskQuery taskQuery) {
List<Task> result = new ArrayList<Task>();
...
try {
// beginTransaction
// TaskQuery
TaskQueryImpl taskQueryImpl = (TaskQueryImpl) taskQuery;
result = (List<Task>) taskQueryImpl.list(em);
// endTransaction
} catch(Exception e) { ... }
return result;
}
To use variables in queries you have to add tables to store tasks- and process variables.