流程引擎中的决策

数据库配置

有两种方法可以配置盘古引擎将使用的数据库。第一种选择是定义数据库的JDBC属性:

流程引擎中的决策

盘古BPM BPM平台提供了盘古BPM DMN引擎的集成,以评估业务决策。本节介绍如何将建模为DMN决策的业务决策以及其他资源部署到盘古BPM BPM平台的存储库中。可以使用服务API评估已部署的决策,也可以在BPMN流程和CMMN案例中引用它们。评估后的决策将保存在“ 历史记录”中,以进行审核和报告。

组态

配置DMN引擎

资料库

部署和管理决策

决策服务

使用Services API评估决策

BPMN和CMMN中的决策

从BPMN流程和CMMN案例调用决策

历史

审计评估的决定

 

 

 

配置DMN引擎

DMN引擎的配置是流程引擎配置的一部分。这取决于您使用的是应用程序托管的还是共享的,容器托管的流程引擎。有关详细信息,请参考Process Engine引导程序。

本部分说明如何配置DMN引擎:

1、通过Java API编程

2、通过XML配置进行声明

在示例中,输入表达式的默认表达式语言设置为groovy。在DMN Engine配置部分中,可以找到所有可能配置的列表。

使用Java API配置DMN引擎

首先,您需要为流程引擎创建一个ProcessEngineConfiguration对象,并DmnEngineConfiguration为DMN引擎创建一个对象。现在,您可以使用该DmnEngineConfiguration对象配置DMN引擎。完成后,在ProcessEngineConfiguration和上设置对象,buildProcessEngine()以创建流程引擎。

// create the process engine configuration

ProcessEngineConfigurationImpl processEngineConfiguration = // ...

    // create the DMN engine configuration    

DefaultDmnEngineConfiguration dmnEngineConfiguration = (DefaultDmnEngineConfiguration)

  DmnEngineConfiguration.createDefaultDmnEngineConfiguration();

// configure the DMN engine ...// e.g. set the default expression language for input expressions to `groovy`

dmnEngineConfiguration.setDefaultInputExpressionExpressionLanguage("groovy");

// set the DMN engine configuration on the process engine configuration

processEngineConfiguration.setDmnEngineConfiguration(dmnEngineConfiguration);

// build the process engine which includes the DMN engine

processEngineConfiguration.buildProcessEngine();

使用Spring XML配置DMN引擎

按照说明盘古BPM.cfg.xml为流程引擎创建基本XML配置。

添加一个新的class配置bean org.盘古BPM.bpm.dmn.engine.impl.DefaultDmnEngineConfiguration。使用Bean配置DMN引擎,并将其设置为Bean的dmnEngineConfiguration属性processEngineConfiguration。

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

 

  <bean id="processEngineConfiguration"

        class="org.盘古BPM.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration">

  

    <property name="dmnEngineConfiguration">

      <bean class="org.盘古BPM.bpm.dmn.engine.impl.DefaultDmnEngineConfiguration">

        

        <!-- configure the DMN engine ... -->

        <!-- e.g. set the default expression language for input expressions to `groovy` -->

        <property name="defaultInputExpressionExpressionLanguage" value="groovy" />

        

      </bean>

    </property>

    

  </bean></beans>

 

 

 

 

流程引擎存储库中的决策

要在盘古BPM BPM平台上评估DMN决策,它必须是Deployment的一部分。部署决策后,可以通过其键和版本来引用该决策。该平台支持DMN 1.1 XML文件。

部署决策

要部署DMN决策,可以使用存储库服务,也可以将其添加到流程应用程序。该平台会将所有带有.dmn或 .dmn11.xml文件扩展名的文件识别为DMN资源。

使用存储库服务部署决策

使用存储库服务创建新的部署,并向其中添加DMN资源。例如,以下代码将为类路径中的DMN文件创建新的部署。

String resourceName = "MyDecision.dmn11.xml";

Deploymnet deployment = processEngine

  .getRepositoryService()

  .createDeployment()

  .addClasspathResource(resourceName)

  .deploy();

使用流程应用程序部署决策

如果部署Process Application,则可以将DMN文件作为其他资源(如BPMN流程)添加到归档中。DMN文件必须具有.dmn或.dmn11.xml文件扩展名才能被识别为DMN资源。

