Drools插入顺序

时间:2016-03-16 04:46:18

标签: drools

我正在尝试为问题集设置drools,但顺序似乎是随机的。我尝试过使用显着性,但顺序仍然是随机的。

rule "Question Set One"
// First
salience 90
when
then
    QuestionList questionList = new QuestionList();
questionList.add(new Question(Key.FIRST_NAME, "Field", AnswerType.STRING));
questionList.add(q);
QuestionSet questionSet = new QuestionSet("Question Set One", questionList);
insert(questionSet);
end

rule "Ask Your Contact Details"
salience 5
when
then
QuestionList questionList = new QuestionList();
questionList.add(new Question(Key.FIRST_NAME, "First Name", AnswerType.STRING));
 questionList.add(new Question(Key.LAST_NAME, "Last Name", AnswerType.STRING));
 questionList.add(new Question(Key.EMAIL, "Email Address", AnswerType.STRING));
QuestionSet questionSet = new QuestionSet("Contact Details",     questionList);
    insert(questionSet);
end

1 个答案:

答案 0 :(得分:0)

插入的顺序(即insert(.)的执行)取决于某些右侧执行的顺序,即。他们的规则被“解雇”。没有显着性,这个顺序取决于难以控制的环境 - 没有人愿意,因为无论如何它都无关紧要。

如果它确实很重要,那么控制它的一种方法就是显着性,正如你在这些规则中所拥有的那样,尽管没有明显的理由说明为什么它应该与这两个规则有关。因此,“问题集一”将首先被解雇,“问题集一”是第一个被插入的。 (你没有表明任何其他情况。)

在完成这两个插入后,两个QuestionSet事实存在于WorkingMemory中。没有任何关于这些事实的秩序概念。

如果您需要按照某种顺序排列事实,请添加“等级”等属性,指定合适的值(序数或其他),并相应地编写规则。