可以使用 Drools 规则引擎将局部变量创建到局部规则定义中吗?
我写了一个示例代码,但它没有编译。这个例子只是为了暴露关于局部声明的想法(我知道这是错误的)
/*...*/
rule "Test local Variable"
when
String $departmentName = "Music";
then
System.out.println($departmentName);
end
/*...*/
Run Code Online (Sandbox Code Playgroud)
错误信息是:
org.drools.CheckedDroolsException: There were errors in the rule source: [ERR 101] Line 25:2 no viable alternative at input 'String' in rule "Test local Variable"
Run Code Online (Sandbox Code Playgroud)
位置 [25,2] 由行定义:
String $departmentName = "Music";
Run Code Online (Sandbox Code Playgroud) 今天我遇到了一个有趣的挑战,我想要你如何处理这种情况.
所以问题是如下(我已经将它转换为演示数据,因为如果不了解公司字典,真正的问题就没有多大意义).
我们有一个至少有16个条件的决策表.因为管理所有这些(2 ^ 16种可能性)是不可能的壮举,所以我们决定只列出异常.像这样:

作为一个例子,我只添加了10个条件,但实际上有(现在)16个.基本思想是我们有一个基线(默认值),它对每个人都有效,并且对这个默认值都有例外.
例:
你有一个也是海盗的外国人.如果逐个执行所有异常,并按条件执行条件,则删除至少有一个条件失败的异常.最后,您将得到以下两个对我们的案例有效的例外情况.匹配在IsPirate和IsForeigner条件上.但正如你所看到的,这里有2个结果,如果计算默认值,实际上有3个.

我们的方案
现在我们提出的如何解决这个问题的方法是,在添加这些异常的GUI中,应该运行一个算法来检查这种情况并强制您更具体地定义异常.这仍然是一个理论,并没有经过测试,但我们认为它可以这样工作.
我的问题
我正在寻找使规则易于管理的替代解决方案,并防止我在示例中显示的问题.
在我的引擎'Utilizer'中,我试图用Rspec 3.2测试路线.命名空间是孤立的
# lib/utilizer/engine.rb
module Utilizer
class Engine < ::Rails::Engine
isolate_namespace Utilizer
...
end
end
Run Code Online (Sandbox Code Playgroud)
引擎安装到虚拟应用程序:
# spec/dummy/config/routes.rb
Rails.application.routes.draw do
mount Utilizer::Engine => "/utilizer", as: 'utilizer'
end
Run Code Online (Sandbox Code Playgroud)
对spec_helper.rb我添加了几个配置如下(从这里):
# spec/spec_helper.rb
RSpec.configure do |config|
...
config.before(:each, type: :routing) { @routes = Utilizer::Engine.routes }
...
end
Run Code Online (Sandbox Code Playgroud)
当我定义一条路线时:
# config/routes.rb
Utilizer::Engine.routes.draw do
resources :auths, id: /\d+/, only: [:destroy]
end
Run Code Online (Sandbox Code Playgroud)
Rake为虚拟应用程序正确显示:
$ spec/dummy > bundle exec rake routes
$ utilizer /utilizer Utilizer::Engine
$ Routes for Utilizer::Engine:
$ auth DELETE /auths/:id(.:format) utilizer/auths#destroy {:id=>/\d+/} …Run Code Online (Sandbox Code Playgroud) 我有一个场景,我想根据角色添加插入选项.所以想象一下,我在内容树中有一个名为'Components'的文件夹.
我有两个角色叫做 - 贡献者 - 审批者
我有3个模板,我想选择它们以在'Components'文件夹中显示为插入选项. - 模板1 - 模板2 - 模板3
对于贡献者,我只想将模板1显示为插入选项.
对于审批者,我只想将模板2和模板3显示为插入选项.
我怎样才能做到这一点?
我想到了这个场景.将所有模板作为插入选项应用于Components文件夹,然后使用/ sitecore/system/Settings/Rules/Insert Options规则删除基于角色的模板,但它不起作用.
我正在使用Sitecore 8 update 2.
我正在编写一个 RESTful 服务来根据一些规则计算一些值。
例如:
有一个这样的 JSON:
{ "amount": 100,
"destination":"A"
}
Run Code Online (Sandbox Code Playgroud)
该数据是请求正文,发布到我的控制器:
@RequestMapping(value = "/orders", method= RequestMethod.POST)
public void getOrderRequest(@RequestBody Order order){
// use Drools to calculate and return the result
}
Run Code Online (Sandbox Code Playgroud)
这是实体类:
public class Order{
private Integer amount;
private String destination;
private Float price;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
我用Drools来计算价格(假代码):
package rules
import entity.Order
rule "rule1"
no-loop true
lock-on-active true
salience 1
when
$s : Order(amount <= 50 && destination=="A")
then
$s.setPrice(1000);
update($s);
rule "rule2"
no-loop true
lock-on-active true …Run Code Online (Sandbox Code Playgroud) 我尝试在网上进行大量研究,但无法找到错误的确切原因
这是我的问题
我试图在 RHS (THEN) 中编写 if-else 条件,但我的口水显示以下错误
[An error occurred when attempting to build drools rule set. Error: Unable to Analyse Expression if (
Run Code Online (Sandbox Code Playgroud)
我知道这清楚地表明我不能在 THEN (RHS) 中写入 if ,但我能够在 drools 版本 6.5.0-FINAL 中做到这一点
这是6.5.0版本中引入的东西吗?请引导我进行这项调查的正确方向
我无法为此创建两个规则,我需要在 THEN 中添加一个 if-else 条件
我的drools版本是5.5.0
rule "TEST"
when
$aa : Age()
then
if(//something)
{
//something
}
else
{
}
end
Run Code Online (Sandbox Code Playgroud) 如果我们需要使用可插拔规则引擎,那么与它相关的所有开放标准是什么.
如何为每个平台"无需重写规则"迁移规则引擎?
我在BizTalk中有一个具有CallRules形状的编排.业务流程的行为不符合预期,我将问题缩小到业务规则引擎(BRE).
我使用了Business Rules Composer中的测试策略功能,并为其提供了一个消息实例.BRE评估了规则,并且在检查输出时,似乎已完全满足其中一条规则.该规则中的每个条件都已评估为true,但操作尚未应用于我的消息.
我无法弄清楚为什么会这样 - 如果满足条件,为什么不采取行动?!
biztalk rule-engine biztalk-2009 biztalk-2010 biztalk-rule-engine
规则引擎通常在商业人员可以直接修改应用程序的一些非常动态的部分的前提下销售,而无需开发人员的任何参与或编程.
在我看来,投入生产任何未被自动化测试覆盖的代码都会带来严重的风险.我知道许多规则引擎实际上是一个规则管理环境,包括版本控制,环境之间的升级等等但是他们为BA编写测试提供了哪些支持?我已经看到一些文档似乎将JUnit等框架集成到引擎中,这肯定不是非程序员会做的类型或编程.
BA可以通过业务引擎轻松更改规则,但是如果没有程序员的帮助,他可以轻松编写可以覆盖它的测试吗?在实践中如何解决规则测试覆盖问题?
rule-engine ×10
drools ×3
biztalk ×1
biztalk-2009 ×1
biztalk-2010 ×1
c# ×1
dsl ×1
insert ×1
java ×1
nxbre ×1
options ×1
routing ×1
rspec ×1
rspec-rails ×1
scope ×1
sitecore ×1
templates ×1
unit-testing ×1