如果您的Process Archive设置为扫描流程定义,它也会自动部署DMN定义。这是默认值。

<process-archive name="loan-approval">

  <properties>

    <property name="isScanForProcessDefinitions">true</property>

  </properties></process-archive>

否则,您必须在流程存档中明确指定DMN资源

<process-archive name="loan-approval">

  <resource>bpmn/invoice.bpmn</resource>

  <resource>dmn/assign-approver.dmn</resource>

  <properties>

    <property name="isScanForProcessDefinitions">false</property>

  </properties></process-archive>

决策版本

当将DMN资源部署到平台时,每个受支持的DMN决策都将转换为决策定义。决策定义表示平台中的单个DMN决策。除其他外,它具有以下属性:

1、id:平台生成的决策定义的唯一标识符。

2、key:idXML文件中的DMN决策属性。

3、name:nameXML文件中的DMN决策属性。

4、version:平台生成的决策定义的版本。

决策定义键

决策定义键等效id于DMN XML中DMN决策的属性。

<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" id="definitions" name="definitions" namespace="http://盘古BPM.org/schema/1.0/dmn">

  <decision id="my-decision" name="My Decision">

    <decisionTable>

      <output id="output1"/>

    </decisionTable>

  </decision></definitions>

部署上述DMN XML文件时,将创建具有以下属性的决策定义:

1、id:产生

2、key:my-decision

3、name:My Decision

4、version:1

决策定义版本

部署决策时,将检查是否已部署具有相同键的定义。如果不是,1则为该键的决策定义分配版本。如果已经存在具有相同键的决策定义,那么新部署的决策定义将成为现有决策定义的新版本,并将其版本增加一。

决策定义的此版本允许用户更新决策,但如果需要,仍能够使用以前的决策版本。

决策定义ID

决策定义的id不等同于idDMN XML决策的属性。它由平台生成为唯一标识符。这意味着决策定义标识直接对应于决策定义关键字和版本组合。

引用决策定义

要在平台的上下文中引用已部署的决策定义,请使用决策定义id或决策定义关键字和版本。如果使用了决策定义键,但未指定版本,则默认值为使用决策定义的最新版本。

决策需求图的版本控制

除了决策定义之外,已部署DMN资源的决策需求图(即definitionsXML中的元素)也被转换为决策需求定义。除其他外,它具有以下属性:

1、id:平台生成的决策需求定义的唯一标识符。

2、key:idXML文件中的定义属性。

3、name:nameXML文件中的定义属性。

4、version:平台生成的决策需求定义的版本。

请注意,仅当DMN资源包含多个决策时才创建决策需求定义。

决策需求定义键

决策要求定义键等效于DMN XML中元素的id属性definitions。

<?xml version="1.0" encoding="UTF-8"?><definitions xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd"

             id="my-drg"

             name="My DRG"

             namespace="http://盘古BPM.org/schema/1.0/dmn">

  <!-- ... --></definitions>

部署上述DMN XML文件时,将创建具有以下属性的决策需求定义:

1、id:产生

2、key:my-drg

3、name:My DRG

4、version:1

决策要求定义版本

部署决策需求图时,将检查是否已部署具有相同键的定义。如果不是,1则为该密钥分配决策要求定义版本。如果已经存在具有相同键的决策需求定义,那么新部署的定义将成为现有定义的新版本,并将其版本增加一。

请注意,如果所包含的决策定义的版本也部署在其他DMN资源内部,作为DMN资源内部的单个决策或稍后添加,则它们可能与决策需求定义不同。

查询决策存储库

存储库服务API可以查询所有已部署的决策定义和决策需求定义。

查询决策定义

获取ID为“ decisionDefinitionId”的决策定义:

DecisionDefinition decisionDefinition = processEngine

  .getRepositoryService()

  .getDecisionDefinition("decisionDefinitionId");

使用键“ decisionDefinitionKey”和版本1查询决策定义:

DecisionDefinition decisionDefinition = processEngine

  .getRepositoryService()

  .createDecisionDefinitionQuery()

  .decisionDefinitionKey("decisionDefinitionKey")

  .decisionDefinitionVersion(1)

  .singleResult();

使用关键字“ decisionDefinitionKey”查询决策定义的最新版本:

