Drools-第二天
規(guī)則屬性:
enable:指定當(dāng)前規(guī)則是否觸發(fā)(true[默認(rèn)],false);
enable true;
dialect:指定當(dāng)前規(guī)則的語言類型(java[默認(rèn)],mvel);
dialect "java";
salience:用于指定執(zhí)行的優(yōu)先級(jí)(數(shù)值越大越優(yōu)先);
salience 10;
no-loop:防止update,insert,retrect三個(gè)方法導(dǎo)致的死循環(huán)(當(dāng)前規(guī)則判定);
no-loop true/false[默認(rèn)];
activation-group:指定規(guī)則組,一組規(guī)則只能觸發(fā)一個(gè)規(guī)則;
activation-group "mygroup";
agenda-group:議程分組,可以在java文件中指定焦點(diǎn)觸發(fā);
drl:agenda-group "agenda-group-1";
java:session.getAgenda().getAgendaGroup(name:"agenda-group-1").setFocus();
auto-focus:自動(dòng)獲取焦點(diǎn)(同一個(gè)議程分組全部規(guī)則生效);
auto-focus true;
timer:指定規(guī)則的執(zhí)行時(shí)間;
timer (3s,2s);第一個(gè)int表示幾秒后執(zhí)行,第二個(gè)int表示隔幾秒執(zhí)行一次;
timer(corn:0/1 * * * * * ?);使用標(biāo)準(zhǔn)的unix cron表達(dá)式的方式執(zhí)行;
date-effective:指定規(guī)則在(dd-MMM-yyyy[默認(rèn)])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:指定規(guī)則在(dd-MMM-yyyy[默認(rèn)])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”;

高級(jí)語法:
global:定義全局變量;
注意:gloable定義的類型如果是包裝類型,那么只在當(dāng)前規(guī)則內(nèi)有效;
? ? ? ? ? ?定義的是集合類型和javabean對(duì)象則所有規(guī)則都有效;
drl:global java.lang.Integer integer;(聲明全局變量)
java:session.setGlobal("integer",0);(為全局變量賦初始值)
query:在java代碼中獲取,查詢工作內(nèi)存中符合約束條件的Fact對(duì)象;
drl:? ?query 查詢名稱(查詢參數(shù))
? ? ? ????????LHS
? ? ? ? ? ?end
java:session.getQueryResults("查詢名稱");
java:session.getQueryResults("查詢名稱","查詢參數(shù)");
function:函數(shù)相當(dāng)于java類的方法
function 返回值類型 函數(shù)名 (參數(shù)列表){
? ? //邏輯代碼
}
LHS加強(qiáng)
1.復(fù)合限制:in/not in:判斷是否存在;
? ? 例:$student:Student(name in ("張三","李四","王五"));
? ? ? ? ? ?$student:Student(name not in ("張三","李四","王五"));
2.條件元素eval:用于true,false關(guān)鍵字的替換;
? ??例:eval(true,false [1 == 1] );
3.條件元素not:判斷工作內(nèi)存中不存在某個(gè)對(duì)象;
? ? 例:not Student(age < 10);
4.條件元素exists:判斷工作內(nèi)存中存在某個(gè)對(duì)象;
? ??例:exists Student(age < 10);
5.規(guī)則條件部分繼承:規(guī)則繼承只繼承條件部分(LHS);
? ? 例:rule "rule_2_extends_1" extends "rule_1"
RHS加強(qiáng)
1.halt:立即終止后面所有規(guī)則的執(zhí)行;
? ? 例:drools.halt();
2.getWorkingMemory():返回工作內(nèi)存中的所有對(duì)象;
? ? 例:sout(drools.getWorkingMemory());
3.getRule():返回當(dāng)前規(guī)則對(duì)象;
? ? 例:sout(drools.getRule())
