vijay
I don't understand some of the code in your example. But, if you look at
the source for GenericEntity (which GenericValue is a subclass of), you will
see that at its heart, there is a Map of name-value pairs, i.e. a String
which is the field name mapped to (in this case) the value(s) retrieved by
the GenericDelegator. Typically, the GenericValue contains the name/value
pairs of some row in a table or view.
But, here is some code that will do what you want (assuming that
"grandTotal" is really a field in OrderHeader which I don't remember for
sure.) I have not included the required try/catch error trapping for
clarity.
//Get a list of orders matching our conditions. In place of the ellipse,
add your conditions
List orders = delegator.findByAnd("OrderHeader", ...);
Iterator i = orders.iterator();
double total = 0.0;
//Go through the list and add up all the "grandTotal" values.
while (i.hasNext())
{
GenericValue orderHeader = (GenericValue) i.next();
String orderId = orderHeader.getString("orderId");
Double totalThisOrder = orderHeader.getDouble("grandTotal");
System.out.println("Order id is " + orderId + "\t\tAmount is " +
totalThisOrder);
if(totalThisOrder != null)
total += totalThisOrder.doubleValue();
}
System.out.println(" \t\t Grand Total " + total);
In the above example, "orders" is a Java List of GenericValue objects
returned by the delegator. We have to iterate through them and extract the
"grandTotal" values to add up.
This is such a common task that maybe I'll write a
double GenericValue.sumDouble(List <GenericValue>values, String field)
and
long GenericValue.sumLong(List <GenericValue>values, String field)
Give it a try and see if this is not what you want.
Skip
-----Original Message-----
From: vijay Si [mailto:[EMAIL PROTECTED]
Sent: Tuesday, September 25, 2007 2:32 AM
To: [email protected]
Subject: Re: TypeCasting GenericValue object.
Hello Skip,
My piece of code is :
itelim = elim.iterator(); //where elim = findByCond(........);
elimList = new ArrayList();
while(itelim.hasNext())
{
elimList = itelim.next();
elimList.toString();
String a1 = elimList.getString("grandTotal");
a = Double.parseDouble(a1);
}
Now this does give me some result at the o/p : which is last entry in the
grandTotal column(a double value) say for eg: 350.30
I also used the piece of code that you provided.....it works for sure but
gives "void" at the o/p.......
Also wanted to ask as to how can i iterate over the grandTotal entries. for
eg: if i have to get grandTotal for all products and sum it up.
Thanks
On 9/25/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
>
> You can't type cast the GenericValue. You possibly can type cast one of
> the
> objects it holds depending on the type. Each GenericValue holds different
> types if information depending on what it represents. For example,
>
> GenericValue existingOrderHeader = delegator.findByPrimaryKey
> ("OrderHeader",
> UtilMisc.toMap("orderId", orderId));
> String customerId = externalOrderHeader.getString("customerPartyId");
>
> if OrderHeader had a Double value in it, say "grandTotal", you could
>
> double grandTotal =
> externalOrderHeader.getDouble("grandTotal").doubleValue();
>
>
> or
>
> double grandTotal =
> ((Double)externalOrderHeader.get("grandTotal")).doubleValue();
>
> Both of these will throw a ClassCastException if "grandTotal" is not a
> double.
>
> Everything in a GenericValue object is an object itself, i.e double is
> wrapped in Double, etc.
>
> Hope that helps
>
> Skip
>
> -----Original Message-----
> From: vijay Si [mailto:[EMAIL PROTECTED]
> Sent: Monday, September 24, 2007 11:12 PM
> To: [email protected]
> Subject: TypeCasting GenericValue object.
>
>
> Hi,
> I have been trying to type cast a generic value object to double and
> string,
> but i get an error
>
> "java.lang.ClassCastException: Cannot cast org.ofbiz.entity.GenericValueto
> java.lang.xx"
>
> Is there any particular way in ofbiz to work around this?
>
> Regards
>
>