Inicializar filtros de una coleccion

Ayuda
JOSE ELIAS
2013-04-11
2013-04-24
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-11

    Al entrar en un objeto no persistente para generar una Interfaz de usuario, necesito que una colección sea filtrada con la fecha del día.
    Cómo puedo inicializar esta colección y que luego el filtro fecha sea modificable.

     
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-12

    Para resolverlo, he usado una clase al inicio del modulo que se encarga de inicializarlo.
    Pero tengo la impresión de que el filtro con fecha no funciona, pero sin embargo con otro tipo de propiedades si.

    ¿Alguien sabe si esta reportado un bug?

     
  • Javier Paniza
    Javier Paniza
    2013-04-15

    Hola José,

    antes de reportarlo hay que saber si es un bug de verdad.
    ¿Puedes poner aquí el código de tu acción? Es que si usas setBaseCondition() estás estableciendo una condición que se usa SIEMPRE y se pone por delante de lo que el usuario filtre, eso podría ser una cause de que no vaya el filtro por fecha. Bueno, eso es intentando adivinar, necesito ver el código tu acción.


    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

     
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-15

    Gracias de antemano;

    public class OnChangeFechaRecepcionAction extends OnChangePropertyBaseAction {

    public void execute() throws Exception {
    
    Date fecha = (Date) getNewValue();//toma el valor de la propiedad cambiada
    SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
    String condition = "${fecha}=" + formatoFecha.format(fecha);
    
                        //"${llegado}=true";//con esta propiedad funciona
    
    System.out.println("condition: " + condition);
    
        getView().getSubview("tareas").getCollectionTab().setBaseCondition(condition);  
                                                                   //toma el tab y filtra
    getView().getSubview("tareas").refreshCollections();       //refrescar el resultado
    
    }//end-execute
    

    }//end-class

     
  • Javier Paniza
    Javier Paniza
    2013-04-17

    Hola José,

    pues está claro usas setBaseCondition() que como ya te he dicho establece una condición PERMANTENTE. Prueba usar:

    getTab().setConditionValue("fecha", fecha);
    

    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

     
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-17

    Gracias Javier, así se ha fijado el filtro, pero...
    ¿Cómo la aplico para que salgan los datos filtrados?

    No he encontrado ninguna función que refresque la lista con este filtro.

     
  • Javier Paniza
    Javier Paniza
    2013-04-19

    Hola José,

    no hace falta hacer nada, después de llamara a setConditionValue() los datos tienen que aparecer filtrados. Si estas haciendolo sobre una colección prueba hacer getView().refreshCollections() sobre la vista raiz.

    Si sigue sin funcionar pon aquí el código de tu acción y su declaración en controladores.xml.


    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

     
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-19

    Gracias, "otra vez". Aparece el filtro relleno, pero los datos no los filtra:
    Si sirve de ayuda, cada dos veces que corro la acción se filtran los datos pero con el filtro anterior, y en el campo del filtro se ve el actual.

    <controller name="Recepcion">

    <action name="init" on-init="true" hidden="true"
        class="org.openxava.xavioprm.actions.InicializarRecepcionAFechaHoy"/>
    
    <action name="planificarVisita" mode="detail"
    class="org.openxava.xavioprm.actions.PlanificarVisita"
    image="images/agenda.gif"/>
    

    </controller>


    public class InicializarRecepcionAFechaHoy extends ViewBaseAction {

    public void execute() throws Exception {
    
        //fija a fecha de ahora
        Date now = new Date();
        getView().setValue("fecha", now);       
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
        getView().getSubview("tareas").getCollectionTab().setConditionValue("fecha", formatoFecha.format(now));
        getView().refreshCollections();
    
    }//end-execute
    

    }//end-class


    -- y cada vez que cambio el campo fecha se carga la acción de inicio de post.

     
  • Javier Paniza
    Javier Paniza
    2013-04-22

    Hola José,

    entonces, ¿La acción OnChangeFechaRecepcionAction ya no la tienes? Si la tienes, ¿cuál es su código?

    Si a la acción init le pones hidden=false, ¿funciona bien cuando la ejecutas pulsando el botón?


    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava

     
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-22

    Hola Javier

    Hay dos clases, una para la carga al inicio "InicializarRecepcionAFechaHoy" y otra cada vez que se ejecuta cambia el campo fecha "OnChangeFechaRecepcionAction"

    He puesto hidden=false y hace lo mismo, fija la fecha pero no filtra los resultados.

    ----------------> OnChangeFechaRecepcionAction <------------------------

    public class OnChangeFechaRecepcionAction extends OnChangePropertyBaseAction {

    public void execute() throws Exception {

      Date fecha = (Date) getNewValue();     //toma el valor de la propiedad cambiada
      SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
      getView().getSubview("tareas").getCollectionTab()
                        .setConditionValue("fecha", formatoFecha.format(fecha));
      getView().refreshCollections();
    

    }//end-execute

    }//end-class

     
  • JOSE ELIAS
    JOSE ELIAS
    2013-04-22

    Hola de nuevo, Javier

    Además,

    1.- Si por ejemplo, sin ver los registros filtrados pero con el filtro fijado, le doy a exportar a pdf, sale el informe bien y al cerrarlo, el refresco aplica el filtro bien.

    2.- Me he dado cuenta que el filtro que se aplican cada vez que hago un cambio de fecha, es el anterior y no el que se está visualizando.

     
    Last edit: JOSE ELIAS 2013-04-22
  • Javier Paniza
    Javier Paniza
    2013-04-24

    Hola José,

    lo he probado y no funciona. Definitivamente es un bug de OpenXava. Añadelo como bug y lo arreglaremos.


    Ayuda a otros en este foro como yo te ayudo a ti.
    ¿Necesitas más ayuda? Usa el soporte profesional de OpenXava