Javascript on show


([N3] blavan) #1

Hola, el clásico evento on show para aplicar a las pestañas de los separadores de formularios lo escribí en Javascript y mi sensación es que la presentación de la información es más rápida.
¿Tiene fundamento esta apreciación mia? Yo no se la encuentro porque JS es siempre en 1º plano ¿no?
Gracias


([N3] pacosatu) #2

Hola Benito.

¿A qué código te refieres del evento On Show? ¿Qué código JS has utilizado en su lugar?

Lo de ¿JS siempre en 1º plano?, creo que no es cierto, dependerá del plano en que esté el proceso que llame al subproceso con el código JS.

Saludos
Paco Satué


([N3] blavan) #3

var ficha=theRegisterIn;
var tablainfo=ficha.tableInfo();

var pluralid=tablainfo.pluralId(0)
var plural=ficha.loadPlurals(pluralid);
var formulario=theRoot.dataView();
rejilla=formulario.control(“LIST”);
rejilla.clear();
rejilla.append(plural);


Este es código del evento que aplico a la conexion ON SHOW de la pestaña de un separador de formularios.
Sustituye al “clásico de v7”
Crear cesta local
carga lista
Añadir a la cesta
Interfaz procesar rejilla
cortar lista(0)
cesta agregar a la lista en curso.

Mi sensación es que carga más rápido, pero no veo el por qué, de ahí mi hilo.

También convertido en una función y con dos parámetros, el número de indice y el nombre de la lista parece que resulta más comodo de aplicar.


([N3] pacosatu) #4

Hola Benito.

El código de JS está más optimizado porque tiene un paso menos.

  • En JS la Lista “plural” carga los plurales y los añade directamente a la “rejilla”.
  • Sin embargo, en Velneo necesitamos una Cesta intermedia entre la Lista devuelta por “Cargar lista” y la Rejilla de destino.
    El uso de la Cesta es lo que puede ralentizar Velneo respecto al API.

Te propongo otra forma de optimizar la carga de los plurales:

  • Los plurales se cargarán normalmente desde el proceso PRO_CARGAR_PLURALES_JS en la Vista de datos CTR_PLURALES.
  • En el evento ON_SHOW del subformulario ejecutamos:
    If (CONDICION_REFRESCO)
    Interfaz: Recalcular(CTR_PLURALES)
    Set (CONDICION_REFRESCO,0)
  • Para optimizar la carga usamos la variable INICIALIZADO en el formulario principal. Esta variable se pone a 1 en el evento Post-Inicializado.
  • El proceso PRO_CARGAR_PLURALES_JS tendrá el siguiente código JS:

    // Se obtiene la vista en curso
    var oVista = theMainWindow.currentView();
    if (oVista)
    { // Cogemos el objeto “root” de la vista
    var oRoot = oVista.root();
    // La Vista de datos se carga sin Datos antes de inicializar el formulario
    if (oRoot.varToBool(“INICIALIZADO”))
    { // alert(“Obtiene los plurales”)
    if (oRoot)
    { // Formulario principal
    var oForm = oRoot.dataView();
    var lineas = theRegisterIn.loadPlurals(“LINEAS_ID”);
    theRegisterListOut.append(lineas)
    }
    }
    }

Con esto conseguimos encapsular el código de obtención de plurales en la Vista de Datos y usar la función Recalcular() para refrescar los datos.

Por otro lado, todo esto se evitaría si Velneo optimizara los controles “Vista de datos” de forma nativa, es decir, que no cargara datos de forma descontrolada como hace ahora. Por ejemplo, que la propiedad “Condicion de activo” puesta a 0 en el Pre_Inicializado del formulario evitara la carga de datos. Ya está propuesto como Idea.

Saludos
Paco Satué


([N3] blavan) #5

Bueno primero gracias porque esto para mí ya es una leccion avanzada.

Pero por favor porque empiezas con theMainwindow si estamos en un formulario?
Aún no me aclaro con el empleo y cuando de theMainwindow
No me encaja lo de
lineas=theRegisterIn.loadPlurals(“LINEAS_ID”);
theRegisterIn? de quien? ¿habra que posicionarse en un formulario?

