ADempiere: InfoWindows
Las InfoWindow en ADempiere proveen una interfaz para realizar búsquedas avanzadas sobre una determinada entidad.
En estas ventanas especiales se habilitan campos que facilitan el filtro de la información a un nivel más específico puesto que se pueden hacer JOINS entre distintas tablas.
Los siguientes pasos son los principales para crear una InfoWindow:
- En el fuente ir al directorio client/src/org/compiere/apps/search y creas la clase Info. Ej. Si tienes la tabla HR_HorasExtras puedes crear la clase InfoHorasExtras la cual debe extender de la clase Info e implementar la interfaz ActionListener. Cabe destacar que esta clase debe estar bien formada con todos los componentes AWT necesarios para mostrar los campos que serán usados para la busqueda de la información.
- En la clase APanel.java (debajo del método jbInit())agregar la variable con la que se establecerá la acción para llamar la ventana desde el menu: private AppsAction aHEInfo;
- En el método createMenu() de la clase APanel.java agregar la siguiente línea: aHEInfo = addAction("InfoHE", mView, KeyStroke.getKeyStroke(KeyEvent. VK_I, Event.ALT_MASK), false);
Estos pasos permitirán crear una extrada al menu VIEW o VER. Para visualizar solo debes "clean & build" el proyecto. Iniciar la aplicación nuevamente y abrir el menu VER (VIEW) del sistema.
A esto puedes agregarle la restricción de acceso dependiendo del rol que se esté usando. Para esto solo debes:
- Agregar un campo en la table AD_Role del tipo SI/NO para indicar si vas a permitir visualizar tu ventana de informacion (El campo puede ser allow_info_he). Una vez creada la columna en la tabla desde el diccionario solo debes sincronizar con la base de datos y creas el campo en la ventana del rol. Si lo creaste desde la base de datos entonces debe hacer el proceso contrario, crear la columna desde la db. Otra cosa que no se debe olvidar es regenerar el modelo (Las clases I y X)
- En el método createMenu() de la clase APanel le estableces el condicional: if(MRole.getDefault().isAllow_HE_Info()){ aHEInfo = addAction( .... );}
También puedes crear las ventanas info para mostrar cuando usas la referencia Busqueda (Search) en un campo. Para ello solo debes indicarle en el campo InfoFactoryClass la clase que se usará para la búsqueda (org.compiere.apps.search.InfoTH). Puedes crear una clase principal que llamará a la clase info dependiendo de la tabla que se esté usando en el momento.
En este caso InfoTH es la clase principal que implementa InfoFactory y en el método infoCreate se condiciona la infoWindow que se mostrará dependiendo la tabla donde se esté invocando:
public Info create (Frame frame, boolean modal, int WindowNo,String tableName, String keyColumn, String value,boolean multiSelection, String whereClause){Info info = null;CLogger log = CLogger.getCLogger(getClass());System.out.println("Tabla » "+tableName);if (tableName.equals("C_BPartner"))info = new InfoEmployee(frame, modal, WindowNo, value, !Env.getContext(Env.getCtx(),"IsSOTrx").equals("N"),multiSelection, whereClause);else if (tableName.equals("HR_Employee"))info = new InfoHREmployee(frame, modal, WindowNo, value, !Env.getContext(Env.getCtx(),"IsSOTrx").equals("N"),multiSelection, whereClause);else if (tableName.equals("A_Asset"))info = new InfoEquipmentAllocation(frame, modal, WindowNo, 0, value,multiSelection, whereClause);else if (tableName.equals("ZRESMA_THAP_OtherLocation"))info = new InfoHousing(frame, modal, WindowNo, value, !Env.getContext(Env.getCtx(),"IsSOTrx").equals("N"),multiSelection, whereClause);AEnv.positionCenterWindow(frame, info);return info;}
Puedes crear las clases Info sin necesidad de implementar las interfaces ActionListener. Todo depende en lo que desees hacer con la ventana de información (si manejarla desde el menu o desde el campo búsqueda).
Comentarios
Publicar un comentario