ADempiere: Callout
Un callout es una codificación utilizada para modificar, bajo ciertas condiciones, el contenido que se muestra en un campo de una determinada ventana. El metodo callout puede escribirse en una clase creada en un paquete especifico de nuestra customizacion...
... o desde el diccionario de datos usando el tipo de evento callout y el tipo de regla JSR 223 Scripting APIs.
La diferencia es que para ver la funcionalidad del método creado desde el ambiente de desarrollo se debe compilar el proyecto.
La invocación del método callout se hace desde la columna de la tabla (Table & Column) desde el campo "Callout". En este campo se pueden llamar tantos métodos calificados como sea necesario, solo deben ir separados por punto y coma (;).
Invocar metodo callout desde clase java
- <paquetes>.<callout_name>.<metodo>
Ejemplo real - Invocando un solo metodo:
- ve.com.lve.model.produccion.CalloutPlanificacion.getCalculaDias;
Ejemplo real - Invocando multiples metodos:
- ve.com.lve.model.produccion.CalloutPlanificacion.getEstableceHoras;ve.com.lve.model.produccion.CalloutPlanificacion.rangoFechas
Invocar metodo callout desde diccionario de datos (script)
- @script:beanshell:BP_fillDescriptionFromName
Pasos para crear un Callout
- Crea la clase dentro de un paquete perteneciente a la customización con la que estas trabajando. Esa clase debe extender de CalloutEngine.
- Crea el o los métodos a usar que definirán el comportamiento del campo en la pestaña (ventana). Cada método debe recibir como parámetro lo siguiente:
- (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value, Object oldValue)
- mTab y mField: me permiten obtener (get) o establecer (set) el valor de un campo especifico. Para ello usamos la interfaz de la tabla correspondiente a la pestaña donde estamos estableciendo la funcionalidad para el campo. Esa interfaz o clase I_<table> es la que se crea cuando se genera el modelo (Generate Model).
- Se pueden realizar distintas consultas sql o instanciar distintos objetos para obtener los resultados deseados (todo depende de la lógica del programador).
- El método del callout siempre debe retornar null o vacío ("") o NO_ERROR. Si retorna cualquier otro valor el sistema lo tomara como un error.
- Una vez finalizada la codificación, loguearse como SuperUser - SystemAdministrator para ir a Table & Column e invocar el método desde el campo que disparara el cambio. Ejemplo: Si quiero mostrar la cantidad por tipo de producto, debo invocar el método callout desde el campo "Tipo de Producto" para que cada vez que cambie el tipo de producto en el campo cantidad me muestre los datos correspondientes al tipo de producto seleccionado.
Script Callout
Desde el diccionario de aplicación se crea el callout desde la ubicación Menu » Diccionario de Aplicación » ReglaCreando la Regla
Dentro del script se usan las variables del contexto del sistema:- Para las ventanas comienzan con el prefijo W_
- Para los usuarios (login) comienzan con el prefijo G_
- Los parámetros del callout comienzan con el prefijo A_
- A_WindowNo
- A_Tab
- A_Field
- A_Value
- A_OldValue
- A_Ctx
Desde el script también se pueden importar clases de la misma manera que se importan desde una clase java.if (A_Tab.getValue("Name") != null) { A_Tab.setValue("Description", A_Tab.getValue("Name")); } result = "";
Usos del Callout
En lo personal los callout me han servido para:- Mostrar resultados de un calculo especifico (porcentajes, sumas, promedios...)
- Autocompletar datos desde un identificador especifico: Desde el id de un trabajador autocompletó los datos principales (nombre, apellido, cédula, ficha, tipo de nomina...)
- Mostrar notificaciones o advertencias en cuanto a un registro (Ej. Mostrar que esta llegando al limite de crédito o que supera el limite de crédito. O también mostrar que la cantidad que esta señalando es mayor a las cantidades existentes en almacén...).
- Es importante señalar aquí que con el callout se muestra la advertencia pero no impide que el registro sea guardado. Para validar que no se registre un dato dependiendo una condición se deben usar los "Validadores del Modelo" (Model Validator)
Comentarios
Publicar un comentario