Diferencia entre revisiones de «Desarrollo plugin callout»

De iDempiere es
(lenguajes)
 
(No se muestran 27 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 +
[[Categoría:Desarrollo de Plugins]]
 
= Desarrollo de Plugins – Callout =
 
= Desarrollo de Plugins – Callout =
  
 
'''Importante:'''  
 
'''Importante:'''  
  
El siguiente material es una traducción de la documentación creada por '''''Jan Thielemann from evenos''''' y fue tomada del siguiente enlace [http://wiki.idempiere.org/en/Developing_Plug-Ins_-_Callout| Developing Plug-Ins - Callout]. Gracias a Jan Thielemann por el aporte, este tutorial se limita a la traducción del mismo al español.
+
El siguiente material es una traducción de la documentación creada por '''''Jan Thielemann from evenos''''' y fue tomada del siguiente enlace [http://wiki.idempiere.org/en/Developing_Plug-Ins_-_Callout | 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 =
 
= 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:
+
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 IColumnCallout interface y extensión de puntos.
Línea 16: Línea 17:
 
= Prerequisitos =
 
= Prerequisitos =
  
Antes de iniciar el desarrollo de plug-ins, debes echar un vistazo a [[Developing_plug-ins_without_affecting_the_trunk|Developing Plug-Ins without affecting trunk]] y [[Developing_Plug-Ins_-_Get_your_Plug-In_running|Get your Plug-In started]].
+
Antes de iniciar el desarrollo de plug-ins, debes echar un vistazo a [http://wiki.idempiere.org/en/Developing_plug-ins_without_affecting_the_trunk | Developing Plug-Ins without affecting trunk] y [http://wiki.idempiere.org/en/Developing_Plug-Ins_-_Get_your_Plug-In_running | Get your Plug-In started].
+
 
 
= El Flujo de Trabajo =
 
= El Flujo de Trabajo =
 +
  
 
==Usando una Extensión==  
 
==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():   
+
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():   
 
   
 
   
 +
 
[[Archivo:Plugincallout1.png|800px]]
 
[[Archivo:Plugincallout1.png|800px]]
  
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:
+
 
 +
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:
 +
 
  
 
[[Archivo:Plugincallout2.png|800px]]
 
[[Archivo:Plugincallout2.png|800px]]
  
 
   
 
   
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.  
+
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.
  
  
Línea 37: Línea 42:
  
 
   
 
   
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.
+
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.
  
  
Línea 43: Línea 48:
  
  
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.
+
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==
 
==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:  
+
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)
 
   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:
+
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:
  
  
 
[[Archivo:Plugincallout5.png|800px]]
 
[[Archivo:Plugincallout5.png|800px]]
  
Abrir el  MANIFEST.MF  y selecciona la pestaña Runtime. Se agregar el paquete donde tu clase JavaCallout este localizda.
+
 
 +
Abrir el  MANIFEST.MF  y selecciona la pestaña Runtime. Se agregar el paquete donde tu clase JavaCallout este localizada.
  
  
 
[[Archivo:Plugincallout6.png|800px]]
 
[[Archivo:Plugincallout6.png|800px]]
  
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.
+
 
 +
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.
  
  
Línea 67: Línea 75:
  
  
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:  
+
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:
  
  
 
[[Archivo:Plugincallout7.png|800px]]
 
[[Archivo:Plugincallout7.png|800px]]
 
  
 
==Usando CalloutFactory==
 
==Usando CalloutFactory==
Línea 81: Línea 88:
  
  
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:
+
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:
  
  
 
[[Archivo:Plugincallout10.png|800px]]
 
[[Archivo:Plugincallout10.png|800px]]
  
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.
+
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.
  
 
[[Archivo:Plugincallout11.png|800px]]
 
[[Archivo:Plugincallout11.png|800px]]
 
   
 
   
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:
+
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:
  
  
Línea 105: Línea 112:
  
  
[[Archivo:Plugincallout14.png|800px]]
+
[[File:Plugincallout14.png|800px]]
  
  
Línea 111: Línea 118:
  
  
[[Archivo:Plugincallout15.png|800px]]
+
[[File:Plugincallout14.png|800px]]
 +
 
 +
Esta tradución fue realizada por Gabriela Soto de [http://www.ghintech.com| Ghintech - Venezuela]
 +
 
 +
[[en:Developing Plug-Ins - Callout]]
 +
[[es:Desarrollo plugin callout]]
 +
[[ja:コールアウトのプラグイン開発]]

Revisión actual del 04:02 31 ago 2015

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

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