Barra de progreso 3º Plano


([N3] GSI) #1

Cuando lanzamos un proceso en 3º plano la pantalla queda muerta hasta que se termina, por lo que yo se, es imposible mostrar una barra de progreso, me gustaría mostrar algo para que no de sensación de bloqueo, alguien sabe como hacerlo.

Quisiera que apareciera un circulo en movimiento, una barra, algo que este activo aunque estemos realizando un proceso en tercer plano.


([N4] eic) #2

Hola.

Me suena haber leído en algún sitio que puedes llamar a un proceso en 2º plano, y dentro de él, llamar a tus procesos en 3º plano. Eso sí que te permitiría mostrar una barra de progreso, sin perder velocidad… aunque no lo he probado.


([N3] veldevelop) #3

Yo también necesito algo de eso sobre todo para las importaciones ya que parece que no está haciendo nada. Yo también leí algo pero creí entender que la barra de progreso solo funcionaba en primer plano y segundo plano y que no tenia interacción con 3P. Es un componente que hecho mucho de menos en V7.

Si alguien puede aportar algo de luz estaría muy bien. Gracias de ante mano

Seguro que mi amigo Paco Satué me sorprende por que últimamente está que se sale.


([N3] pacosatu) #4

Hola Rodolfo.

Ya te echaba de menos.
Bueno, he estado reflexionando esta mañana y he decidido retirarme a un plano más discreto. Mis comentarios sobre la plataforma entiendo que no sintonizan con el planning de Velneo y lo asumo con total deportividad. A veces parece que uno habla para un teatro vacío y hablar “pa na” pues va a ser que no.

Me limitaré a resolver cuestiones técnicas en la medida de mis posibilidades y encantadísimo de hacerlo.

Bueno, al tajo.

Primero una bronca cariñosa al foro por no haber contestado antes a GSI a una consulta que se supone sencilla de resolver, ya que Velneo permite hacer más de 2 cosas a la vez. Yo haría lo siguiente:

Fran ha dado la pista.

  • Creamos un formulario FRM_VERPROCESO con 1 control: <Barra de progreso> y estilo sin título y cuadro de diálogo (que parezca una ventana splash)
  • Un Manejador de evento PROCESO que ejecuta un proceso PRO_PROCESO_2P en segundo plano para liberar el Interface
  • El proceso PRO_PROCESO_2P llama a su vez al proceso en 3º plano PRO_PROCESO_3P que es el que realiza las operaciones en el vServer y actualiza una variable global en memoria $PORCENTAJE con el valor numérico de cómo va la operación.
  • En el evento POST_INIT de FRM_VERPROCESO se ejecuta el Manejador PROCESO para que la operación en 3º plano arranque nada mas mostrar el formulario
  • La propiedad Timer de FRM_VERPROCESO lanza cada 500ms (por ejem) un manejador de evento PROCESO_TIMER y aquí está el meollo de la cuestión: tenemos que refrescar la Barra de progreso con el porcentaje de ejecución. Muy fácil, leemos el valor de la variable global $PORCENTAJE (¡ojo! está en el servidor y debemos leerlo en 3º plano) y su valor lo asignamos a la misma variable global en vClient. La Barra de progreso tiene como Contenido $PORCENTAJE. De esta forma cada 500ms la barra se refresca y al llegar al 100% sabemos que el proceso ha terminado y podemos cerrar FRM_VERPROCESO (Interfaz:Cancelar).

Con JavaScript, y con las nuevas opciones de la 7.15, se podrá seguramente hacer abstracto este componente y que valga para cualquier proceso en 3º plano.

Probarlo y contáis
Saludos
Paco Satué


([N3] GSI) #5

No sabes como te lo agradezco, es un tema que llevo tiempo y no sabia como plantearlo, voy a ponerme manos a la obra.

Te animo que NO pases a “discreto” tus comentarios son muy acertados y me consta por amigos que tienes seguidores fieles, yo entre ellos, que valoramos tus opiniones y consejos, aunque quizás no te transmitamos nuestro apoyo de forma correcta.

Estoy de acuerdo que el planning de velneo va por un sitio y algunos de nosotros por otro, yo echo de menos la celeridad en sacar soluciones y novedades del principio, quizás estamos mayores y hemos perdido algo de ímpetu, me gustaría y necesito para mis planes de futuro en el negocio, que velneo saque sus promesas más rápido, pero es lo que tenemos, creo…


([N1] Ramiropa) #6

Buenas tardes:

Sobre esta anotación me gustaría hacer un par de comentarios:

“… he estado reflexionando esta mañana y he decidido retirarme a un plano más discreto. Mis comentarios sobre la plataforma entiendo que no sintonizan con el planning de Velneo y lo asumo con total deportividad”

El primero y más importante: te vamos a echar de menos. MUCHAS GRACIAS por lo mucho que has aportado y lo que, espero, seguirás aportando.

