Drools - 从规则中访问事实元数据

时间:2017-12-01 16:54:20

标签: drools

在Drool规则文件中,如何访问与声明的事实关联的元数据?

粗略地说,我想做以下事情:

declare MyFact
  @myMetaData("foo")
end

rule "MyRule"
when
  exists(OtherFact())
then
  MyFact f = new MyFact();
  global.post(f.metaData["myMetaData"]);
end

我真的很惊讶我无法找到一个简单的答案,但我可能会遗漏一些简单的东西,因为我对Drools很新。

我通过从一个Java类扩展MyFact来解决这个问题,这个Java类可以从KieBase以编程方式检索FactType,然后通过FactType :: getMetaData()获取属性,但再一次,惊讶于它并不简单方式。

1 个答案:

答案 0 :(得分:0)

下面显示的大部分链接调用都可以隐藏在函数中。你必须传入KieContext kcontext。或者使用静态方法,可以将KieBase设置为静态。

package simple;
declare SomeFact
  @Meta1("meta 1")
end

rule showMeta
when
then
   System.out.println( kcontext
                       .getKieRuntime()
                       .getKieBase()
                       .getFactType( "simple", "SomeFact" )
                       .getMetaData()
                       .get( "Meta1" ) );
end