工作流许可条件匹配

问题描述

目前,我有一个非常复杂的工作流表,其中包含多个相互组合的值。在权限模型中为正确的用户找到正确的批准者基本上是一个工作流程 这是工作流表的简化示例

国家 部门 角色 批准者
全部 全部 全部 鲍勃
英国 信息技术 开发人员 蒂姆
美国 信息技术 开发人员 迈克
全部 全部 分析师 约翰

这些工作流程步骤始终遵循先决条件:

  1. 它始终存在符合所有条件的认审批人
  2. 任何符合条件的条件都优先于所有条件
  3. 如果没有任何条件匹配,它将属于认审批人

我有用户需要根据上述矩阵进行审批

用户 国家 部门 角色
U1 英国 信息技术 用户体验设计师
U2 美国 人力资源 分析师

我想弄清楚如何提取以下匹配项:

用户 审批人 原因
U1 鲍勃 用户 U1 不符合条件,所以它爬到认审批人
U2 蒂姆 用户 U2 匹配工作流程步骤,因为 Tim 验证了属于 IT 部门的所有英国开发人员

当然,对于这个例子,很少有条件如此简单的 if / else 可以解决它。 但是我有 6 个标准,我相信如果应用这种幼稚的方法,这些标准会达到很多重要的组合。

在这种情况下,规则引擎会应用这个问题吗? (例如流口水?) 我认为引擎会将用户/和工作流步骤列表作为事实。 在这种情况下,决策表是否更适用? 任何有助于构建问题的帮助将不胜感激:)

这是一个用户与其批准者国家/地区相匹配的非常简单的示例

rule "Has country approver"
when
    $user : User( $country : country )
    $wf : WorkflowStep(country == $country) from $userAccess.steps
then
    //take the approver for the matching step
    $userAccess.setApprover($wf.getApprover());
    
    //insertLogical ?
end

解决方法

规则引擎非常适合您的解决方案,但您必须决定如何使用它。

您提供的直接使用 Drools 的示例非常低级,它可以工作,但需要您在 DRL 中编写规则。

由于您已经知道您的评估是无状态的,并且您的输入字面上已格式化为表格,因此我认为决策表更适合。鉴于您有 two 种决策表、Drools 和 DMN。

我建议您尝试使用 DMN,因为它更容易开始,Kogito 提供了一个 quick-start,让您可以对整个系统进行试验,甚至为此编写测试场景,这基本上是您的第二个表。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...