Desarrollo plugin callout

De iDempiere es

Desarrollo de Plugins – Callout

Importante:

El siguiente material es una traducción de la documentación creada por Jan Thielemann from evenos y fue tomada del siguiente enlace | Developing Plug-Ins - Callout. Gracias a Jan Thielemann por el aporte, este tutorial se limita a la traducción del mismo al español.

Finalidad del Tutorial

La finalidad de este tutorial es mostrar como desarrollar callouts en nuestro plug-in. Para ello existen diferentes formas de implementar callouts y ponerlos en funcionamiento. Aprenderas las siguientes maneras:

  • Crear un Callout usando IColumnCallout interface y extensión de puntos.
  • Crear un Callout usando Java puro y el Diccionario de Aplicación.
  • Crear un Callout usando IColumnCalloutFactory y una definición de componente.

Prerequisitos

Antes de iniciar el desarrollo de plug-ins, debes echar un vistazo a [| Developing Plug-Ins without affecting trunk] y [| Get your Plug-In started].

El Flujo de Trabajo

Usando una Extensión

Desarrollar un Callout usando una extensión es una de las formas mas faciles pero es un poco anticuado. Esto tambien puede causar conflictos en versiones futuras de Idempiere, asi que siempre es una buena idea usar el enfoque factory/component si es posible. En primer lugar crea tu plug-in siguiendo los prerrequisitos de este tutorial. Despues, crea un nuevo paquete y una clase. Nosotros llamamos a nuestra clase IColumnCalloutCallout en este caso. Implementa la clase de interfaz IColumnCallout y agrega alguno registro para el metodo start():

Plugincallout1.png

Abre el MANIFEST.MF y ve a pestaña extesion. Agrega la extesion org.adempiere.base.IColumnCallout. Ahora haz click en agregar un nuevo callout. Luego click en el boton browser y selecciona la clase creada anteriormente. Como nombre de la tabla (tableName) nosotros elegimos "M_Product" y como nombre de columna (columnName) “Help”. Como prioridad (priority) escogimos 1:

Plugincallout2.png


Copia el nombre de la clase completo y selecciona de nuevo org.adempiere.base.IColumnCallout. Pega y agrega “.help”. Con esto se puede definir mejor entre diferentes callouts si estan dentro de la misma clase.


Plugincallout3.png


Basicamente esto es todo. Inicia un cliente y abre la ventana Producto. Introduzca o cambie algo en el campo de ayuda (help) y deje el campo. Observe los registros en su consola.


Plugincallout4.png


Puedes usar una clase para diferentes Tablas/Columnas. Si deseas hacer esto, solo agrega otra extesión pero con diferente nombre de tabla y nombre de columna (tableName/columnName). En el metodo start() de la clase Callout. Comprueba con mTab.getTableName() y mField.getColumnName() para dedicir cual metodo callout quieres llamar. CalloutInfoWindow.java es una buena referencia para ver como se puede hacer.

Usando Java

Esta forma es algo anticuado y más incomoda que los otros enfoques, pero por motivos de exhaustividad, se les motrara. En primer lugar se crea otra clase llamada JavaCallout, la cual hereda de “CalloutEngine” y se crea un nuevo metodo siguiendo la siguiente estructura:

 public String myMethodName(Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)

Se agrega algun registro para mostrar en consola y al final retornar en nulo (null). Si la sentencia de retorno no es nulo, el CalloutEngine lo manejará como un error:


Plugincallout5.png

Abrir el MANIFEST.MF y selecciona la pestaña Runtime. Se agregar el paquete donde tu clase JavaCallout este localizda.


Plugincallout6.png

Hasta ahora no hay problema. Debido a que no utiliza una extensión o un componente, ¿cómo debería el CalloutEngine localizar nuestra clase? Bueno para ello, cambie a la pestaña MANIFEST.MF y añada la siguiente línea: "Eclipse-Registerbuddy: org.adempiere.base". Porfavor tome en cuenta que esto no es una de las mejores practicas! Guarde el Manifest e inice el cliente. Ingrese como SuperUser/System y abra la ventana Tabla y Columna (Table and Column). Busque la tabla M_Product y cambie a la pestalla Columna. Encuentre la columna Descripción e introduzca el nombre de la clase seguida por un punto y el nombre del metodo en el campo Callout.


Plugincallout8.png


Restaure el cliente y asegúrese que el plug-in esta activado. Ingrese como GardenAdmin/GardenWorld y abra la ventana Producto. Ingrese o cambie algo en el campo descripción y cambie de campo. Ahora observe los regitros en consola, debe ver algo como esto:


Plugincallout7.png


Usando CalloutFactory

Este debe ser el enfoque preferido. Se crean 2 clases. Una para el Factory y una para el callout actual. Nosostros la llamamos CalloutFactory y CalloutFromFactory. Copie el código de la IColumnCalloutcallout al CalloutFromFactory o observa como hacerlo. Se implementa IColumnCallout interface y tiene sólo un registro en su método start().


Plugincallout9.png


Ahora, la parte interesante. En la clase CalloutFractory implemente IColumnCalloutFactory interface y es necesario el metodo getColumnCallouts(). Aquí se comprueba el nombre de lacolumna / nombre de tabla (columnname/tablename ) y decide, si desea proporcionar un callout . Se comprueba para MProduct.Table_Name y MProduct.COLUMNNAME_DocumentNote:


Plugincallout10.png

El siguiente paso es agregar una definición de componente(component definition) en el plug-in. Click en New > New > Others y de la lista selecionar Component Definition.

Plugincallout11.png

Haga click en siguiente y escoja el nombre . Asegúrese de que el nombre sea único. También, haga click en Examinar(browser) y seleccione la clase que CalloutFactory:


Plugincallout12.png


Abra el component.xml (en nuestro caso calloutfactory.xml) y cambie a la pestaña servicio(service tab). Añada org.adempiere.base.IColumnCalloutFactory a la sección de Servicios (Provides Services):


Plugincallout13.png


Compruebe la pestaña MANIFEST.MF de su archivo de manifiesto (manifest file) y busque la línea que comienza con "Service-componente: ..." y compruebe la ruta correcta para su xml e insertela aquí:


800px


Inicie el cliente e inicie sesión como GardenAdmin / Gardenworld. Abra la ventana del producto e introduzca o cambie algo en el campo Nota de documentos. Deje el campo y comprobe su registro en la consola. Debería ver algo como esto:


800px

Las cookies nos ayudan a ofrecer nuestros servicios. Al utilizar nuestros servicios, aceptas nuestro uso de cookies.