【问题标题】:Drools Guvnor: How do dates and times work?Drools Guvnor:日期和时间如何运作?
【发布时间】:2012-11-26 20:30:58
【问题描述】:

我懂 Java,我也懂 C#。

我是 JBoss Drools “Guvnor” 的菜鸟,一般来说只是他们的 DRL 规则语言。我需要一些关于如何在 LHS 规则中正确使用日期和时间的帮助。

例如,我必须确保医疗保健系统中的数据质量。显然,每个患者的记录中都有一个 DOB,它的类型是 java.util.Date。

好的,假设我想确保作为 Facts 传递的数据中的 DOB 确实在今天之前。我知道,例如,在 C# 中,您可以通过说 DateTime.Now 来获取当前日期/时间。

我想在 Guvnor 中添加一条规则(这是伪代码):

何时 患者出生日期在现在之前 然后 将患者标记为有效

我的患者事实是:

声明患者 患者 ID:整数 名字:文字 姓氏:文字 出生日期:java.util.Date 结束

我也有一个 Dose fact,有一个 patientID 字段,可以将它与什么患者得到什么剂量相关联:

声明剂量 剂量ID:整数 患者 ID:整数 管理日期:java.util.Date 金额:整数 结束

另外,假设在 1995 年某年发布了一种药物,我还想检查是否在该年之前没有为给定患者施用过剂量。

这两个怎么做?我尝试过谷歌搜索和谷歌搜索,但我得到的只是指向(完全没用的)Guvnor 用户指南的链接,该指南写得非常糟糕,因为它不包含这些基本信息,即日期和时间的工作方式和编写方式在 DRL 语法中。

谢谢。

【问题讨论】:

    标签: java jboss rules guvnor


    【解决方案1】:

    与往常一样,有不止一种方法可以做到这一点。这是一个。

    function Date currentTime(){
      // The content of this method is Java
      return new Date();
    }
    
    RULE "my rule"
      WHEN 
        patient : Patient( dateOfBirth < currentTime() )
      THEN 
        // Everything in THEN part is Java
        patient.setValid(true);  // Notice I added a valid field into the fact type
        update(patient); 
    END
    

    你要求的另一条规则

    另外,假设在 1995 年某年发布了一种药物,我还想检查在该年之前没有为给定患者服用的剂量。

    RULE "Second Rule"
      WHEN
        patient : Patient() 
        not Dose( patientId == patient.patientId, administeredDate < 01-Jan-1995 ) // The date format can be changed if you want to.
      WHEN
        System.out.println( "Patient " + patient.getFirstName + " " +patient.getLastName() + " was not given a dose before." );
    END
    

    Guvnor 用户指南不包括语言基础知识。您可以从here 找到它们。 Guvnor 旨在为您提供指导编辑器来编写 DRL 或存储包含 DRL 的文件。您可以通过按每个生成 DRL 的资产编辑器中的“查看源代码”按钮来检查引导规则是否是用 DRL 编写的。

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多