I solved the counting of detail lines this way:

rule "Contador de lineas detalle vs Header"
  salience 10
  when
       Number($count : intValue) from accumulate(
              $mp : Map(this["_TYPE_"] == "D"), count($mp))
       $map : Map(this["_TYPE_"] == "H",
                  this["NU_REGISTROS"] != $count)
  then
    System.out.println("NumRecs=" + $count);
    listBitacora.add(new BitacoraDTO($map.get("_NUMLINE_"),
                                          "El número del lineas de detalle (" + $count +
                                          ") no empareja con lo del encabezado (" + $map.get("NU_REGISTROS") + ")"));
 end

However, I still got problem with summarize the amounts. I wrote

rule "Sumatoria de lineas detalle vs Header"
  salience 10
  when
       Number( $total : doubleValue) from accumulate(
               Map(this["_TYPE_"] == "D",
               $monto : ((Number) this["MONTO"]),
               sum($monto)))
       $map : Map(this["_TYPE_"] == "H",
                  this["MT_TOTAL"] != $total)
  then
    System.out.println("TOTAL=" + $total);
    listBitacora.add(new BitacoraDTO($map.get("_NUMLINE_"),
                                          "Error en el Detalle: El número del lineas de detalle (" +  $total +
                                          ") no empareja con lo del encabezado (" + $map.get("NU_REGISTROS") + ")"));
 end

And i am getting  mismatched input" so my question is how to convert a string to double in this line "$monto : ((Number) this["MONTO"])," ?

TIA

Yamil


From: yamilbracho@hotmail.com
To: rules-users@lists.jboss.org
Date: Tue, 9 Mar 2010 17:41:43 +0000
Subject: [rules-users] Problems count and sumarizing data in facts

Hi, I have two kind of facts in a map.
There is a field called _TYPE_ (H)eader, D)etail)
In the Header line I have two String fields, one for the number of details lines ("NU_REGISTROS") and another for the sum of the detail line ("MT_TOTAL")
In the detail lines I only have a String field called "MONTO" 

I would like to build two rules. One to check the count of detail lines versus the field in the header line so I wrote :

rule "Contador de lineas detalle vs Header"
  salience 10
  when
       $numRecs : Number()
                from accumulate(Map(this["_TYPE_"] == "D", $d : this["_NUMLINE_"]), count($d))
       $map : Map(this["_TYPE_"] == "H",
                  this["NU_REGISTROS"] != $numRecs)
  then
    System.out.println("NumRecs=" + $numRecs);
    listBitacora.add(new BitacoraDTO($map.get("_NUMLINE_"),
                                          "Error en el Detalle: El número del lineas de detalle (" +  $total +
                                          ") no empareja con lo del encabezado (" + $map.get("NU_REGISTROS") + ")"));
 end
 
 However I always got "NumRecs=1" when i print out the value of $numRecs but I am absolute sure there is two details lines...
 
 Second when i try to sumarize the total field in the details line i got (MONTO in the detail line is a string):
 
 rule "Sumatoria de lineas detalle vs Header"
  salience 10
  when
       $total : Number()
                from accumulate(Map(this["_TYPE_"] == "D",
                                $monto : this["MONTO"]),
                                sum(eval(Double.valueOf((String) $monto ))))
       $map : Map(this["_TYPE_"] == "H",
                  this["MT_TOTAL"] != $total)
  then
    System.out.println("TOTAL=" + $total);
    listBitacora.add(new BitacoraDTO($map.get("_NUMLINE_"),
                                          "Error en el Detalle: El número del lineas de detalle (" +  $total +
                                          ") no empareja con lo del encabezado (" + $map.get("NU_REGISTROS") + ")"));
 end
 
 but I got
 Rule Compilation error : [Rule name='Sumatoria de lineas detalle vs Header']
        rule/Rule_Sumatoria_de_lineas_detalle_vs_Header_0.java (9:1313) : The method eval(Double) is undefined for the type Rule_Sumatoria_de_lineas_detalle_vs_Header_0


 
 Any help in those tow problems
 
 TIA

Yamil


Actualízate gratis al nuevo Internet Explorer 8 y navega más seguro


Compartir tus mejores FOTOS es fácil en Messenger ¡DESCUBRE cómo!