Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
drools在java中从excel工作表读取drt_Java_Drools_Rule - Fatal编程技术网

drools在java中从excel工作表读取drt

drools在java中从excel工作表读取drt,java,drools,rule,Java,Drools,Rule,我正在通过drt阅读excel表格。excel工作表看起来像附加的图像 在本表中,实际信息从第4行开始。但是,第2行的信息也很重要。这意味着,如果相应的单元格中没有值,它将变为空白,但在规则中,它将接受任何内容 例如:,如果我分别为属性Attr1、Attr2和Attr3传递属性值为5、6、4的事实;第一行规则将在规则中执行。但是,如果我发送的值是55,57,58,分别用于attr1、attr2和attr3,则应执行第三条规则。请看一看并提出一些解决方案 编辑 例如: 我正在阅读excel表格并创

我正在通过drt阅读excel表格。excel工作表看起来像附加的图像

在本表中,实际信息从第4行开始。但是,第2行的信息也很重要。这意味着,如果相应的单元格中没有值,它将变为空白,但在规则中,它将接受任何内容

例如:,如果我分别为属性Attr1、Attr2和Attr3传递属性值为5、6、4的事实;第一行规则将在规则中执行。但是,如果我发送的值是55,57,58,分别用于attr1、attr2和attr3,则应执行第三条规则。请看一看并提出一些解决方案

编辑 例如:

我正在阅读excel表格并创建事实。事实表明 Xconfig包含:

公共类XConfig{

private String attr1;

private String attr2;

private String attr3;

//getter and setter

}
公共类XLine{

private String attr1;

private String attr2;

private String attr3;

private String price=0.0;
//getter and setter

}
现在通过drt,我逐行阅读,从而创造了三个事实

1. XConfig(attr1 = 5, attr2=6,attr3=4);
2. XConfig(attr1 = "", attr2=10,attr3=54);
3. XConfig(attr1 = "", attr2="",attr3="");
注:=为空字符串

上述三个配置事实被插入到工作内存中

现在我在写一条流口水的规则:

when
   $xline : XLine($at1 : attr1, $at2 : attr2, $at3 : attr3, price == 0.0)
   $xconfig : XConfig(attr1 == $at1, attr2 == $at2, attr3 == $at3)
then 
   // do somthing
现在 情景1: 我正在工作内存中插入一个事实XLineattr1=5、attr2=6、attr3=4。这将通过上述规则选择XConfigattr1=5、attr2=6、attr3=4对象

情景2:

我正在工作内存中插入一个事实XLineattr1=,attr2=,attr3=4。这应该通过上述规则选择同一个对象XConfigattr1=5,attr2=6,attr3=4。因为attr1接受任何值,这意味着如果某些属性在同一配置对象中匹配,任何值都将进入该位置。这意味着如果XLine objec的一个属性值T与XCONFIG对象的相同属性值匹配;我们需要考虑XCONFIG对象来检查与XCONFIG对象不匹配的另一个属性;在BLANKYPHORY值中标记为任何属性。如果标记为任意,则可以在XCONFIG对象的位置取任何值。

我希望我能让你明白我愿意通过规则做什么

谢谢

您可以使用null代替。不能同时将字符串和整数作为任何类型。然后,此规则足以查找匹配对:

when
  $xline : XConfig($at1 : attr1, $at2 : attr2, $at3 : attr3)
  $xconfig : XLine(attr1 == null || == $at1,
                   attr2 == null || == $at2,
                   attr3 == null || == $at3)
then 

您可以考虑编写显式规则——如所需的多——而不是插入XLoad对象。这样可以区分实际匹配的,例如

rule match564
when
    XConfig( attr1 == 5, attr2 == 6, attr3 == 4)
then ... end
rule match xx4
when
    XConfig( attr1 == null, attr2 == null, attr3 == 4)
then ... end

我不太明白。你需要规则吗?你需要一个程序来从Excel表中创建规则吗?我在Excel表中没有看到55, 57, 58。你能更具体一些吗?@这意味着当我通过55、57、58作为一个值为AtTr1、AtTr2和Att3时,因为任何与空白字段有关;它应该认为这是有效的并且执行规则。关于第5行?有值,10,54?@laune我所做的是通过DRT读取它,并将其转换为Java POJO,然后将其插入到工作内存中。因此,如果有任何空白字段,则根据配置,即该字段的空白代码值是任意的;这意味着它可以接受任何值。在规则引擎中,我传递另一个POJO,即将搜索excel pojo,然后在规则的条件下执行操作。因此,基本上规则是用于匹配两个pojo。因此,如果有空白单元格,且空白代码值为ANY,则任何值都将正常工作。为什么不发布这些pojo的Java代码?如果没有代码,就无法讨论此问题。