Каждая строка в таблице становится правилом, каждый столбец действия становится строкой в затем блоке.
Для каждого правила вам нужен оператор для создания темы, операторы для его заполнения и оператор для добавления его к соответствующему ученику.
Значения в 'CREATE' и 'COLLECT' необходимы, в противном случае действие будет пропущено.
;
требуется в ячейке без 'target object' и не требуется, когда вы указываете '$ subject' и ' Объекты $ student. Не спрашивайте меня почему. Только что проанализировал сгенерированный drl.
Вы можете скрыть две «технические строки».
Это сгенерирует два правила, как показано ниже
package draft;
//generated from Decision Table
import draft.Student;
import draft.Subject;
// rule values at A9, header at A4
rule "Rule 1"
when
$student:Student(id == "123")
then
Subject $subject = new Subject();
$subject.setSubId(5);
$subject.setSubjectName('English');
$student.addSubject($subject);
end
// rule values at A10, header at A4
rule "Rule 2"
when
$student:Student(id == "123")
then
Subject $subject = new Subject();
$subject.setSubId(6);
$subject.setSubjectName('Hindi');
$student.addSubject($subject);
end
PS: Я боролся с тем, что "
автоматически заменяется редактором Cal c на `` который не был допустимым символом для парсера слюни, поэтому я использовал одинарные кавычки, которые оказались специальным символом на начало ячейки в редакторе и пропущено. Итак, фактическое значение ячейки, которое, наконец, сработало для меня, было ''English'
.
Вот мои модели
public class Student {
private int id;
private String name;
private List<Subject> subjectList = new ArrayList<>();
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void addSubject(Subject subject) {
subjectList.add(subject);
}
public void setSubjectList(List<Subject> subjectList) {
this.subjectList = subjectList;
}
public List<Subject> getSubjectList() {
return subjectList;
}
}
public class Subject {
private int subId;
private String subjectName;
public void setSubId(int subId) {
this.subId = subId;
}
public int getSubId() {
return subId;
}
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
public String getSubejctName() {
return subjectName;
}
}
тест
@DroolsSession(resources = "draft/ApplicableSubjects.xls",
builderProperties = "drools.dump.dir = target/dump")
public class PlaygroundTest {
@Rule
public DroolsAssert drools = new DroolsAssert();
@Test
public void testIt() {
drools.insertAndFire(new Student(123, "Student 123"));
drools.printFacts();
}
}
тестовый результат
00:00:00 --> inserted: Student[id=123,name=Student 123,subjectList=[]]
00:00:00 --> fireAllRules
00:00:00 <-- 'Rule 1' has been activated by the tuple [Student]
00:00:00 <-- 'Rule 2' has been activated by the tuple [Student]
00:00:00 Facts (1):
Student[id=123,name=Student 123,subjectList=[draft.Subject@1ded7b14, draft.Subject@29be7749]]