【问题标题】:Camunda: query processes that do not have a specific variableCamunda:没有特定变量的查询进程
【发布时间】:2020-05-15 11:44:39
【问题描述】:

在 Camunda (7.12) 中,我可以通过变量值查询进程:

runtimeService.createProcessInstanceQuery()
  .variableValueEquals("someVar", "someValue")
  .list();

我什至可以在进程中查询空值变量:

runtimeService.createProcessInstanceQuery()
  .variableValueEquals("someVar", null)
  .list();

但是如何查询没有变量someVar 的进程呢?

【问题讨论】:

  • 仅使用 createProcessInstanceQuery().list() 即可为您提供所有实例 ...
  • 是的,createProcessInstanceQuery().list() 会给我所有进程,但我只想要那些没有变量 someVar 的进程。

标签: camunda


【解决方案1】:

我不确定你为什么不明白这一点,但如果我是正确的,我认为你在寻找什么,那么它看起来很简单。 ProcessInstanceQuery 类还有一个名为variableValueNotEquals(String name, Object value) 的方法,它允许您选择与变量不匹配的进程。在 Camunda Java API Docs 中它被声明为:

variableValueNotEquals(String name, Object value)
Only select process instances which have a global variable with the given name, but with a different value than the passed value.

供您参考的文档页面:

https://docs.camunda.org/javadoc/camunda-bpm-platform/7.12/?org/camunda/bpm/engine/RuntimeService.html

所以我相信你可以简单地做到:

runtimeService.createProcessInstanceQuery()
  .variableValueNotEquals("someVar", null)
  .list();

如果这对你有帮助,请告诉我。

【讨论】:

  • variableValueNotEqualsvariableValueEquals 只考虑具有“someVar”变量的进程并忽略那些“someVar”不存在的进程;这个想法是我有“someVar”的进程和“someVar”的进程根本不存在
【解决方案2】:

首先,获取所有具有“someVar”的流程实例的ID列表

其次,获取camunda中所有进程id的列表

从第二个列表中获取不包含在第一个列表中的 id。

这是 Kotlin 示例,因为它比 Java 代码短,但概念相同:

    val idsOfProcessesWithVar = runtimeService.createVariableInstanceQuery().variableName("someVar").list().map {
        it.processInstanceId
    }

    val allProcessesIds = runtimeService.createProcessInstanceQuery().list().map { it.id }

    allProcessesIds.minus(idsOfProcessesWithVar)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多