DecisionDefinition decisionDefinition = processEngine

  .getRepositoryService()

  .createDecisionDefinitionQuery()

  .decisionDefinitionKey("decisionDefinitionKey")

  .latestVersion()

  .singleResult();

使用关键字“ decisionDefinitionKey”查询决策定义的所有版本:

List<DecisionDefinition> decisionDefinitions = processEngine

  .getRepositoryService()

  .createDecisionDefinitionQuery()

  .decisionDefinitionKey("decisionDefinitionKey")

  .list();

此外,存储库服务可用于获取DMN XML文件,DMN模型实例或已部署的图图像。

RepositoryService repositoryService = processEngine.getRepositoryService();

 

DmnModelInstance dmnModelInstance = repositoryService

  .getDmnModelInstance("decisionDefinitionId");

 

InputStream modelInputStream = repositoryService

  .getDecisionModel("decisionDefinitionId");

 

InputStream diagramInputStream = repositoryService

  .getDecisionDiagram("decisionDefinitionId");

查询决策需求定义

可以以与决策定义类似的方式查询决策需求定义。

// query for the latest version of a decision requirements definition by key

DecisionRequirementsDefinition decisionRequirementsDefinition = processEngine

  .getRepositoryService()

  .createDecisionRequirementsDefinitionQuery()

  .decisionRequirementsDefinitionKey(key)

  .latestVersion()

  .singleResult();

  // query for all versions of decision requirements definitions by name

List<DecisionRequirementsDefinition> decisionRequirementsDefinitions = processEngine

  .getRepositoryService()

  .createDecisionRequirementsDefinitionQuery()

  .decisionRequirementsDefinitionName(name)

  .list();  

查询决策存储库的授权

用户需要READ对资源的许可权DECISION_DEFINITION才能查询决策定义。从存储库中检索决策定义,决策模型和决策图也需要此权限。授权的资源ID是决策定义密钥。

要查询决策需求定义,用户需要READ对资源的许可DECISION_REQUIREMENTS_DEFINITION。授权的资源ID是决策要求定义的关键。

有关授权的更多信息,请参考授权服务部分。

流程引擎中的决策服务

决策服务是流程引擎的Services API的一部分。它允许独立于BPMN和CMMN评估已部署的决策定义。

评估决策

要评估已部署的决策,请按ID或键和版本的组合引用它。如果使用键但未指定版本,则将评估具有给定键的决策定义的最新版本。

DecisionService decisionService = processEngine.getDecisionService();

VariableMap variables = Variables.createVariables()

  .putValue("status", "bronze")

  .putValue("sum", 1000);

DmnDecisionResult decisionResult = decisionService

  .evaluateDecisionByKey("decision-key")

  .variables(variables)

  .evaluate();

  // alternatively for decision tables only

DmnDecisionTableResult decisionResult = decisionService

  .evaluateDecisionTableByKey("decision-key")

  .variables(variables)

  .evaluate();

决策关键

决策定义的关键字由DMN XML中元素的id属性 指定decision。命名的不同与决策的 版本化有关。由于键可以引用决策定义的多个版本,因此id恰好指定一个版本。

传递数据

一项决定可以引用一个或多个变量。例如,可以在决策表的输入表达式或输入条目中引用变量。变量作为键值对传递到决策服务。每对指定变量的名称和值。

有关不同表达式的更多信息,请参见DMN 1.1参考

评估决策的授权

用户需要CREATE_INSTANCE资源 许可DECISION_DEFINITION才能评估决策。授权的资源ID是决策定义密钥。

有关授权的更多信息,请参阅授权服务部分。

处理决策结果

评估结果称为决策结果。决策结果是的复杂对象DmnDecisionResult。可以将其视为键值对列表。

如果该决策被实现为决策表,则列表中的每个条目都代表一个匹配的规则。该规则的输出条目由键值对表示。一对密钥由输出名称指定。

相反,如果将决策实现为决策文字表达,则列表仅包含一个条目。该条目表示表达式值,并由变量名映射。

决策结果提供了界面方法List<Map<String, Object>>和一些便利方法。

DmnDecisionResult decisionResult = ...;// get the value of the single entry of the only matched rule

String singleEntry = decisionResult.getSingleResult().getSingleEntry();// get the value of the result entry with name 'result' of the only matched rule

