Hi,
Below is the code where i fire the Rule,
What i meant by "when i supply values to the above Rule" is,
In my application i have provided a place where user can enter values for
"Adult Fare", "Child Fare".... etc
so i take the values from the and set it in a bean....(u can understand from
below code)
even if the user doesn't provide the values the Rule Still Executes....
While firing a Rule it (Drool) doesn't give any error for missing
Values......
i hope u r getting what i am trying to say......
Waiting for a Reply.
<code>
try {
final Reader sourceDRL = new StringReader(drlFileFormat);
// drlFileFormat is the String that contains the Dynamic Rule
final PackageBuilder builder = new PackageBuilder();
//this wil parse and compile in one step
builder.addPackageFromDrl(sourceDRL);
// Check the builder for errors
if ( builder.hasErrors()){
System.out.println( builder.getErrors().toString() );
throw new RuntimeException("Unable to compile drl");
}
//get the compiled package (which is serializable)
final Package pkg = builder.getPackage();
//add the package to a rulebase (deploy the rule package).
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
final StatefulSession ruleStateSession =
ruleBase.newStatefulSession();
ruleStateSession.addEventListener( new DebugAgendaEventListener()
);
ruleStateSession.addEventListener( new
DebugWorkingMemoryEventListener() );
ApplyRuleBean objApplyRuleBean = new ApplyRuleBean();
if(!_jtxtAdultfare.getText().isEmpty())
objApplyRuleBean.setAdultFare(_jtxtAdultfare.getText());
if(!_jtxtChildfare.getText().isEmpty())
objApplyRuleBean.setChildFare(_jtxtChildfare.getText());
if(!_jtxtnettpayable.getText().isEmpty())
objApplyRuleBean.setNettPayable(_jtxtnettpayable.getText());
/*Return "ruleStateSession" as a return type of the
function... for MultipleRule....*/
ruleStateSession.insert(objApplyRuleBean);
ruleStateSession.fireAllRules();
ruleStateSession.dispose();
int iIndexEquale = alActions.indexOf("=");
String sResultObject = (String)
alActions.get(iIndexEquale-1);
if(sResultObject.equalsIgnoreCase("Adult Fare")){
AppConstantsBean.getInstance().showErrorMessage("Result
Adult Fare ::::
"+objApplyRuleBean.getAdultFare(),AppConstantsBean.INFO_MESSAGE);
System.out.println("Result adult fare ::::
"+objApplyRuleBean.getAdultFare());
}
if(sResultObject.equalsIgnoreCase("Child Fare")){
AppConstantsBean.getInstance().showErrorMessage("Result
Child Fare ::::
"+objApplyRuleBean.getChildFare(),AppConstantsBean.INFO_MESSAGE);
System.out.println("Result child fare ::::
"+objApplyRuleBean.getChildFare());
}
if(sResultObject.equalsIgnoreCase("Nett Payable")){
AppConstantsBean.getInstance().showErrorMessage("Result
Nett Payable ::::
"+objApplyRuleBean.getNettPayable(),AppConstantsBean.INFO_MESSAGE);
System.out.println("Result nett payable ::::
"+objApplyRuleBean.getNettPayable());
}
} catch (Throwable t) {
t.printStackTrace();
}
</code>
What do you mean by "when i supply values to the above Rule" ?
If you provide a snippet of the code you are using to assert objects
into the working memory and/or the values of the objects you are asserting,
it may be easier to understand your problem.
It also does not seem right to declare the ApplyRuleBean pattern twice
as you are doing.
[]s
Edson
-----
Regards,
:working:Nikhil
--
View this message in context:
http://www.nabble.com/Missing-Values-for-a-Dymanic-Rule......-tp16091335p...
Sent from the drools - user mailing list archive at
Nabble.com.