Menu

Insertar filas en tabla de colección

Jose Luis
2014-05-26
2014-06-02
  • Jose Luis

    Jose Luis - 2014-05-26

    Hola a todos,
    Estoy intentando insertar una fila en la tabla de una colección de una entidad cuando esta en la vista detalle.

    El procedimiento es el siguiente:

    1. Pulso botón añadir colección y muestra el pop up de la colección.
    2. Pulso botón cancelar del pop up.
    3. Tendría que insertar una fila en la tabla de la colección con unos datos que yo establezca (estos datos no estarían guardados en BBDD, solo se mostrarían en la vista de la tabla).

    ¿Como accedería a la tabla de la colección e insertar una fila?
    A la vista del padre puedo acceder con getView().getParent(), pero a partir de aquí no se como introducir la fila en dicha tabla.

    PD: Se realiza de esta manera por petición del cliente
    Un Saludo.

     

    Last edit: Jose Luis 2014-05-26
  • Javier Paniza

    Javier Paniza - 2014-05-28

    Hola José Luis,

    yo creo que lo más fácil es visualizar una colección calculada que devuelve la colección original si ésta tiene datos o una colección con el registro que tu quieres si la colección original está vacia.


    Ayuda a otros en este foro como yo te ayudo a ti.

     
  • Jose Luis

    Jose Luis - 2014-05-30

    Eso no me sirve, te cuento mi caso.
    Mi cliente quiere que se guarde todo cuando se pulse sobre el botón de guardar de la vista detalle de un registro. Y todo que es, pues los campos del registro, las asociaciones que se han hecho mediante las colecciones, etc.. Sé que la forma de trabajar de Openxava (OX) no es así, sino que OX guarda las asociaciones de las colecciones en el momento que le des a guardar en su propia ventanita emergente. Pero yo tengo que hacerlo despues, es decir, permanecer esa inserción como en memoria y despues de modificar o grabar el registro lanzar las consultas de esas asociaciones (un lio vamos). Por tanto, el cliente, aunque no guarde realmente la asociación en base de datos, quiere ver ese registro en la tabla para saber lo que realmente va a grabar cuando le pulse el botón de guardar al registro. La parte de poder grabar las asociaciones despues de grabar el registro si la puedo tener controlada, pero lo que quiero es insertar esos valores (que aparentemente todavia no estarian guardados en base de datos) en las tablas de su propia colección (una inserción en linea de los valores en las tablas, introducir nuevas filas en las tablas de las vistas de las colecciones). Por tanto, mi pregunta será de nuevo.. ¿Como puedo acceder a la tabla de la colección e insertarle esa fila "falsa" que representaria la inserción de esos datos en la colección? Debe de ser así por petición innegociable de cliente.
    Saludos

     

    Last edit: Jose Luis 2014-05-30
  • Javier Paniza

    Javier Paniza - 2014-06-02

    Hola José Luis,

    entiendo.

    El problema es que el editor para las colecciones lee directamente de la base de datos, no del objeto View. Esto permite la paginación, ordenación, búsqueda y sobre todo trabajar con colecciones inmensas. Sin embargo, no permite añadir elementos en memoria y que se visualicen.

    Además, las colecciones actuales de OpenXava son colecciones de entidades y las entidades tienen su ciclo de vida que hay que respectar. Es decir, cuando se graba un elemento en una colección este elemento puede tener métodos @PreUpdate y @PrePersist (o Post) o puede necesitar ejecuatar validacionesde de Bean Validation o Hibernate Validator que se ejecutan al grabar la entidad, por eso grabamos en la base de datos cada elemento.

    Para solucionar tu problema se me ocurren tres opciones:
    1. Crear tu propio editor para colecciones que lea de un objeto de sesión.
    2. Grabar en la base de datos pero con los registros marcados como inactivos y al pulsar en grabar registro marcarlos como activos.
    3. Esperar a OpenXava 5.0.

    En OpenXava 5.0 hay un nuevo tipo de colección llamado @ElementCollection que funciona como tu quieres aunque la interfaz de usuario generada puede que no sea la que buscas. De todas formas, aunque la UI para @ElementCollection no te sirva en OX5 sí que se pueden añadir elementos a una colección en el objeto View, por lo que podrias hacerlo por código fácilmente. OpenXava 5 estará disponible la semana que viene.


    Ayuda a otros en este foro como yo te ayudo a ti.

     

Log in to post a comment.