Voy a probarlo.

Seguro que muchos foreros agradecen esta charla.


([N3] pacosatu) #6

Hola Benito.

Perdona, pero entre la porquería de editor que tenemos para el foro, que no se puedan incrustar imágenes desde el portapapeles y mi improvisación, a veces “resulta dificil comunicar fácilmente”.

Me explico:
Nuestro objetivo es controlar “cuándo el Control Vista de datos debe obtener los datos del vServer” para entre otras cosas optimizar el flujo entre el vClient y el vServer.
El problema es que el Control Vista de datos ejecuta la amalgama de objetos inmediatamente después de instanciarse en el formulario, es decir, tenemos poco control.

En nuestro ejemplo nos fijamos en 4 objetos:

  • Formulario principal FRM_PPAL
  • El proceso que carga los plurales PRO_CARGAR_PLURALES_JS
  • El control Vista de datos CTR_PLURALES que amalgama los objetos PRO_CARGAR_PLURALES_JS y la rejilla con los plurales
  • El subformulario FRM_SUB que contiene la Vista de datos CTR_PLURALES

Para controlar que CTR_PLURALES no cargue datos hasta que el formulario FRM_PPAL esté inicializado usamos la variable INICIALIZADO. Esta variable estará a 0 cuando CTR_PLURALES se instancie por primera vez en el subformulario.
Por esta razón desde el proceso PRO_CARGAR_PLURALES_JS obtenemos la referencia theMainWindow.currentView(), para leer el valor de INICIALIZADO.
Ten en cuenta que el proceso PRO_CARGAR_PLURALES_JS no sabe nada del exterior y menos que está dentro de un formulario. Solo sabe que tiene origen de tipo Ficha y que puede acceder a él a través de theRegisterIn, por eso la línea theRegisterIn.loadPlurals(“LINEAS_ID”).

La variable INICIALIZADO se pone a 1 en el evento Post_Inicializado del formualrio FRM_PPAL.

Será en el evento On_Show del subformulario FRM_SUB donde ya podemos decidir si recalculamos o no la Vista de datos y generar o no tráfico desde vServer.
Lógicamente en el primer On_Show la CONDICION_REFRESCO = 1.

Por supuesto, hay miles de maneras de hacer lo mismo, ésta es una más.

Saludos
Paco Satué


([N3] blavan) #7

Paco, gracias que más te voy a decir


([N3] blavan) #8

Bueno no quiero molestarte, solo comentarte que a mí siempre me carga lista al iniciar el formulario principal y eso es porque v7 carga las listas en el post iniciado con lo cual la variable iniciado está siempre a 1.

Por eso en v7 en la vista de datos al proceso de cargar lista no le escribimos el codigo.

Con el codigo que escribí yo, evidentemente sólo se activa con el show porque al iniciarse LIST está sin codigo de carga, por lo tanto vacia

De nuevo gracias por abrirme al codigo JS


([N3] pacosatu) #9

Hola Benito.

La variable INICIALIZADO pertenece al formulario principal FRM_PPAL.
La secuencia de eventos es:

  1. Pre-Inicalizado de FRM_PPAL -> INICIALIZADO vale 0
  2. Se instancia el control Vista de datos CTR_PLURALES y como INICIALIZADO = 0 no se cargan registros en la rejilla
  3. Post-inicializado de FRM_PPAL -> INICIALIZADO se pone a 1
  4. On-Show del Subformulario -> se ejecuta Interfaz: Recalcular(CTR_PLURALES) y como INICIALIZADO = 1 pues ya se cargan los registros en la rejilla.

En tu caso el proceso de carga está vacío, em mi caso es la variable INICIALIZADO la que determina la ejecución del código de carga de registros.

Si quieres te preparo un vin, aunque creo que ya está claro.

Saludos
Paco Satué


([N3] blavan) #10

Gracias.
Ya me funciona, PERO al script tuve que ponerle un else
Si inicializado==1
carga la lista
else
{
oRoot.setVar(“INICIALIZADO”, 1);
//alert(oRoot.varToInt(“INICIALIZADO”));
};