String result = decisionResult.getSingleResult().getEntry("result");// get the value of the first entry of the second matched rule

String firstValue = decisionResult.get(1).getFirstEntry();// get a list of all entries with the output name 'result' of all matched rules

List<String> results = decisionResult.collectEntries("result");// shortcut to get the single output entry of the single rule result// - combine getSingleResult() and getSingleEntry()

String result = decisionResult.getSingleEntry();

请注意,决策结果还提供了获取类型化输出条目的方法。在Java文档中可以找到所有方法的完整列表 。

如果将决策实现为决策表,则也可以使用评估决策表 方法之一 对其进行评估。在这种情况下,评估结果返回DmnDecisionTableResult ,该语义在语义上是相等的,并且提供与相同的方法 DmnDecisionResult。

评估决策的历史

评估决策时,将HistoricDecisionInstance创建一个新的类型的历史记录条目, 其中包含决策的输入和输出。历史记录可以通过历史记录服务查询。

List<HistoricDecisionInstance> historicDecisions = processEngine

  .getHistoryService()

  .createHistoricDecisionInstanceQuery()

  .decisionDefinitionKey("decision-key")

  .includeInputs()

  .includeOutputs()

  .list();

有关此的更多信息,请参考DMN决策历史记录

从流程和案例中调用决策

BPMN和CMMN集成

本节说明如何从BPMN和CMMN调用DMN决策。

BPMN业务规则任务

BPMN业务规则任务可以引用已部署的决策定义。执行任务时评估决策定义。

<definitions id="taskAssigneeExample"

  xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"

  xmlns:盘古BPM="http://盘古BPM.org/schema/1.0/bpmn"

  targetNamespace="Examples">

  <process id="process">

    <!-- ... -->

    <businessRuleTask id="businessRuleTask"

                      盘古BPM:decisionRef="myDecision"

                      盘古BPM:mapDecisionResult="singleEntry"

                      盘古BPM:resultVariable="result" />

    <!-- ... -->

  </process></definitions>

有关如何从业务规则任务中引用决策定义的更多信息,请参考BPMN 2.0参考

DMN决策任务

CMMN决策任务引用已部署的决策定义。激活任务时将调用决策定义。

<definitions id="definitions"

                  xmlns="http://www.omg.org/spec/CMMN/20151109/MODEL"

                  xmlns:盘古BPM="http://盘古BPM.org/schema/1.0/cmmn"

                  targetNamespace="Examples">

  <case id="case">

    <casePlanModel id="CasePlanModel_1">

      <planItem id="PI_DecisionTask_1" definitionRef="DecisionTask_1" />

      <decisionTask id="DecisionTask_1"

                    decisionRef="myDecision"

                    盘古BPM:mapDecisionResult="singleEntry"

                    盘古BPM:resultVariable="result">

      </decisionTask>

    </casePlanModel>

  </case></definitions>

有关如何从决策任务中引用决策定义的更多信息,请参考CMMN 1.1参考

决策结果

决策的输出(也称为决策结果)是类型的复杂对象DmnDecisionResult。通常,它是键值对的列表。

如果该决策被实现为决策表,则列表中的每个条目都代表一个匹配的规则。该规则的输出条目由键值对表示。一对密钥由输出名称指定。

相反,如果将决策实现为决策文字表达,则列表仅包含一个条目。该条目表示表达式值,并由变量名映射。

该类型DmnDecisionResult提供List接口中的方法以及一些便捷方法,例如getSingleResult()或getFirstResult()获得匹配规则的结果。规则结果提供了Map界面中的方法,还提供了 诸如getSingleEntry()或的 便捷方法getFirstEntry()。

如果决策结果仅包含单个输出值(例如,评估决策文字表达式),则可以使用getSingleEntry()组合getSingleResult()和的方法从结果中检索该值getSingleEntry()。

例如,以下代码返回具有result唯一匹配规则名称的输出条目。

DmnDecisionResult decisionResult = ...;

Object value = decisionResult

  .getSingleResult()

  .getEntry("result");

它还提供了获取类型化输出条目的方法,例如 getSingleEntryTyped()。有关键入的值的详细信息,请参阅《用户指南》。在Java文档中可以找到所有方法的完整列表 。