El segundo es que creo entender tu sensación porque es algo que nos ha pasado a más de uno. Parece tratarse de un asunto recurrente que ya han vivido algunos de los mejores participantes en el foro, tu entre ellos. Tal vez, y es un piropo, tienes el mérito de haberlo logrado en un tiempo record.

Cuenta conmigo para lo que necesites (si pudiera aportarte algo, cosa que dudo). Te lo has currado y te lo has ganado, cosa que salta a la vista aunque haya miopes que no puedan verlo.

Un saludo. Ramiro


([N1] aztecmexico) #7

Ahi voy, jejejeje.

Paco, me encanta leer tus comentarios, tanto los técnicos como los de crítica, que JAMÁS he notado o percibido que sean destructivos, al contrario, a veces hay que DESPERTAR CONCIENCIAS y comentando lo que a nuestro parecer requiere mejoras es la única y mejor forma de hacerlo, si, a veces aderezamos los comentarios con algo de cabreo, pero, digamos que es el condimento de la sopa, porque no hay nada peor que una sopa insípida.

Velneo tiene su plan, su roadmap, sus metas y objetivos, pero no es un plan cerrado, asi lo entiendo y percibo, y lo peor que les puede suceder es que entren en zona de confort y se amachen a seguirse rectos, porque no hay recta infinita, hay que volantear de vez encuando porque si no te vas al precipicio tarde que temprano.

Quiero creer, y creo sinceramente que tus aportaciones ayudan en mucho a que nuestros amigos de Velneo despierten cuando comienzan a pestañear, y, dado que el mismisimo Alfonso se toma la molestia de participar en este foro, son tomadas en cuenta, eso tenlo por seguro, no caen en saco roto, quizás no te lo digan, pero de que toman en cuenta tus aportaciones y las de otros participantes no me queda ninguna duda.

Venga pues adelante, que el día de chipi chipi ya pasó y es bueno que pase, tambien nosotros necesitamos cuestionar de vez en cuando nuestro actuar, siempre con el ánimo de crecer, recuerda que la gota termina por romper la piedra no por la fuerza, sino por la constancia en el tiro.

Saludos.

Martin Ibarra.


([N1] wikan) #8

@seh, sin haberlo probado. Tu solución plantea el problema que al ser una variable global en el servidor, al lanzar dos procesos podrías devolver porcentajes equivocados.
Lo suyo sería tener una variable porcentaje local al proceso y leerla.

Otra opción, es dividir el proceso que quieres realizar, por ejemplo.
Si es por clientes, recorrer los clientes en el vClient y operar en el servidor. Contra, generas una transacción por cliente, quizás con “Forzar transacción” se incluya todo en una.


([N3] pacosatu) #9

Hola

Gracias por los comentarios de ánimo. El problema es que quizás tengo un nivel de exigencia de la plataforma que en algunos aspectos no corresponde con el roadmap de Velneo. Si hay que dar caña en algún aspecto concreto me uniré encantado.

Saludos
Paco Satué


([N3] pacosatu) #10

Hola Manuel.

Efectívamente, no he contemplado la concurrencia de usuarios, pero ese detalle no invalida el objetivo del ejercicio. El problema es que la variable PORCENTAJE, si es local al proceso en 3P, no se puede leer hasta que el proceso termina y en este momento siempre valdrá 100%.

