Extraer ID de un treeview


([N1] osuna) #1

Hola buenas tardes, necesito una ayuda por acá por favor, ¿existe la forma de extraer el ID del registro seleccionado de un treeview, que ha sido cargado con otro evento JavaScript?

El objetivo es conseguir la forma de editar el registro seleccionado en el treeview o darle de baja a ese registro.


([N1] wikan) #2

https://velneo.es/info_v7_20_es/velneo_vdevelop/scripts/clases/core/widget/vtreewidget/#currentItem


([N1] osuna) #3

Gracias por la ayuda Manuel. Leere la documentacion.


([N1] osuna) #4

No lo he logrado conseguir =/ …

mi treeview lo cargo en un formulario sin origen, no he tenido problema en eso, lo que quiero es obtener el id de cualquier registro al que yo le de doble click sobre el, algo muy parecido como cuando se carga un combobox con JS. donde solo con los comandos (sel=combo.currentIndex()) y (codsel=combo.itemData(sel)) se resuelve.

Manuel me guias hacia currentItem() del treeview, pero la verdad no se como implementarlo.

y pesss por lo leido itemData() solo aplica para los Listbox y comboBox.

si existe una solucion porfavor se los agradeceria mucho.


([N1] osuna) #5

Si logro como conseguir dichoso ID puedo ejecutar este proceso de la clase VProcess:

importClass(“VProcess”);

var proceso = new VProcess(theRoot);
proceso.setProcess(“ALIAS_PROYECTO/ID_PROCESO”); // IN: ficha persona. OUT: lista peliculas

var cuenta= new VRegister(theRoot);
cuenta.setTable(“ALIAS_PROYECTO/ID_TABLA”);

if (cuenta.readFirstRegister(“ID”)) ///// ACA DEBERIA ASIGNAR EL ID EXTRAIDO DEL TREEVIEW
{
if (proceso.setRegisterIn(cuenta))
{
if (proceso.exec())
theRegisterListOut.append(proceso.result());
};
};

CON ESTO PODRIA DISPARAR EL FORMULARIO DE MODIFICACION QUE ES EL OBJETIVO PLANTEADO.


([N1] wikan) #6

El treeWidget se puede rellenar a mano, digamos introduciendo texto o cargar registros con el Pattern.

Si lo has cargado a pelo, tendrás que recorrer todo el árbol buscando el item seleccionado.


([N1] osuna) #7

Mi treeview lo he cargado con el mismo proceso que nos ha regalado Paco en este hilo .

con ese mismo proceso en javascript es que lo lleno, pero estoy atado en que no puedo decirle desde alli mismo que me presente el formulario de modificacion o de baja… es mas nisiquiera el formulario de alta se puede disparar desde alli.

lo que se me ocurrio con el proceso que indico en el comentario anterior fue eso, extraer el id del registro seleccionado con doble click y poej nada desde un proceso en velneo lanzar el formulario de modificacion o el que se me venga en gana.

He ay el problema =/ no lo he conseguido.


([N1] wikan) #8

De esa manera se rellena a pelo el árbol

Revisa como rellenar con VItemRegisterPattern


([N1] osuna) #9

Hola Manuel, he chequeado lo que compartes y no lo he podido lograr. Gracias por el apoyo de igual manera


([N3] pacosatu) #10

Hola osuna.

Como indica Manuel se puede rellenar un TreeView de 2 formas, a pelo o usando la clase VItemRegisterPattern. Ésta última nos permite emular el comportamiento de la Rejilla asociando un formulario de edición a las ramas del árbol. Aunque esta forma de llenar un árbol está muy bien, tiene algunas limitaciones (¡¡qué raro con Velneo!!) que limitan su uso respecto a rellenar el Treeview a pelo.

Volviendo a tu problema, en realidad has hecho lo más dificil que es llenar el árbol y te atascas en lo más sencillo que es leer las columnas de dicho árbol.

Para leer el ID o cualquier columna del árbol debes hacer lo siguiente:

  • Obtener la rama seleccionada -> oRama = oArbol.currentItem() que devuelve un objeto de la clase VTreeItem
  • Obtener el valor de la columna deseada -> nID = parseInt(oRama.text(nColID)) siendo nColID la columna del ID (con índice 0)

Así de fácil.
Saludos
Paco Satué


([N1] osuna) #11

Hola Paco, si de verdad despues de tanto enredo fue que llegue a conseguirlo de esa manera. Bueno en fin ya lo logre capturar y ya tengo el proceso v7 para modificar la ficha seleccionada con doble click.

importClass(“VProcess”);
// Capturamos el formulario y Accedemos al control
form = theRoot.dataView().control(“LST”);
var sel = form.currentItem();
var cod = sel.text(3)//En este caso la columna 3 es el ID de la rama (Esta oculto)
var proceso = new VProcess(theRoot);
proceso.setProcess(“TES-APP/FORM_MOD”); //Alias_proy/Id_proceso
proceso.setVar(“COD”, cod);
proceso.exec();

aya simplemente: cargar lista de la tabla que necesito, resolverla por el id que le envio como parámetro, recorro la lista, creo el M.Objeto (El formulario de mod.), añado la ficha al objeto y lo ultimo disparar objeto.

Tuve al principio la idea de hacerlo como en comentarios anteriores, con la clase VRegister obtener el registro y añadírselo al proceso y asi quedaria con menos lineas, pero readRegister( String szIdIndice, Array aKeyPartsResol, Number searchMode ) me genera error y no le di mas vueltas al asunto y lo hice como lo explico.

Gracias por la ayuda.