Drools-第二天
规则属性:
enable:指定当前规则是否触发(true[默认],false);
enable true;
dialect:指定当前规则的语言类型(java[默认],mvel);
dialect "java";
salience:用于指定执行的优先级(数值越大越优先);
salience 10;
no-loop:防止update,insert,retrect三个方法导致的死循环(当前规则判定);
no-loop true/false[默认];
activation-group:指定规则组,一组规则只能触发一个规则;
activation-group "mygroup";
agenda-group:议程分组,可以在java文件中指定焦点触发;
drl:agenda-group "agenda-group-1";
java:session.getAgenda().getAgendaGroup(name:"agenda-group-1").setFocus();
auto-focus:自动获取焦点(同一个议程分组全部规则生效);
auto-focus true;
timer:指定规则的执行时间;
timer (3s,2s);第一个int表示几秒后执行,第二个int表示隔几秒执行一次;
timer(corn:0/1 * * * * * ?);使用标准的unix cron表达式的方式执行;
date-effective:指定规则在(dd-MMM-yyyy[默认])yyyy-MM-dd HH:mm:ss后生效;
java:System.setProperty("drools.dateformat","yyyy-MM-dd HH:mm:ss");
drl:date-effective “2021-3-18 00:00:00”;
date-expires:指定规则在(dd-MMM-yyyy[默认])yyyy-MM-dd HH:mm:ss后失效;
java:System.setProperty("drools.dateformat","yyyy-MM-dd HH:mm:ss");
drl:date-expires“2021-3-18 00:00:00”;

高级语法:
global:定义全局变量;
注意:gloable定义的类型如果是包装类型,那么只在当前规则内有效;
定义的是集合类型和javabean对象则所有规则都有效;
drl:global java.lang.Integer integer;(声明全局变量)
java:session.setGlobal("integer",0);(为全局变量赋初始值)
query:在java代码中获取,查询工作内存中符合约束条件的Fact对象;
drl: query 查询名称(查询参数)
LHS
end
java:session.getQueryResults("查询名称");
java:session.getQueryResults("查询名称","查询参数");
function:函数相当于java类的方法
function 返回值类型 函数名 (参数列表){
//逻辑代码
}
LHS加强
1.复合限制:in/not in:判断是否存在;
例:$student:Student(name in ("张三","李四","王五"));
$student:Student(name not in ("张三","李四","王五"));
2.条件元素eval:用于true,false关键字的替换;
例:eval(true,false [1 == 1] );
3.条件元素not:判断工作内存中不存在某个对象;
例:not Student(age < 10);
4.条件元素exists:判断工作内存中存在某个对象;
例:exists Student(age < 10);
5.规则条件部分继承:规则继承只继承条件部分(LHS);
例:rule "rule_2_extends_1" extends "rule_1"
RHS加强
1.halt:立即终止后面所有规则的执行;
例:drools.halt();
2.getWorkingMemory():返回工作内存中的所有对象;
例:sout(drools.getWorkingMemory());
3.getRule():返回当前规则对象;
例:sout(drools.getRule())
