2

我知道Java,我知道C#。

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

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

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

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

WHEN 患者 DOB 早于 NOW THEN 将患者标记为有效

我的病人事实是:

声明患者患者 ID:整数 firstName:文本 lastName:文本 dateOfBirth:java.util.Date end

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

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

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

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

谢谢你。

4

1 回答 1

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

于 2012-11-27T08:34:36.893 回答