2016-07-19 6 views
1

meine Regeln sind wie folgt:Können MVEL oder Drools die Tatsache nicht auflösen, dass der Typ Map <String, List <Object>> ist?

rule "calcitonin evaluation" 
    lock-on-active true 
    salience 0 
    when 
    $p : Patient($labtestItem : labtests.get("calcitonin").get("0")) 
    LabTestItem($result : result.substring(1,(result.length)-1), parseFloat($result) > 8.4) from $labtestItem 
    then 
    $labtestItem.setAbnormalIndicator("high"); 
    $labtestItem.setAttentionLevel("important"); 
    modify($p){} 
    end 

aber immer mit Fehlern gebaut:

Unable to Analyse Expression labtests.get("calcitonin").get(0): 
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl cannot be cast to java.lang.Class 

wenn ich so meine Regeln schreiben, es läuft:

rule "calcitonin evaluation" 
    lock-on-active true 
    salience 0 
    when 
    $p : Patient($labtestItem : labtests) 
    then 
    System.out.println($labtestItem.get("calcitonin")); 
    modify($p){} 
    end 

Antwort

0

Die .get("0") macht keinen Sinn - List.get erwartet eine ganze Zahl. Aber das wird das Problem nicht verschwinden lassen. Sie benötigen einen booleschen Ausdruck, wenn es sich nicht um eine einfache Bindung handelt.

würde ich die Regel wie folgt schreiben:

rule "calcitonin evaluation" 
when 
    $p : Patient($labtestItem : labtests) 
    $lti: LabTestItem($result : result, parseFloat($result.substring(1,(result.length)-1)) > 8.4) from $labtestItem.get("calcitonin").get(0) 
then 
    $lti.setAbnormalIndicator("high"); 
    $lti.setAttentionLevel("important"); 
    modify($p){} 
end 

Edit: Um ein Null-Ergebnis von $labtestItem.get("calcitonin"), fügen Sie die Wache als Einschränkung zu vermeiden:

$p : Patient($labtestItem : labtests, 
       labtests.get("calcitonin") != null) 
+0

Vielen Dank! Es hilft mir sehr –

+0

eine weitere Frage.if $ labtestItem.get ("Calcitonin") zurück Null, wie kann ich dieses Problem lösen? –