在我的组织中,我们决定使用KieServer来运行drools。我们没有使用kieworkbench,这是因为我们需要对部署进行更多控制,并且应该与相关应用程序保持一致。要求是外部化条件检查。
例如在下面的规则中,“2008”的检查将存储在数据库
中when
$customer:Customer(membersince <= "2008")
then
$customer.setOfferPercent("50%")
我已经想出了一种从数据库/内存缓存实现中获取此值的方法,并将其更改如下。这将允许我的操作/业务更改此类值而无需在kie服务器中进行部署并减少大量工作
when
$customer:Customer(membersince <= cache.get("Member_Since_Elite"))
then
$customer.setOfferPercent("50%")
我的问题是,有没有其他方法可以声明为全局,并在数据库中更改时自动填充值。我希望通过使用注释来做类似下面的事情,并需要一些帮助。
declare Properties
member_since_elite : String @Property("member_since_elite")
end
when
$customer:Customer(membersince <= Properties.member_since_elite )
then
$customer.setOfferPercent("50%")
这样,它可以帮助我在数值更改时自动从数据库/缓存中注入值。
答案 0 :(得分:1)
您可以创建一个(或多个)类,仅用于保存参数,例如,使用memberSinceElite等字段限制。然后你可以制定规则
when
Limit( $mse: memberSinceElite )
$c: Customer( membersince <= $mse, offerPercent != 50 )
then
modify( $customer ){ setOfferPercent( 50 ) }
这允许在正在进行的会话期间进行动态更新。如果可以自动填充Java对象,则可以在启动会话之前插入Limit对象。更新取决于您如何将数据库更新与会话相关联。
如果您不需要,可以使用全局。确保在插入任何事实之前将其设置为 。它会持续到会议。像以前一样自动填充。
(您还可以使用模板将值插入DRL代码。这需要重新生成和编译才能生效。)