我正在处理简单的活动过程,我需要以某种方式检查当前进程是否已经运行。我的想法是使用这样的代码:
final class SecondClass: SuggestionSource {
static let suggestions: [String: [SuggestionQuery]] = {
// ...
}()
// ...
func suggest(_ query: SuggestionQuery, callback: @escaping SuggestionSourceCallback) {
// ...
callback(self.suggestions[query])
}
}
所以我只是在一个java方法中获取runtimeService,该方法由activiti BPConstants.PROCESS_ID_D1_ASSEMBLY_PROCESS进程执行,并使用definitionKey(进程的id)添加过滤器并检查计数。 我发现.createExecutionQuery()总是返回空列表。例如,此类代码也将返回空列表:
activitiInitEngineBean.getRuntimeService()
.createExecutionQuery()
.processDefinitionKey(BPConstants.PROCESS_ID_D1_ASSEMBLY_PROCESS)
.count() > 1;
它没有预期,因为我在一个进程内调用它(所以它应该返回至少1次执行)。 我应该配置什么才能使用runtimeService?
答案 0 :(得分:1)
在达到等待状态之前,您的更新不会存储到数据库中(请参阅Transactions and Concurrency)。如果要从查询中获取流程实例,则运行流程实例必须达到第一个等待状态。实际上,您不需要创建查询来执行,因为执行已经存在,例如script task variables或作为接口方法的参数。
答案 1 :(得分:0)
默认情况下,当使用<时,activiti不会将任何内容存储到 ru 表中。 serviceTask>标签。解决方案是添加异步属性:
<serviceTask activiti:async="true"