2016-11-22 5 views
0
rule "Your First Rule" 
no-loop 
salience 10 
when 
    $c : Company() 
    // $e : String() 
    $e : StaffException() 
    $r : StaffExcCode($r.getCode() == "1") from $e.getStaffException() 
    $y : ArrayList() 
     from collect (String() from $r.getStaffExc()) 
     $ee : Staff(StaffCode not memberOf($y)) from $c.getStaffInfo() 

then 
    //actions 
    System.out.println("Satisfied." + $y); 
    //System.out.println("Satisfied." + $ee); 

КОНЦАDrools - Как получить String [] из ArrayList собирать

Я получил Список_массивы $ у и в надежде генерировать String [] массив для использования в качестве условия в memberOf. Как это можно сделать для реализации этой трансформации?

Это класс используется в демо: Класс StaffExcCode:

public class StaffExcCode { 
    private String StaffExc; 
    private String code; 

    public StaffExcCode(String StaffExc, String code) { 
     this.StaffExc = StaffExc; 
     this.code = code; 
    } 
    /* ignore the get and set */ 
} 

Класс StaffException:

public class StaffException { 
    private List<StaffExcCode> exc; 
    /* ignore the get and set */ 
} 

класса Персонал:

public class Staff { 
    private String StaffCode; 

    private String StaffName; 

    private int StaffAge; 
    /* ignore the get and set */ 
} 

Класс Компания:

public class Company { 
    private int CompanyCode; 

    private String CompanyName; 

    private int StaffNumber; 

    private List<Staff> StaffInfo; 
    /* ignore the get and set */ 
} 
+0

Я бы попытался переписать правило так, чтобы оно работало, но это невозможно, учитывая неполный и непоследовательный фрагмент правила, которое вы опубликовали. Редактировать, предоставляя точную информацию о типе соответствующих классов и соответствующих полей. – laune

+0

Обновлено .. Спасибо за помощь. – Calvin

ответ

0

Я не уверен, получил ли я это правильно, поскольку вы не разместили заявление о том, что должно делать правило или (даже лучше) набор данных с ожидаемыми результатами. (Если вы придерживаетесь обычного соглашения JavaBeans, то в StaffException не соответствует $e.getStaffException().)

Я не думаю, что вам нужно собрать данные в список; есть not CE, который может быть применен к шаблону

rule "Your First Rule" 
when 
    $c : Company($si: staffInfo) 
    $staff: Staff($staffCode: staffCode, $sn: staffName) from $si 
    StaffException($exc: exc) 
    not StaffExcCode(staffExc == $staffCode, code == "1") from $exc 
then 
    System.out.println("Satisfied: " + $sn); 
end 

Было бы еще проще, если бы вы вставить персонал и StaffExcCode как факты, а не извлекать их из вмещающих фактически объектов.