Desarrollo plugin callout

De iDempiere es
Saltar a: navegación, buscar

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. 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 más fáciles pero es un poco anticuado. Esto también puede causar conflictos en versiones futuras de Idempiere, así que siempre es una buena idea usar el enfoque factory/component si es posible. En primer lugar crea tu plug-in siguiendo los prerequisitos de este tutorial. Después, 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 método start():


Plugincallout1.png


Abre el MANIFEST.MF y ve a la pestaña extesión. Agrega la extesión org.adempiere.base.IColumnCallout. Ahora haz click en agregar un nuevo callout. Luego click en el botón navegador (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 están dentro de la misma clase.


Plugincallout3.png


Básicamente 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, sólo agrega otra extensión pero con diferente nombre de tabla y columna (tableName/columnName). En el método start() de la clase Callout. Comprueba con mTab.getTableName() y mField.getColumnName() para decidir cual método 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 mostrara. En primer lugar se crea otra clase llamada JavaCallout, la cual hereda de "CalloutEngine" y se crea un nuevo método siguiendo la siguiente estructura:

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

Se agrega algún 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 localizada.


Plugincallout6.png


Hasta ahora no hay problema. Debido a que no se 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 inicie 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 pestaña Columna. Encuentre la columna Descripción e introduzca el nombre de la clase seguida por un punto y el nombre del método 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 registros 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 método getColumnCallouts(). Aquí se comprueba el nombre de la columna/ 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í:


Plugincallout14.png


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:


Plugincallout14.png

Esta tradución fue realizada por Gabriela Soto de Ghintech - Venezuela