1

如何在 ilog jrules 中调用 ilrmain 函数,是隐式调用还是必须显式调用,在后一种情况下,我该怎么做。IBM 文档关于 ilrmain 功能非常晦涩难懂。

4

3 回答 3

2

IlrMain 提供了一种无需太多开销即可测试规则的简单方法。您定义输入变量,创建测试用例并使用 context.execute 调用规则执行。执行后,可以显示结果。

这是一个小例子:假设您创建了一个规则集来决定是否授予贷款。您的输入称为LoanApplication类型的应用程序,您希望在输出中做出决定。你的 IlrMain 看起来像这样:

LoanApplication app = new LoanApplication();
app.loanAmount = 5000
Applicant applicant = new Applicant();
app.applicant = applicant;
applicant.dateOfBirth = new ilog.rules.xml.types.IlrDate("1980-01-01");
applicant.income = 2000;
applicant.fixedExpenses = 600;

input = app;
context.execute();

System.out.println("Loan Decision: "+output.decision);

要启动 IlrMain,请单击Run > Run Configurations... > Rule Project并为您的规则项目创建一个新的运行配置。使用您的 IlrMain-Function 选择项目并选择具有功能 ilrmain 的 shure Launch 项目。在Parameters & Arguments下,您应该选择Clear All Values,以便将IlrMain 中的参数用于执行。应用并运行

在您的命令行中,您的贷款决定应该出现。就像是:

Loan Decision: green
于 2012-03-21T14:15:05.177 回答
1

注意:在“运行配置”中,您可以自动创建规则集。
因此,您无需在每次更改规则时手动创建新规则集...
如果您经常更改规则,例如在规则工件中测试某些内容时,导出规则集是一件很痛苦的事情。

您的代码也可能如下所示: 与您一起使用 Java 报告或断言内容... 希望对您有所帮助

IlrSessionFactory factory = new IlrJ2SESessionFactory();
IlrStatelessSession session = factory.createStatelessSession();
IlrSessionRequest sessionRequest = factory.createRequest();
sessionRequest.setRulesetPath(“/RuleAppName/rulesetName”);
sessionRequest.setTraceEnabled(true);
sessionRequest.getTraceFilter().setInfoAllFilters(true);
Map inputParameters = new HashMap ();
Report in_report = new Report(); // no-arg constructor
// ...populate the report...
inputParameters.put("report", in_report);
sessionRequest.setInputParameters(inputParameters);
IlrSessionResponse sessionResponse = session.execute(sessionRequest);
Report out_report = (Report)sessionResponse.getOutputParameters().get("report“);



于 2012-04-18T15:34:35.793 回答
0

在规则项目页面/选项卡中选择“使用函数 ilrmain 启动项目”后,从参数页面清除所有参数时出现问题;如果没有设置参数,您将无法运行 ilrmain 技术功能。您需要将参数表达式设置为某个值,它可能是空值。假设 XOM 有没有参数的构造函数 {Customer()}; 然后将参数表达式设置为 'new Customer()' 保存并运行 ilrmain。确保将 CLASSPATH VARIABLE 设置为 rule-engine.jar 文件并运行该函数。它应该工作。如果您还有任何问题,请回帖。这是一个示例-(规则触发计数将确认规则是否被实际触发),将 ilrmain 签名用作 void ilrmain(Object arg)。--

    customer.firstName="Abhishek";

    customer.age=17;

    int nrules = 0;



    insert customer;



    execute ();

    System.out.println(" The last name of the customer is " + customer.lastName );

    System.out.println("The first name of the customer is " +customer.firstName);


    nrules += returnValues.getIntValue("ilog.rules.firedRulesCount");

    System.out.println("The Number of rules fired " + nrules);

    //retractAll();

    //reset (); 
于 2013-11-19T22:42:46.913 回答