决策结果在执行任务的本地范围内作为名为的临时变量可用decisionResult。如有必要,可以使用决策结果的预定义或自定义映射将其传递到变量中。

预定义的决策结果映射

该引擎包括针对常见用例的决策结果的预定义映射。该映射类似于输出变量映射。它从决策结果中提取一个值,该值保存在流程/案例变量中。可以使用以下映射:

 

仅singleEntry映射器返回包装输出条目和附加类型信息的值的类型化值。其他映射器返回的集合包含作为普通Java对象的输出条目的值的集合,而没有其他类型信息。

请注意,如果决策结果不合适,则映射器将引发异常。例如,singleEntry如果决策结果包含多个匹配的规则,则映射器将引发异常。

序列化的局限性

如果您使用的是预定义的映射器中的一个singleResult,collectEntries 或resultList则你应该考虑的序列化的局限性

要指定用于存储映射结果的process / case变量的名称,请使用盘古BPM:resultVariable属性。

BPMN:

<businessRuleTask id="businessRuleTask"

                  盘古BPM:decisionRef="myDecision"

                  盘古BPM:mapDecisionResult="singleEntry"

                  盘古BPM:resultVariable="result" />

CMMN:

<decisionTask id="DecisionTask_1"

              decisionRef="myDecision"

              盘古BPM:mapDecisionResult="singleEntry"

              盘古BPM:resultVariable="result">

结果变量的名称

结果变量不应使用名称,decisionResult因为决策结果本身已保存在使用该名称的变量中。否则,在保存结果变量时会引发异常。

决策结果的自定义映射

代替预定义的映射,可以使用自定义决策结果映射将决策结果传递到变量中。

序列化的局限性

如果将集合或复杂对象传递给变量,则应考虑序列化局限性

自定义映射到过程变量

如果使用业务规则任务在BPMN流程内调用决策,则可以使用输出变量映射将决策结果传递到流程变量中 。

例如,如果决策结果具有多个输出值,应将其保存在单独的过程变量中,则可以通过在业务规则任务上定义输出映射来实现。

<businessRuleTask id="businessRuleTask" 盘古BPM:decisionRef="myDecision">

  <extensionElements>

    <盘古BPM:inputOutput>

      <盘古BPM:outputParameter name="result">

        ${decisionResult.getSingleResult().result}

      </盘古BPM:outputParameter>

      <盘古BPM:outputParameter name="reason">

        ${decisionResult.getSingleResult().reason}

      </盘古BPM:outputParameter>

    </盘古BPM:inputOutput>

  </extensionElements></businessRuleTask>

除了输出变量映射之外,决策结果还可以由附加到业务规则任务的执行侦听器进行处理。

<businessRuleTask id="businessRuleTask" 盘古BPM:decisionRef="myDecision">

  <extensionElements>

    <盘古BPM:executionListener event="end"

      delegateExpression="${myDecisionResultListener}" />

  </extensionElements></businessRuleTask>

public class MyDecisionResultListener implements ExecutionListener {

  @Override

  public void notify(DelegateExecution execution) throws Exception {

    DmnDecisionResult decisionResult = (DmnDecisionResult) execution.getVariable("decisionResult");

    String result = decisionResult.getSingleResult().get("result");

    String reason = decisionResult.getSingleResult().get("reason");

    // ...

  }}

自定义映射到案例变量

如果决策任务用于在CMMN案例中调用决策,则可以通过使用附加到决策任务的案例执行侦听器将决策结果传递到案例变量。

<decisionTask id="decisionTask" decisionRef="myDecision">

  <extensionElements>

    <盘古BPM:caseExecutionListener event="complete"

      class="org.盘古BPM.bpm.example.MyDecisionResultListener" />

  </extensionElements></decisionTask>

public class MyDecisionResultListener implements CaseExecutionListener {

  @Override

  public void notify(DelegateCaseExecution caseExecution) throws Exception;

    DmnDecisionResult decisionResult = (DmnDecisionResult) caseExecution.getVariable("decisionResult");

    String result = decisionResult.getSingleResult().get("result");

    String reason = decisionResult.getSingleResult().get("reason");

    // ...

    caseExecution.setVariable("result", result);

    // ...

  }}

映射结果序列化的局限性

