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(a)hotmail.com
To: rules-users(a)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
_________________________________________________________________
¿Quieres saber qué PC eres? ¡Descúbrelo aquí!
http://www.quepceres.com/