When we work with View Link accessors or Association accessors we can use Groovy for aggregation calculations in a very convenient way. Groovy API provides five predefined functions:
1. Create an inner helper class in our ViewObjectImpl
2. Publish aggregation methods
3. Use the methods in jspx
That's it!
- accessor.sum("expr")
- accessor.count("expr")
- accessor.avg("expr")
- accessor.min("expr")
- accessor.max("expr")
1. Create an inner helper class in our ViewObjectImpl
private class AgrFuncHelper extends HashMap { private String funcName; public AgrFuncHelper(String funcName) { super(); this.funcName = funcName; } public Object get(Object key) { //Invoke private method //of our DefaultRowSet (sum,count,avg,min,max) //key is argument expression for the aggr funcion being called //sum("Salary") return InvokerHelper.invokeMethod(getDefaultRowSet(), funcName, key); } }
2. Publish aggregation methods
public Map getSum() { return new AgrFuncHelper("sum"); } public Map getCount() { return new AgrFuncHelper("count"); }
3. Use the methods in jspx
<af:outputText value="#{bindings.EmployeesView1Iterator.viewObject.sum['Salary']}" id="ot12"/> <af:outputText value="#{bindings.EmployeesView1Iterator.viewObject.count['*']}" id="ot13"/>
That's it!
Very good, works also for a solution with a filtered table!!! Thx Gregor
ReplyDeleteThis is genius - thank you. I am using this to publish a column in my table to display the percentage total for each row in the table. Do you happen to know how I can use your functionality in an ordinary bar graph where I want to have y-axis mapped as if it were my pseudo percentage column? Pareto seems to be the closest graph type but it has extra bells and whistles that the customer hates.
ReplyDeleteepic - thankyou! I second the genius comment!
ReplyDeleteExcelent!! Thanks!
ReplyDelete