预定义的映射singleResult,collectEntries并将resultList决策结果映射到Java集合。集合的实现取决于所使用的JDK,并且包含未类型化的值作为Object。当集合另存为过程/案例变量时,由于没有合适的原始值类型,因此将其序列化为对象值。根据使用的对象值序列化,这可能导致反序列化问题。

如果使用的是默认的内置对象序列化,则如果JDK已更新或更改并且包含不兼容的collection类版本,则无法对变量进行反序列化。否则,如果使用的是JSON之类的其他序列化,则应确保未类型化的值可反序列化。例如,日期值的集合不能使用JSON反序列化,因为默认情况下JSON没有注册的日期映射器。

通过使用自定义输出变量映射可能会出现相同的问题,因为 DmnDecisionResult具有的方法返回的集合与预定义的映射器相同。此外,不建议将DmnDecisionResult或DmnDecisionResultEntries变量另存 为流程/案例变量,因为在新版本的盘古BPM BPM中基础实现可能会更改。

为避免任何这些问题,应仅使用基本变量。或者,您可以使用自定义对象来自己控制序列化。

从决策访问变量

DMN决策表和决策文字表达式包含多个表达式,这些表达式将由DMN引擎评估。有关决策表达的更多信息,请参见我们的DMN 1.1参考。这些表达式可以访问在调用任务范围内可用的所有过程/案例变量。变量是通过只读变量上下文提供的。

简而言之,可以通过表达式中的名称直接引用过程/案例变量。例如,如果foo存在过程变量,则可以按名称在决策表的输入表达式,输入条目和输出条目中使用此变量。

<input id="input">

  <!--

    this input expression will return the value

    of the process/case variable `foo`

  -->

  <inputExpression>

    <text>foo</text>

  </inputExpression></input>

表达式中的process / case变量的返回值将是普通对象,而不是类型化的value。如果要在表达式中使用类型化的值,则必须从变量上下文中获取变量。以下代码段与上述示例相同。它foo从变量上下文中获取变量并返回其未包装的值。

<input id="input">

  <!--

    this input expression uses the variable context to

    get the typed value of the process/case variable `foo`

  -->

  <inputExpression>

    <text>

      variableContext.resolve("foo").getValue()

    </text>

  </inputExpression></input>

表达语言整合

默认情况下,DMN引擎将JUEL用作输入表达式,输出条目和文字表达式的表达式语言。它使用FEEL作为输入项的表达语言。有关表达式语言的更多信息,请参见DMN引擎指南。

访问

如果DAM引擎由盘古BPM BPM平台调用,则它使用与盘古BPM BPM引擎相同的JUEL配置。因此,也可以在决策中从JUEL表达式访问Spring和CDI Bean。有关此集成的更多信息,请参见SpringCDI指南中的相应部分。

扩展表达语言

使用内部API

这些API 不是公共API的一部分,并且在以后的版本中可能会更改。

可以添加自己的函数,这些函数可以在JUEL表达式中使用。因此 ,必须实现一个新的FunctionMapper。在初始化之后,必须将功能映射器添加到流程引擎配置中。

ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) processEngine

  .getProcessEngineConfiguration();

processEngineConfiguration

  .getExpressionManager()

  .addFunctionMapper(new MyFunctionMapper());

例如,这可以通过创建流程引擎插件来完成

请注意,这些功能不仅可以在DMN决策中使用,而且可以在平台上的所有JUEL表达式中使用。

DMN决策的历史记录

在从BPMN流程,CMMN案例或通过决策服务评估了决策定义之后,输入和输出将保存在平台的历史记录中。历史记录实体为类型 HistoricDecisionInstance,事件类型为evaluate。

有关此类历史记录机制的详细信息,请参阅历史记录和审核事件日志

历史水平

历史记录级别为FULL。否则,不会创建决策历史记录。

查询评估的决策

历史记录服务可用于查询HistoricDecisionInstances。例如,使用以下查询可获取决策定义的所有历史记录条目,checkOrder并在评估决策时对键进行排序。

List<HistoricDecisionInstance> historicDecisions = processEngine

  .getHistoryService()

  .createHistoricDecisionInstanceQuery()

  .decisionDefinitionKey("checkOrder")

  .orderByEvaluationTime()

  .asc()

  .list();

BPMN业务规则任务评估的决策可以通过流程定义ID或键和流程实例ID进行过滤。

