Drools 의사 결정 테이블을 사용하려고합니다. 내가 직면하고있는 문제는 drools이 현재 개체에 대한 변수를 할당하지 않는다는 것입니다.drools의 객체 선언은 descision 테이블을 능가합니다.
내가이 샘이 오류를 얻을 :
Drools error: Rule Compilation error patient cannot be resolved
내 파일은 다음과 같습니다 엑셀 :
을 그리고 내 연구실 코드의 일부는 다음과 같습니다
DecisionTableConfiguration dtconf = KnowledgeBuilderFactory.newDecisionTableConfiguration();
dtconf.setInputType(DecisionTableInputType.XLS);
dtconf.setWorksheetName("Sheet1");
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
Resource r = ResourceFactory.newClassPathResource("rules.xls");
kbuilder.add(r, ResourceType.DTABLE, dtconf);
SpreadsheetCompiler compiler = new SpreadsheetCompiler();
String drl = compiler.compile(r.getInputStream(), InputType.XLS);
System.out.println(drl);
if(kbuilder.hasErrors()) {
for(KnowledgeBuilderError err : kbuilder.getErrors()) {
System.out.println("Drools error: " + err.getMessage());
}
model.addAttribute("droolErrors", kbuilder.getErrors());
return "index";
}
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
knowledgeBase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatefulKnowledgeSession dsess = knowledgeBase.newStatefulKnowledgeSession();
for(Patient p : patients) {
dsess.insert(p);
}
model.addAttribute("factCount", dsess.getFactCount());
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(dsess, "test");
int res = dsess.fireAllRules();
System.out.println(res);
dsess.dispose();
logger.close();
생성 된 drl은 다음과 같습니다.
package com.sorkmos.drools.domain;
//generated from Decision Table
import com.sorkmos.drools.domain.*;
// rule values at C11, header at C6
rule "Risks rules_11"
when
Patient(age == 75)
then
patient.setAge(22);
end
Drools error: Rule Compilation error patient cannot be resolved
"환자"변수를 설정해야합니다. 그러나 나는 방법을 이해할 수 없다. 원래 올바른 DRL 버전은 다음과 같이 될 것이다 :
package com.sorkmos.drools.domain;
//generated from Decision Table
import com.sorkmos.drools.domain.*;
// rule values at C11, header at C6
rule "Risks rules_11"
when
Patient(age == 75);
patient: Patient();
then
patient.setAge(22);
end
예, 나는 C-H를 병합하여 환자 : 환자에게 변수를 설정했습니다. 감사! – heldt