Lentitud en aparecer el arbol Tree widget

Tengo 3 tablas A maestra de B, B maestra de C, un formulario con un control Tree widget en conexion de evento Post-Inicializado un manejador de evento donde disparo un manejador de objeto proceso en JS.
El manejador de evento lo lanzo en 1er plano se demora 6 segundos en aparecer el árbol, le cambio a 3er plano pero no sale nada a que se debe que no funcione el 3er plano?

Gracias

Para tratar temas de lentitud es necesario mucho más datos, ya que pueden influir muchas cosas.
Si el local o cloud, el uso de enlaces dinámicos, variables globales en disco, cantidad de información a mostrar, etc.

Depende lo que haga el proceso no podrás lanzarlo en el servidor, ya que la información se manejará allí. Por ejemplo una tabla en memoria la estarás construyendo en el servidor y no en el cliente.

Si son tablas para formar un menú, por ejemplo, en el que la información no a a variar demasiado, puedes recorrer esas tablas para cachear la información a local. Mejorará el rendimiento en sucesivos usos.

Es en cloud, utiliza una variable global en memoria, pero poniéndole el valor de 1 en vez de la variable global se demora igual, la tabla A tiene 3 registros, la B tiene 6 y la C 3 y los únicos campos son ID y NAME en todas las tablas.
Hice la prueba de una tabla arbolada con los mismos datos y se demora 2 seg.

Bueno, tendrías que revisar entonces como estás montando el TreeWidget, la conexión que tengas.

Ahora con el debug para nativo y javascript puedes revisar que todo funciona de la manera que tiene que hacerlo.

Gracias amigo Wikan por responder este es el código que utilizo, he vuelto a tomar el tiempo y llega a los 10 seg. en responder como les vuelvo a repetir con 3er. plano no aparece nada, solo con el 1er. plano., pensé que era mi linea de internet pero no es.
var formulario = theRoot.dataView();
var arbol = formulario.control(“CONTROL_TW”);
//Parámetros
var tablaM = theRoot.varToString(“TABLAM”);
var pluralM = theRoot.varToString(“PLURALM”);
var plural1 = theRoot.varToString(“PLURAL1”);
var plural2 = theRoot.varToString(“PLURAL2”);

arbol.setHeaderLabel(0, theRoot.varToString(“TIT”));

//------- tabla Maestro
var listaMaestro = new VRegisterList(theRoot);
listaMaestro.setTable(tablaM);
listaMaestro.load(“CURSOS_REL”,[theRoot.varToInt(“ID_AREA”)]);
var curListaMaestro = listaMaestro.readAt(0);

var listaTabla1 = curListaMaestro.loadPlurals(pluralM);
for (var x = 0; x < listaTabla1.size(); x++) {
var registroX = listaTabla1.readAt(x);
var nombreX = registroX.fieldToString(“NAME”);
itemX = arbol.addTopLevelItem();
itemX.setText(0, nombreX);

var listaTabla2 = registroX.loadPlurals(plural1);
for (var y = 0; y&lt;listaTabla2.size(); y++){
	var registroY = listaTabla2.readAt(y);
	var nombreY = registroY.fieldToString("NAME");
	itemY = itemX.addChild();	
	itemY.setText(0, nombreY);
	
	if (plural2 != ""){
		var listaTabla3 = registroY.loadPlurals(plural2);
		for (z = 0; z&lt;listaTabla3.size(); z++){
			var registroZ = listaTabla3.readAt(z);
			var nombreZ = registroZ.fieldToString("NAME");
			itemZ = itemY.addChild();
			itemZ.setText(0, nombreZ);
		}
	}
}

}
arbol.rootIsDecorated = true;
arbol.selectionBehavior = 0;
arbol.selectionMode = 2;

Hola.

El proceso de generar un árbol no se puede realizar en 3º plano, porque estás insertando objetos (nodos) en un objeto local al formulario, luego no es posible.

Intenta aislar el árbol lo más posible: haz un formulario sólo con el árbol, sin otros objetos, sin condiciones de visibilidad, sin usar variables globales (ni siquiera en memoria), etc.

Te puede ayudar, antes de generar el árbol, lanzar un simple proceso tipo Velneo en 1º plano que recorra en modo lectura los registros que van a componer el árbol, para que vClient tenga ya los registros en caché.

Aparentemente está bien, en tercer plano jamás te va a funcionar, estas interactuando con un objecto de interfaz.

Para los TreeWidget con lista hay una clase nueva RegisterPattern, no se si estará más optimizada o es más cómoda para estos casos.

La tabla arbolada solo la habrás podido probar tabla a tabla, si le sumas que estás cargando 3, 3x2sg tienes el tiempo de 6 que comentas.

Ten en cuenta que aunque muestres solo el ID y NAME viaja el registro completo, si los registro tienen bastante longitud puede aumentar el ritmo de carga.

Puedes ir comentando bloques o usando el debug para analizar que tabla es la que te relentiza.

Hice un manejador de evento con un recorrer lista con todas las tablas pero se demora igual.
Luego lo hice con la clase RegisterPattern pero igual se demora.
Alguien tuvo similares problemas utilizando el treewidget?

Si tienes el mismo problema con un recorrer lista puede deberse al tamaño de los registros como te comento anteriormente.

¿Que tamaño de registro tienen las tablas?

Pues no mucha.

Cada tabla ID de long. 2, NAME long 35 alfa 128 y su correspondiente enlace a maestro
La tabla A tiene 3 registros, la B igual a 11 y la C igual a 9 registros.

Me refiero a lo que ocupa cada registro, lo ves en las propiedades de la tabla.

Pues la longitud del registro son 39, 40 y 40 respectivamente

No debería tardar casi nada. Pero si te pasa lo mismo con un recorrer lista, tendrás problemas de conexión.

Hazle un ping al servidor a ver que tiempo de respuesta te da.

Con getServerIP() dentro de la aplicación conseguí el IP del servidor que utilizo le hago un ping varias veces y me sale:
Tiempo de espera agotado para esta solicitud

Aunque es antiguo el tema respondere:

Al utilizar el for para leer los registros esto es lo que vuelve lento la carga de información, como mencionan, puedes cargar los registros antes (puede ser antes de abrir el formulario o al inicio el aplicativo) y recorrerlos para poder hacer la carga mas rápida. Pero es algo tedioso en mi opinión.

Si aun tienes este inconveniente yo lo solucionaria de esta forma:

  1. Crear un proceso en el cual con las funciones actuales de velneo, generar un JSON, con la estructura que necesitas
    {“itemPadre1”:“Nombre registros”,
    “items”:[
    {"item1:“NombreITem”},…{}]
    }
  2. Este proceso lo ejecutas en 3P, lo puedes hacer con
Crear manejador de objeto ( proceso, Proceso GEN_JSON@ejemplo )

o desde el JS del manejador de evento

proceso.exec(VProcess.RunInServer)

posterior recorres el JSON retornado por el proceso con el for y realizas el procedimiento normal para agregar los items al arbol