我可以在触发规则之前在 drl 文件中添加事实吗(基本上是 "before" "when" 子句)?
Can I add facts in a drl file prior to rule firing (basically "before" the "when" clause)?
我正在考虑生成(或 "compiling")来自单独数据模型的 drl 文件。理想情况下,我希望 drl 文件尽可能独立,并且不需要与相应的 java 代码进行大量交互(插入事实、设置全局变量等)。
我知道我可以在 drl 规则中声明事实 (类),并且我可以在 "then" 结果中插入事实。
我也知道我可以在规则中使用全局变量,但我需要在我的会话中明确设置它们(即在 java 代码中)。
有没有办法在触发规则之前将事实实例添加到工作内存中,但仍然在任何 Java 代码之外?
示例代码:
declare SomeFact end;
// pseudo code as I dont know if its possible
$listOfStrings = {"one", "two", "three"};
rule "some name"
when
$someFact:SomeFact($code:code)
$listOfStrings contains $code
then
// ...
想法是在创建 drl 时我知道我需要在我的规则中检查一组特定的事实。现在是否可以在任何 java 代码之外为我插入这些代码?
谢谢!
如果您想将所有内容都放在一个 DRL 文件中,您可以使用以下模式:
declare SomeFact
code: String
end
rule kickoff
salience 999999999
when
then
// initialize globals, if necessary
// insert facts
insert( new SomeFact( "one" ) );
end
规则可以写成
rule "some name"
when
$someFact: SomeFact( code in ("one", "two", "three") )
then
// ...
end
我正在考虑生成(或 "compiling")来自单独数据模型的 drl 文件。理想情况下,我希望 drl 文件尽可能独立,并且不需要与相应的 java 代码进行大量交互(插入事实、设置全局变量等)。
我知道我可以在 drl 规则中声明事实 (类),并且我可以在 "then" 结果中插入事实。 我也知道我可以在规则中使用全局变量,但我需要在我的会话中明确设置它们(即在 java 代码中)。
有没有办法在触发规则之前将事实实例添加到工作内存中,但仍然在任何 Java 代码之外?
示例代码:
declare SomeFact end;
// pseudo code as I dont know if its possible
$listOfStrings = {"one", "two", "three"};
rule "some name"
when
$someFact:SomeFact($code:code)
$listOfStrings contains $code
then
// ...
想法是在创建 drl 时我知道我需要在我的规则中检查一组特定的事实。现在是否可以在任何 java 代码之外为我插入这些代码?
谢谢!
如果您想将所有内容都放在一个 DRL 文件中,您可以使用以下模式:
declare SomeFact
code: String
end
rule kickoff
salience 999999999
when
then
// initialize globals, if necessary
// insert facts
insert( new SomeFact( "one" ) );
end
规则可以写成
rule "some name"
when
$someFact: SomeFact( code in ("one", "two", "three") )
then
// ...
end