Propongo 3 soluciones, aunque estoy improvisando:

  • Usar Arrays globales y que cada proceso guarde su porcentaje de ejecución en una fila del Array previamente pactado con el proceso en 1º plano.
  • Usar una variable global de tipo Alfa en el que el Array estará serializado ([porcentaje1,porcentaje2, …] y cada proceso usará una posición previamente pactada con el proceso en 1º plano.
  • Para procesos que van a ser muy largos se propone como requerimiento que no podrán ser ejecutados por más de un usuario a la vez. Para ello usamos un semáforo en el vServer mediante otra variable global, que ponemos a 1 mientras dura el proceso en tercer plano y los demás usuarios esperan.

Lo de recorrer la tabla de Clientes y englobar cada cliente o todos en una transacción es algo que yo también haría, pero eso es otra cuestión.

Saludos
Paco Satué


([N1] VictorMC) #11

Saludos a tod@s, Paco por favor no caigas en desanimo :slight_smile: ( como yo :wink: )

Bien, pues efectivamente! el proceso en tercer plano es para eso… para que la pantalla se libere y podamos continuar trabajando, es decir es lo normal.

Veamos, si queremos que un proceso en tercer plano nos retorne (en tiempo real) información, pues en automático deja de ser un proceso en tercer plano… por lo que eso no pasará jamás.

Existen (desde mi humilde opinión) dos alternativas al caso:
1.- Se inicia el proceso y se muestra una animación (habría que ver como) y al finalizar se detiene esta distracción.
2.- Que el proceso sea troceado y cada que finalice uno de los procesos en tercer plano, se modifique una variable local que alimente la barra.

Pues eso, aquí les dejo una humilde aportación, donde realizo la ejecución de un proceso en tercer plano, tomando la opción 2 que planteo.

Desde luego es muy mejorable! igual se puede agregar la barra de progreso en la barra de tareas (primer plano) o lo que se les ocurra.

Saludos cordiales.


([N1] VictorMC) #12

Aquí el .VIN (comprimido en .zip)

LSM_barra_progreso3.zip (6.88 KB)


([N3] GSI) #13

Hola a todos, he seguido las indicaciones y desde un formulario de entrada de parámetros al pulsar un botón ejecuto un manejador de evento con un objeto al que paso varios parámetros y disparo en 2º plano, pero no se libera, es decir, el proceso en segundo plano lanza otro objeto en 3º plano, pero hasta que este termina no devuelve el control.

Es decir, el proceso en 2º plano se queda pillado hasta que termina el de 3p, por tanto el efecto es el mismo que si lo lanzara directamente saltándome el proceso en 2p y lanzase directo el 3p.

¿ alguien sabe porque ?

Cuando devuelve el control todo continua correctamente, pero claro el resultado del proceso ya esta terminado y la barra al 100%


([N3] pacosatu) #14

Hola GSI.

El problema es que no puedes usar el comando Disparar Objeto para ejecutar procesos en 2º Plano. Viene en la ayuda de dicho comando, pero muchos caemos en
el mismo error porque el Asistente de Velneo nos deja seleccionar 2º Plano y debería poner No aplicable.

La razón de esto es que Disparar Objeto se hace mediante un Manejador de Objeto que es Local al proceso que llama y este Manejador no es visible en el 2º Plano.

En resumen: para ejecutar procesos en 2º Plano solo puedes usar el comando “Ejecutar proceso”. Si necesitas pasar parámetros tendrás que hacerlo mediante la Ficha de Entrada o Variables Globales.

Saludos
Paco Satué


([N3] GSI) #15

Correcto ahora lo entiendo, pero una pregunta más, que quieres decir con pasar parámetros con Ficha de entrada, el proceso al que llamo no tiene origen ninguno ni devuelve ninguna salida.


([N3] pacosatu) #16

Hola GSI.

Si el Proceso que ejecutas en 2º Plano tuviera Ficha de Entrada, tendría disponible los campos de la Ficha que en ese momento estuviera seleccionada en el Proceso Principal o en el Manejador del Formulario. De esta forma los campos de una Ficha pueden actuar como parámetros al igual que lo hacen las Variables Locales.

El paso de parámetros lo puedes hacer en formato serializado (tipo XML, JSON o personalizado) guardado en un campo de la Ficha de Entrada.
Si el Proceso no tiene Origen usa una Variable Global en Memoria.

De todas formas todo este rollo viene a que Velneo no es capaz de pasar parámetros en las llamadas a Procesos, algo habitual en otros entornos.

Saludos
Paco Satué


([N3] GSI) #17

Gracias, creía que lo de ficha de entrada te referías a otra cosa, la verdad es que si las barras de progreso funcionaran en 3p y al disparar objetos y pasar parámetros pudiéramos ejecutar en 2 plano, seria perfecto, pero la vida no lo es.

Saludos y gracias nuevamente.


([N3] pacosatu) #18

Hola GSI.

Estoy preparando un ejercicio para el tema de tener cierto control sobre los procesos en 3º plano que tienen una duración larga. Lo he preparado de la siguiente forma:

  • El proceso en 3P se lanza mediante un proceso en 2P para liberar el Interface.
  • En el Interface se muestra un formulario que mediante un Timer controla una barra de progreso (con % de ejecución) o una animación.
  • Se puede Cancelar la ejecución del proceso en 3P.
  • Una vez terminado el proceso en 3P la ejecución del programa continúa.
  • Se usa una Variable Global en Memoria para pasar información entre el 3P y el 1P del Interface.
  • La Variable Global es multilinea para que cada vClient pueda ver su propio progreso de ejecución.

Se puede ver una primera maqueta en:
vatp://pruebas:pruebas@v7cloud6.velneo.com:8894/0PS_Proceso3P_iapp

Ejecuta varios vClient simultáneamente para simular la concurrencia.
Falta depurar algunos detalles (no está para nada optimizado) y te paso el vin en cuanto esté listo.

En el cloud no carga bien las imágenes desde Internet, por esa razón no aparecen dibujos (tengo que revisarlo).
Abajo aparece la línea del Array que usa cada vClient para hablar con el vServer.

Hay 3 procesos en 3P: La Carga de registros (son 20), Un proceso genérico que no hace nada (solo sirve para mostrar el progreso) y un Proceso de Borrado de la Tabla (sin control del progreso).

El lunes seguimos que ahora me voy a ver procesiones.

Saludos
Paco Satué


([N3] GSI) #19

Magnifico, muchas gracias, espero impaciente el ejemplo. Saludos.


([N1] VictorMC) #20

Paco, se ve muy bien la función, felicidades!