ADempiere Best Practices
From ADempiere
This Wiki is read-only for reference purposes to avoid broken links.
DISCLAIMER: Target of this document is developers who want to help us fixing and completing ADempiere's manufacturing functionality (libero).
Contents
Overview
Goal
Team
[[User:Trifonnt|Trifon] www.d3-soft.com]
SVN Commit Policy
- ...
Reference
Coding Standards
- ...
Coding Style
See Eclipse Code Formatter Profile .
Known issues:
- At present eclipse formatter is not supporting fluent interfaces (see eclipse bug #196001)
How to use Adempiere Query class?
How to return only ONE object?
StringBuffer whereClause = null; whereClause = new StringBuffer("AD_Client_ID=?" // #1 + " AND AD_Org_ID=?" // #2 + " AND C_AcctSchema_ID=?" // #3 + " AND Account_ID=?"); // #4 ArrayList<Object> params = new ArrayList<Object>(); params.add(AD_Client_ID); params.add(AD_Org_ID); params.add(C_AcctSchema_ID); params.add(Account_ID); Account existingAccount = new Query(ctx, MAccount.Table_Name, whereClause.toString(), null) .setParameters( params ) .first();
How to return ARRAY of objects?
public static MAchievement[] getOfMeasure (Properties ctx, int PA_Measure_ID) { String whereClause = "PA_Measure_ID=? AND IsAchieved='Y'"; List<MAchievement> list = new Query(ctx, MAchievement.Table_Name, whereClause, null) .setParameters(new Object[]{PA_Measure_ID}) .setOrderBy("SeqNo, DateDoc") .list() ; MAchievement[] retValue = new MAchievement[ list.size() ]; retValue = list.toArray (retValue); return retValue; }
How to return ARRAY of objects and process elements?
public static MAchievement[] getOfMeasure (Properties ctx, int PA_Measure_ID) { String whereClause = "PA_Measure_ID=? AND IsAchieved='Y'"; List<MAchievement> list = new Query(ctx, MAchievement.Table_Name, whereClause, null) .setParameters(new Object[]{PA_Measure_ID}) .setOrderBy("SeqNo, DateDoc") .list() ; for(MAchievement achievement : list) { s_log.fine(" - " + achievement); } MAchievement[] retValue = new MAchievement[ list.size() ]; retValue = list.toArray (retValue); return retValue; }
How to pass Timestamp parameter?
Timestamp dateAcct = ...; String trxName = ...; String whereClause = "c.C_CashBook_ID=?" // #1 + " AND TRUNC(c.StatementDate)=?" // #2 + " AND c.Processed='N'"; MCash retValue = new Query(ctx, MCash.Table_Name, whereClause, trxName) .setParameters(new Object[]{C_CashBook_ID, TimeUtil.getDay(dateAcct)}) .first() ;
How to use Query class with complex where clause: EXISTS?
String whereClause = "C_Cash.AD_Org_ID=?" // #1 + " AND TRUNC(C_Cash.StatementDate)=?" // #2 + " AND C_Cash.Processed='N'" + " AND EXISTS (SELECT * FROM C_CashBook cb " + "WHERE C_Cash.C_CashBook_ID=cb.C_CashBook_ID AND cb.AD_Org_ID=C_Cash.AD_Org_ID" + " AND cb.C_Currency_ID=?)" // #3 ; MCash retValue = new Query(ctx, MCash.Table_Name, whereClause, trxName) .setParameters(new Object[]{AD_Org_ID,TimeUtil.getDay(dateAcct),C_Currency_ID}) .first() ;
References
Test Units
- ...