HistoryService historyService = processEngine.getHistoryService();

 

List<HistoricDecisionInstance> historicDecisionInstances = historyService

  .createHistoricDecisionInstanceQuery()

  .processDefinitionId("processDefinitionId")

  .list();

 

historicDecisionInstances = historyService

  .createHistoricDecisionInstanceQuery()

  .processDefinitionKey("processDefinitionKey")

  .list();

 

historicDecisionInstances = historyService

  .createHistoricDecisionInstanceQuery()

  .processInstanceId("processInstanceId")

  .list();

CMMN决策任务评估的决策可以通过案例定义ID或键和案例实例ID进行过滤。

HistoryService historyService = processEngine.getHistoryService();

 

List<HistoricDecisionInstance> historicDecisionInstances = historyService

  .createHistoricDecisionInstanceQuery()

  .caseDefinitionId("caseDefinitionId")

  .list();

 

historicDecisionInstances = historyService

  .createHistoricDecisionInstanceQuery()

  .caseDefinitionKey("caseDefinitionKey")

  .list();

 

historicDecisionInstances = historyService

  .createHistoricDecisionInstanceQuery()

  .caseInstanceId("caseInstanceId")

  .list();

请注意,默认情况下,决策的输入和输出不包括在查询结果中。调用方法includeInputs()和includeOutputs()查询以从结果中检索输入和输出。

List<HistoricDecisionInstance> historicDecisions = processEngine

  .getHistoryService()

  .createHistoricDecisionInstanceQuery()

  .decisionDefinitionKey("checkOrder")

  .includeInputs()

  .includeOutputs()

  .list();

历史决策实例

HistoricDecisionInstance 包含有关决定的单一评价信息。

HistoricDecisionInstance historicDecision = ...;

// id of the decision definition

String decisionDefinitionId = historicDecision.getDecisionDefinitionId();

// key of the decision definition

String decisionDefinitionKey = historicDecision.getDecisionDefinitionKey();

// name of the decision

String decisionDefinitionName = historicDecision.getDecisionDefinitionName();

// time when the decision was evaluated

Date evaluationTime = historicDecision.getEvaluationTime();

// inputs of the decision (if includeInputs was specified in the query)

List<HistoricDecisionInputInstance> inputs = historicDecision.getInputs();

// outputs of the decision (if includeOutputs was specified in the query)

List<HistoricDecisionOutputInstance> outputs = historicDecision.getOutputs();

如果从流程评估了决策,则在中设置流程定义,流程实例和活动的信息 HistoricDecisionInstance。从案例评估的决策也是如此,历史实例将引用相应的案例实例。

另外,如果该决策是具有命中策略collect和聚合器功能的决策表,则该getCollectResultValue()方法可以检索聚合结果。

有关受支持的命中策略的更多信息,请参见DMN 1.1参考

历史决策输入实例

所述HistoricDecisionInputInstance 表示评价决定(例如,决策表的输入子句)的一个输入。

HistoricDecisionInputInstance input = ...;

// id of the input clause

String clauseId = input.getClauseId();

// label of the input clause

String clauseName = input.getClauseName();

// evaluated value of the input expression

Object value = input.getValue();

// evaluated value of the input expression as typed value// which contains type information

TypedValue typedValue = input.getTypedValue();

请注意,在输入指定类型的情况下,该值可能是类型转换的结果。

历史决策输出实例

HistoricDecisionOutputInstance 表示评估决定的一个输出项。如果将决策作为决策表实现,则 每个输出子句和匹配的规则均HistoricDecisionInstance包含一个HistoricDecisionOutputInstance。

HistoricDecisionOutputInstance output = ...;

// id of the output clause

String clauseId = output.getClauseId();

// label of the output clause

String clauseName = output.getClauseName();

// evaluated value of the output entry

Object value = output.getValue();

// evaluated value of the output entry as typed value// which contains type information

TypedValue typedValue = output.getTypedValue();

// id of matched rule the output belongs to

String ruleId = output.getRuleId();

// the position of the rule in the list of matched rules

Integer ruleOrder = output.getRuleOrder();

// name of the output clause used as output variable identifier

String variableName = output.getVariableName();

请注意,如果输出指定类型,则该值可能是类型转换的结果。

 

 技术支持:盘古BPM工作流平台

相关教程