Difference between revisions of "Equinox Integration 2/Tutorial Extension Point"

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.
(Replace core code by call to service)
Line 18: Line 18:
 
* create new method post() using code assist.
 
* create new method post() using code assist.
 
** The method is inserted into the new interface <code>IInvoicePoster</code>
 
** The method is inserted into the new interface <code>IInvoicePoster</code>
 +
 +
= Locate and define extension point =
 +
 
* Notice there is now a compile error in <code>EquinoxServiceLocator</code>. This is the equinox implementation of <code>IServiceLocator</code>. It now lacks the implementation of <code>getInvoicePoster()</code>.
 
* Notice there is now a compile error in <code>EquinoxServiceLocator</code>. This is the equinox implementation of <code>IServiceLocator</code>. It now lacks the implementation of <code>getInvoicePoster()</code>.
 
** We want to invoke an extension. So we look for extensions by an extension point id, say <code>org.adempiere.base.InvoicePoster</code>.
 
** We want to invoke an extension. So we look for extensions by an extension point id, say <code>org.adempiere.base.InvoicePoster</code>.
Line 28: Line 31:
 
}
 
}
 
</pre>
 
</pre>
 
+
* The last step is defining the extension point. Open base/META-INF/MANIFEST.MF, the description of the base Plugin.
= Locate and define extension point =
+
** Open the tab "Extension points"
 +
** Click add.
 +
** Enter the id given above, fill the other fields an click Finish.
 +
** The extension point schema opens. Enter some explanation and open tab "Definition".
 +
** Click "New Element".
 +
** Add New Element
 +
** Name it client.
 +
** On client, add a New Attribute
 +
** Name it class, type is java, on implements, choose the interface <code>IInvoicePoster</code>
 +
** Select extension, add New Choice, from its context, add new client.
 +
* Save all files, you're ready.
  
 
= Write the plugin =
 
= Write the plugin =

Revision as of 06:33, 31 January 2010

If you want to extract some functionality out of the core and provide a new extension point so that plug-ins can provide an extension, read on.

Example: Let plugins implement how invoices are posted to FACCT.

Replace core code by call to service

  • Navigate to Doc_Invoice.createFaccts()
  • Insert the line IInvoicePoster invoicePoster = Service.locate().getInvoicePoster(). Eclipse will highlight some errors, we will repeatedly use Code assist (Ctrl-1) to proceed.
  • Position the cursor on IInvoicePoster, create new interface using code assist.
    • Create the interface in the package org.adempiere.base
    • In this package, all core interfaces should resist.
    • Create the (empty) interface and save.
  • Back to Doc_Invoice, position the cursor on getInvoicePoster(), create new method using code assist.
    • The new method is inserted in the interface IServiceLocator. Save it.
  • Back to Doc_Invoice, insert the line invoicePoster.post()
  • create new method post() using code assist.
    • The method is inserted into the new interface IInvoicePoster

Locate and define extension point

  • Notice there is now a compile error in EquinoxServiceLocator. This is the equinox implementation of IServiceLocator. It now lacks the implementation of getInvoicePoster().
    • We want to invoke an extension. So we look for extensions by an extension point id, say org.adempiere.base.InvoicePoster.
    • This is done by the ExtensionList (Beware! If more than one plugin will be installed providing extensions to InvoicePoster, only one will be executed this way. You can nevertheless iterate over all extension using ExtensionList, if you want.):
	public Callout getInvoicePoster() {
		ExtensionList<IInvoicePoster> list = 
                   new ExtensionList<IInvoicePoster>(IInvoicePoster.class, "org.adempiere.base.InvoicePoster");
		return list.first();
	}
  • The last step is defining the extension point. Open base/META-INF/MANIFEST.MF, the description of the base Plugin.
    • Open the tab "Extension points"
    • Click add.
    • Enter the id given above, fill the other fields an click Finish.
    • The extension point schema opens. Enter some explanation and open tab "Definition".
    • Click "New Element".
    • Add New Element
    • Name it client.
    • On client, add a New Attribute
    • Name it class, type is java, on implements, choose the interface IInvoicePoster
    • Select extension, add New Choice, from its context, add new client.
  • Save all files, you're ready.

Write the plugin