Al poner en post ini, INICIALIZADO=1, me carga la lista
sin embargo si viene INICIALIZADO=0 no carga la lista,pasa por el else y pone INICIALIZADO=1 y después el show de la pestaña si Carga la lista porque ya se encuentra con INICIALIZADO=1.

El PRE INI y el POST INI no están muy claros que digamos, probar, probar y probar


Bueno mi gozo en un pozo, funciona bien la primera vez que abro el formulario pero claro INICIALIZADO se queda a 1 con lo cual si vuelvo abrir el formulario pasa por el proceso de carga, aver como desde el evento de la pestaña pongo INICIALIZADO=0

Seguiré jugando.

No te preocupes en seguir mis incidencias, sólo a efectos de comentarios.
Gracias


([N3] blavan) #11

Gracias.
Ya me funciona, PERO al script tuve que ponerle un else
Si inicializado==1
carga la lista
else
{
oRoot.setVar(“INICIALIZADO”, 1);
//alert(oRoot.varToInt(“INICIALIZADO”));
};

Al poner en post ini, INICIALIZADO=1, me carga la lista
sin embargo si viene INICIALIZADO=0 no carga la lista,pasa por el else y pone INICIALIZADO=1 y después el show de la pestaña si Carga la lista porque ya se encuentra con INICIALIZADO=1.

El PRE INI y el POST INI no están muy claros que digamos, probar, probar y probar


Bueno mi gozo en un pozo, funciona bien la primera vez que abro el formulario pero claro INICIALIZADO se queda a 1 con lo cual si vuelvo abrir el formulario pasa por el proceso de carga, aver como desde el evento de la pestaña pongo INICIALIZADO=0

Seguiré jugando.

No te preocupes en seguir mis incidencias, sólo a efectos de comentarios.
Gracias


([N3] blavan) #12

Logrado, desde el evento on show llamo a un proceso JS que pone la variable INCIALIZADO a 0

Yo es que estoy jugando con un formulario MEN que desde su rejilla lanza un formulario con una pila de formularios y uno de estos tiene separadores en donde estoy aplicando los script.
Me vino bien porque me estoy dando cuenta como funciona la apertura de formulario, al abrir el formulario se activan todas las cargas de listas de las pilas del formulario esten o no visibles.

Gracias


([N3] pacosatu) #13

Hola Benito.

Si hubiera muchos más foreros como tú participando no tendríamos un FORO TAN SOSO como éste. Vamos a ver si la comunidad del otro lado del océano se anima porque seguro que hay muchas dudas y comentarios.

Intuyo que habrá mucha gente leyendo el foro, incluido Velneo, pero no se animan. ¡¡ Menos twitter y más foro !!

Gracias Benito por tu estusiasmo.
Paco Satué


([N3] blavan) #14

Como ya he comunicado en otros hilos estas prácticas se verán reflejadas en el .vin apoyo javascript de APOYOVELNEO.COM.

De velneo con la documentación javascript… ya me leen en soporte pero ni…


([N4] ofsantana) #15

Hola.
Ante todo agradecerles enormemente esta aportación.
En lo que a mi respecta, yo participo en el foro cuando el tiempo me lo permite y cuando veo que puedo aportar algo de valor.

En todo este tema de JS he ido poco a poco, trato de reusar el JS que propone velneo en sus openApps oficiales, en otras ocasiones he intentado hacer pequeñas cosas o me baso en el trabajo que otros programadores muy amablemente publican.

Así que bueno, de nuevo agradecerles y por lo menos de mi parte, siempre que pueda participar y dar una respuesta de valor con mucho gusto lo haré de lo contrario no me gustaría confundir al que esté dudando de algo.

Saludos.


([N3] blavan) #16

Agradezco tu comentario, en foros como dice Paco casi siempre sosos y escribes para animar el cotarro y no hay respuestas parece que aburre un poco.
A mi tambien me pasa que a veces no me apetece ni preguntar, pero es un error porque aunque sea solo una respuesta, esta seguro que es útil para mucho velneador