Difference between revisions of "ADempiere Best Practices"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
(Team)
(Coding Style)
Line 22: Line 22:
 
= Coding Style =
 
= Coding Style =
 
*...
 
*...
 +
 +
 +
= How to use Adempiere Query class? =
 +
 +
== How to return only ONE object? ==
 +
<pre>
 +
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();
 +
</pre>
 +
 +
 +
== How to return ARRAY of objects? ==
 +
<pre>
 +
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;
 +
}
 +
</pre>
 +
 +
== How to return ARRAY of objects and process elements? ==
 +
<pre>
 +
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;
 +
}
 +
</pre>
 +
 +
== How to pass Timestamp parameter? ==
 +
<pre>
 +
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()
 +
;
 +
</pre>
 +
 +
 +
== How to use Query class with complex where clause: EXISTS? ==
 +
<pre>
 +
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()
 +
;
 +
</pre>
  
 
= Test Units=
 
= Test Units=

Revision as of 12:29, 17 December 2008

 DISCLAIMER: Target of this document is developers who want to help us fixing and completing
 ADempiere's manufacturing functionality (libero).

Overview

Goal

Team

Teo Sarca Arhipac

Victor Perez e-Evolution

Commit Policy

  • ...

Coding Standards

  • ...

Coding Style

  • ...


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()
;

Test Units

  • ...

Document Policy