User:Trifonnt/MyTrackers

From ADempiere
< User:Trifonnt
Revision as of 05:42, 20 July 2010 by Sarafudheen (Talk) (Created page with '== Submitted by Trifon and Assigned to Trifon == :*{{User:Hengsin/SF_Tracker|Bugs|trifonnt|879332}} :*{{User:Hengsin/SF_Tracker|Contributions|trifonnt|883808}} :*{{User:Hengsin/S…')

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

Submitted by Trifon and Assigned to Trifon

Assigned to Trifon

Adempiere contributions

Functionality Contributions

EDI @ Adempiere - Sponsored Development: EDI Import/Export

  • www.etasoft.com Products for companies working with electronic documents in EDI X12, HIPAA, EDIFACT, XML, flat file and many other formats.
  • SmooksSmooks for Mule enables Message Transformation and Routing using the Smooks Engine. Smooks is a Java Framework/Engine for processing XML and non XML data (CSV, EDI etc).
  • EDIELThe EAN and Ediel project for invoicing in the downstream electricity power market


Replication @ Adempiere - Sponsored Development: Replication

  • HermesJMSA console that helps you interact with JMS providers making it easy to browse or seach queues and topics, copy messages around and delete them.


JMS @ Salesforce.com:

Swing POS @ Adempiere - Sponsored Development: Swing POS

Cash Payments @ Adempiere - Sponsored Development: Cash Payments

Simplify and Speedup Adempiere development

SF.NET forum post here

Feature Requests:

This enhancement allows Adempiere developers to:

  • Speedup thier day to day work and to have more Object friendly code.
  • Work with Java Interfaces instead of Java Classes.

For example:

    • Adempiere - Old code
Trx trx = Trx.get(Trx.createTrxName("Test"), true);
trx.start();

MAlert alertOldWay = new MAlert(Env.getCtx(), 100, trx.getTrxName());
log.info(alertOldWay.toString());
		
X_AD_AlertProcessor alertProcessorOldWay = new X_AD_AlertProcessor(Env.getCtx(), alertOldWay.getAD_AlertProcessor_ID(), trx.getTrxName());
log.info("alertProcessorOldWay.getAD_AlertProcessor_ID = " + alertProcessorOldWay.getAD_AlertProcessor_ID());

alertOldWay.setDescription("Trifon test");
//--- Save; 
resultSave = alertOldWay.save();
log.info("resultSave = " + resultSave);
		
System.out.println("New value of Description = " + alertOldWay.getDescription());

trx.commit();
trx.close();
    • Adempiere - New code
Trx trx = Trx.get(Trx.createTrxName("Test"), true);
trx.start();

I_AD_Alert alert = new MAlert(Env.getCtx(), 100, trx.getTrxName());
log.info(alert.toString());

I_AD_AlertProcessor alertProcessor = alert.getI_AD_AlertProcessor();
log.info("I_AD_AlertProcessor.getAD_AlertProcessor_ID = " + alertProcessor.getAD_AlertProcessor_ID());

alert.setDescription("Trifon Description modified!");
//--- Save; PO.save(PO) must be static method!!! Two way of usage: PO.save(Object) or PO.save(PO)
//resultSave = PO.save((PO)alert); 
resultSave = PO.save(alert);  // Overloaded save method; For simple usage!
log.info("resultSave = " + resultSave);
				
System.out.println("New value of Description = " + alert.getDescription());

trx.commit();
trx.close();

This modificationas make Adempiere code closer to Hibernate

    • Hibernate code. Example code from here.
Session session = HibernateUtil.getSessionFactory().getCurrentSession();

session.beginTransaction();

Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);

session.save(theEvent);

session.getTransaction().commit();

Proposed by Hengsin modification:

Add second interface I_Persistent with one method save()

public interface I_Persistent {
	public boolean save();
}


  • Using the coding pattern below instead of the old new MAlert(Env.getCtx(), 100, trx.getTrxName()) approach would ensure your code always using the correct model class.

How to load:

// to load existing record
int AD_Alert_ID = 100;
MTable table = MTable.get(Env.getCtx(), I_AD_Alert.Table_ID);
I_AD_Alert alert = (I_AD_Alert)table.getPO(AD_Alert_ID, trxName);

How to create new record:

// to create new record
MTable table = MTable.get(Env.getCtx(), I_AD_Alert.Table_ID);
I_AD_Alert alert = (I_AD_Alert)table.getPO(0, trxName);
...


  • Classes which override save() method:
org.compiere.process.DocActionTemplate
org.compiere.model.MClient
org.compiere.model.MClientInfo
org.compiere.model.MSystem

Generated Model class must implement both interfaces and extend PO.

Weak sides that need to be improved:

  • Hard coded Document Engine
  • Hard coded lookup of model class
  • Hard coded list of document type for new client
  • Incomplete Security Implementation
  • No plugin/module support. Both ADCK and 2Pack support dynamic deployment of AD changes but doesn't address the need to deploy java code extension ( especially problematic/messy if your extension needs to use additional third party library).
  • Incomplete web client port
  • Incomplete workflow engine implementation
  • Various swing client bug and limitation
Links


Re-Organize Adempiere menu Items


Persistence of swing tables


Set proper Field Group of fields

Planned Contributions and Tasks

  • Restrict form "Generate Invoices (manual)" to show only public records (hide locked records) BUG - 1713337
  • Restrict form "Generate Shipments (manual)" to show only public records (hide locked records) BUG - 1713317

Interesting bugs/patches/Feature Requests

Feature Requests

Adempiere Open Office plug-in by Praneet