FAM - Crear manteniment simple
1. Prerequisits
- Tenir instal·lat l’entorn corporatiu
- Tenir un projecte descarregat a l’entorn (veure document FWK2012 - Descarregar projecte existent o FAM - Crear nou projecte tipus FAM)
2. Creació del manteniment
Aquest document explica com fer un manteniment simple d’una entitat de base de dades, es a dir, una pàgina de llista i una de detall on es puguin fer les accions més habituals.
Nota: Aquest manteniment d’exemple es farà sobre la entitat document, copiant el manteniment de Zona del Fam que és un dels més simples.
Nota: Per entendre la estructura de les classes veure el document FWK_Estructura_Classes
2.1. Creació de la entitat
FAM: FamZona (implements DibaEntity)
Exemple: TedibaDocument (implements DibaEntity)
Aquest manteniment es basarà en una entitat (classe java associada a una taula). Si aquesta entitat no està creada, veure el document FWK_Mapeig_BBDD per generar el model de dades en java.
- Ha d’implementar la interfície DibaEntity, només obliga a informar el mètode getId().
- Es pot implementar la interfície DibaSelectItem, si es vol mostrar la entitat a combos.
2.2. Creació del filtre
FAM: ZonaSearchFilter (extends BaseSearchFilter)
Exemple: DocumentSearchFilter (extends BaseSearchFilter)
Crear una classe (còpia de ZonaSearchFilter) que especifiqui els camps que es poden filtrar.
Adaptació de la classe:
- Canviar l’ordre per defecte.
- S’han de configurar els camps per filtre. Zona està preparat per filtrar per un camp descriptiu, es poden modificar.
2.3. Creació del DAO
FAM: ZonaDAO (extends DefaultGenericListDao<FamZona, ZonaSearchFilter>)
Exemple: DocumentDAO (extends
DefaultGenericListDao<TedibaDocument, DocumentSearchFilter>)
Crear una classe (còpia de ZonaDAO) que sigui la encarregada de treballar amb la base de dades.
Adaptació de la classe:
- Definir la funció creaQuery que construeix la consulta a partir dels filtres. (canviar nom de taula i nom de columnes)
2.4. Creació del Servei
FAM: ZonaService (extends DefaultGenericListService<FamZona, ZonaSearchFilter>)
Exemple: DocumentService (extends
DefaultGenericListService<TedibaDocument, DocumentSearchFilter>)
Crear una classe (còpia de ZonaService) que sigui la encarregada de tenir les accions en serveis, com ara operacions amb base de dades dintre de transaccions.
Adaptació de la classe:
- Configurar del dao correcte
- Definir la funció checkBeforeDelete que fa validacions prèvies al esborrat de la entitat.
- Es pot implementar el mètode de combo() per mostrar la entitat dintre de combos
2.5. Creació del ListModule
FAM: ZonaListModule (extends AbstractGenericListBB< ZonaSearchFilter, FamZona>)
Exemple: DocumentListModule (extends
AbstractGenericListBB <DocumentSearchFilter, TedibaDocument>)
Crear una classe (còpia de ZonaListModule) que tindrà les funcionalitats relatives a llistes de manera que es pugui aprofitar en diferents llocs (Beans de manteniments, popups, autocompletar...).
Adaptació de la classe:
- Configurar el servei i el filtre correctes
- Revisar els mètodes reset, select, search (seran com els del ZonaListModule però adaptant les classes a les de documents)
2.6. Creació del Backed Bean
FAM: ZonaBB (extends AbstractGenericBB< ZonaSearchFilter, FamZona>)
Exemple: DocumentBB (extends
AbstractGenericBB <DocumentSearchFilter, TedibaDocument>)
Crear una classe (còpia de ZonaBB) que es farà servir per connectar amb les jsp.
Adaptació de la classe:
- S’han de configurar el servei i el listModule correctes
- S’han de revisar els mètodes enter, prepareCopy, resetDetail, validate (seran com els del ZonaBB però adaptant les classes a les de documents)
Cal afegir la definició del bb al faces-config-bb per que es pugui veure des de les jsp.
<managed-bean>
<managed-bean-name>zonaBB</managed-bean-name>
<managed-bean-class>cat.diba.jee.fam.view.bb.ZonaBB</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
2.7. Creació de la jsp de llista
FAM: pZonaLlista.jspx
Exemple: pDocumentLlista.jspx
Pendent de especificar per dummies
2.8. Creació de la jsp de detall
FAM: pZonaDetall.jspx
Exemple: pDocumentDetall.jspx
Pendent de especificar per dummies
2.9. Navegació
Afegir un punt d’entrada, per exemple al menú com al FamZona
- Al menu.jspx afegir una entrada
- Al faces-config-nav afegir una regla de navegació per tal que l’enllaç del menú funcioni
<navigation-case>
<from-action>#{zonaBB.enter}</from-action>
<from-outcome>MENU</from-outcome>
<to-view-id>/jsp/pZonaLlista.jspx</to-view-id>
</navigation-case>
Definir la navegació entre la llista i el detall
<!-- ZONA -->
<navigation-rule>
<from-view-id>/jsp/pZonaLlista.jspx</from-view-id>
<navigation-case>
<from-outcome>DETALL</from-outcome>
<to-view-id>/jsp/pZonaDetall.jspx</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/jsp/pZonaDetall.jspx</from-view-id>
<navigation-case>
<from-outcome>LLISTA</from-outcome>
<to-view-id>/jsp/pZonaLlista.jspx</to-view-id>
</navigation-case>
</navigation-rule>
3. Extras
Pensar com afegir funcionalitats (referenciar a altres documents)