2

私は Java と C# を知っています。

私は JBoss Drools の "Guvnor" と、一般的な DRL ルール言語の初心者です。ルールの LHS で日付と時刻を正しく使用する方法について少し助けが必要です。

たとえば、医療システムのデータ品質を保証する必要があります。明らかに、各患者の記録には DOB があり、タイプは java.util.Date です。

では、Facts として渡されたデータの DOB が実際に今日の日付より前であることを確認したいとします。たとえば、C# では、DateTime.Now と言うと現在の日付/時刻を取得できます。

Guvnor に次のようなルールを追加したい (これは疑似コードです):

患者の生年月日が今より前の場合 患者を有効としてマークする

私の患者の事実は次のとおりです。

患者の患者 ID を宣言します: 整数 firstName: テキスト lastName: テキスト dateOfBirth: java.util.Date end

また、Dose ファクトもあり、患者 ID フィールドを使用して、どの患者がどの用量を投与されたかにリンクしています。

宣言 投与量 ID: 整数 患者 ID: 整数 投与日: java.util.Date 量: 整数 終了

また、ある薬が 1995 年という特定の年に発売されたとします。特定の患者の用量がその年より前に投与されていないことも確認したいと思います。

この2つはどうすればいいですか?私はグーグルとグーグルを試しましたが、(まったく役に立たない)Guvnorユーザーガイドへのリンクしか得られません。これは、この基本的な情報が含まれていないという点でかなりひどく書かれています。 DRL 構文で。

ありがとうございました。

4

1 に答える 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 に答える