Menu

Interfaz de usuario con elementCollection no se refresca valores cambiados por programacion

JOSE ELIAS
2024-07-13
2024-07-17
  • JOSE ELIAS

    JOSE ELIAS - 2024-07-13

    En un modelo Transient, con una elementCollection, mediante una acción se actualizan los valores, que después de actualizar los leo y recibo el valor cambiado, sin embargo, no se muestra el cambio en la interfaz de usuario

    Esta es la elementCollection

    @ElementCollection
    @RemoveSelectedAction("")
    @ListProperties("stockIni, disponible, albaran, productoId, producto, observaciones")
    private Collection<stockproductosubfamila> stock1616; //sonido_sonido</stockproductosubfamila>

    Esta es la parte en la que actualizo el valor y después lo leo para comprobar que se ha cambiado
    
    private void actualizarColeccionSubFamilia(String seccion, String subFamilia, Collection<AlbaranDetalleMovCable> movs) {
    
        long startTime = System.nanoTime();
        String col = "stock"+seccion+subFamilia;
        int size = getView().getSubview(col).getCollectionSize();
        //LOG.info(Util.userLog() + "---col:" + col + ", size:" + size);
        Util.evaluarTiempo(startTime, System.nanoTime(), "Tiempo de recuperar el tamano de la coleccion " + col);
    
        //comprobar si el producto de cada fila existe y actualizar 
        startTime = System.nanoTime();
        for (int row=0; row < size; row++) {            
            String rowid = col+"."+row;
            String productoId = getView().getValueString(rowid+".productoId");
            //LOG.info(Util.userLog() + "---rowid:" + rowid + ":" + productoId);
    
            boolean existe = false;
            for(AlbaranDetalleMovCable mov : movs) {
    
                if (productoId.equals(mov.getIdProducto())) {
                    existe = true;
                    if (mov.getCantidad() != null && mov.getCantidad() > 0)   getView().setValue(rowid+".albaran", mov.getCantidad());
                    else getView().setValue(rowid+".albaran", null);
    
                    if (mov.getObservaciones() != null && !"".equals(mov.getObservaciones())) getView().setValue(rowid+".observaciones", mov.getObservaciones());
                    else getView().setValue(rowid+".observaciones", null);
                        LOG.info(Util.userLog() + "---actualizando " + rowid + ".albaran:" + getView().getValue(rowid+".albaran"));   //valor actualizado OK
                }               
            }
    
            if (!existe) {
                getView().setValue(rowid+".albaran", null);
                getView().setValue(rowid+".observaciones", null);
                LOG.info(Util.userLog() + "---actualizando " + rowid + ".albaran:" + getView().getValue(rowid+".albaran"));     //valor actualizaod OK
            }       
        }
        Util.evaluarTiempo(startTime, System.nanoTime(), "Tiempo en actualizar la coleccion " + col);
    }
    

    Aunque los valores salen bien por consola, la interfaz no se actualiza

     
  • Javier Paniza

    Javier Paniza - 2024-07-15

    Hola José:

    Prueba poner getView().refreshCollections() al final de tu método.


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

     
  • JOSE ELIAS

    JOSE ELIAS - 2024-07-17

    Había probado ya, y lo que ocurre es que se limpia la IU por completo dejando vacíos todos los miembros del elementColection

    La única forma de hacerlo funcionar ha sido haciendo un mapa completo de cada colección, aunque sus valores no hayan cambiado y asignarlo a ca elementCollection, así, sí que funciona.

    La lentitud de la visualización de los registros es un tema preocupante, cuando todas las consultas y sus implementaciones tardan del orden de 3 segundo, su visualización tarda unos 15 segundos.

    Para bajar este retardo, por cada colección, he hecho una sección y así, al ir por demanda la carga, tarda bastante menos.

     
    • Chungyen Tsai

      Chungyen Tsai - 2024-07-17

      Hola Jose,

      Que versión de OX estás usando?
      Tenemos algo parecido en el módulo Grade, que tiene una acción que añade filas con valores.

      Saludos.

       

Log in to post a comment.