# Nodo abuelo

**URL:** <https://foros.velneo.com/t/nodo-abuelo/8550>\
**Category:** Velneo\
**Created:** [4 Diciembre, 2015 12:19 UTC](https://foros.velneo.com/t/nodo-abuelo/8550 "2015-12-04T12:19:14Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [4 Diciembre, 2015 12:19 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/1 "2015-12-04T12:19:14Z")

</div>

Buenas a todos:

En un nodo VTreeItem:  
padre = item.parentItem();

como hago para referenciar al padre del padre (abuelo)?

pues hago que:  
var abuelo = padre.parentItem()

y rompe el vClient

Gracias adelantadas

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [4 Diciembre, 2015 12:31 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/2 "2015-12-04T12:31:30Z")

</div>

Pues me he dado cuenta que cuando no existe el nodo abuelo rompe, pero cuando si existe lo toma.

Como hacer para evitar esto?

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [4 Diciembre, 2015 13:18 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/3 "2015-12-04T13:18:23Z")

</div>

¿Te rompe nada más usar la función o cuando intentas operar con la variable abuelo?

En teoría con la documentación en mano, debería devolver nulo cuando no exista. Si te rompe directamente envíalo a soporte para que tomen nota.

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [4 Diciembre, 2015 14:21 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/4 "2015-12-04T14:21:53Z")

</div>

Tienes razón amigo wikan lo enviaré a soporte aunque en una anterior consulta sobre otro asunto de javascript me dijeron: “Aunque el soporte de JavaScript queda fuera del ámbito del servicio de soporte… informarte de que podremos ofrecerte un servicio de consultoría.”

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [4 Diciembre, 2015 16:41 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/5 "2015-12-04T16:41:58Z")

</div>

Lo que no podrás preguntar a soporte es que te resuelvan un script o te hagan una determinada tarea pero si es un error en la API los han habido y los habrán, hay que comunicarlo para que lo solucionen y funcione como debe ser.

Por lo pronto, intenta ponerlo dentro de un try-catch para si consigues capturar la excepción y evitar la ruptura.

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [4 Diciembre, 2015 17:09 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/6 "2015-12-04T17:09:23Z")

</div>

Le puse el siguiente código pero cuando pasa por var abuelo = padre.parentItem(); el vClient rompe

var padre= item.parentItem();  
try {  
-----var abuelo = padre.parentItem();  
} catch(err){  
-----alert(err)  
}

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [4 Diciembre, 2015 17:25 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/7 "2015-12-04T17:25:31Z")

</div>

Nada, mándalo a soporte para que lo investiguen.

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [4 Diciembre, 2015 20:10 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/8 "2015-12-04T20:10:13Z")

</div>

Ya lo envié informaré lo que me respondan

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [4 Diciembre, 2015 21:07 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/9 "2015-12-04T21:07:45Z")

</div>

Hola runasoft.

Desde luego es un error grave y otro despiste del equipo de desarrollo.  
Si falla parentItem() ya no hay forma de saber si una rama del TreeWidget es TopLevel.

De momento te propongo una solución:

Rellena las ramas TopLevel con la función: oItemTopOpciones.setWhatsThis(0, “TopLevel”)  
Y de esta forma puedes saber si una rama es TopLevel.

var oPadre = (oItemTopOpciones.whatsThis(0) ? null : oItemTopOpciones.parentItem())  
if (oPadre == null) {alert (“Es padre”)}

Con esto puedes manejar la función parentItem() hasta la próxima Release de Velneo.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [4 Diciembre, 2015 23:47 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/10 "2015-12-04T23:47:32Z")

</div>

Disculpa amigo Paco pero no entiendo como implementarlo esa solución que me indicas

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [5 Diciembre, 2015 00:47 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/11 "2015-12-05T00:47:09Z")

</div>

Hola runasoft.

Quizás no está bien explicado, mejor un ejemplo:

Rama Top Level  
–Rama Nivel 1  
----Rama Nivel 2

El Item RamaTopLevel se crea de la siguiente manera:

```auto

var oItemTopLevel = oArbol.addTopLevelItem()
oItemTopLevel.setText(0, "Rama Top Level")
oItemTopLevel.setWhatsThis(0, "TopLevel")

```

Las otras ramas se crean de la forma habitual.

Para detectar el abuelo del Item seleccionado:

```auto

var oArbol = theRoot.dataView().control("ARBOL")
var oItem = oArbol.currentItem()
var oPadre = null, oAbuelo = null
if (oItem) {
   // oPadre será null cuando oItem es una rama Top Level
   oPadre = oItem.whatsThis(0) ? null : oItem.parentItem()
   if (oPadre) {
      // oAbuelo será null cuando oPadre es una rama Top Level
      oAbuelo = oPadre.whatsThis(0) ? null : oPadre.parentItem()
   }
}
if (oAbuelo) alert( "El abuelo es: " + oAbuelo.text(0) )
else alert( "No existe abuelo" )

```

O más genérico, para comprobar cualquier ascendencia:

```auto

var oArbol = theRoot.dataView().control("ARBOL")
var oItemTest = oArbol.currentItem()
var nNivelAsc = 2
for (i=0; i<nNivelAsc && oItemTest!=null; i++) {
	oItemTest = ItemPadre(oItemTest)
}
if (oItemTest) alert( "El abuelo es: " + oItemTest.text(0) )
else alert( "No existe abuelo" )

function ItemPadre(oItem) {
	return oItem.whatsThis(0) ? null : oItem.parentItem()
}

```

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [5 Diciembre, 2015 01:31 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/12 "2015-12-05T01:31:53Z")

</div>

Gracias Paco ahora si se entiende muy bien

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [5 Diciembre, 2015 13:25 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/13 "2015-12-05T13:25:11Z")

</div>

El código dado en su conjunto funciona muy bien, muchas gracias amigo Paco.

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [18 Diciembre, 2015 14:20 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/14 "2015-12-18T14:20:22Z")

</div>

Esta es la respuesta de soporte:

Lo que has de hacer es comprobar el padre. Cuando se usan punteros, se han de proteger mediante if previo.  
En Javascript, si creamos una variable que apunta a algo que no existe, genera un error.  
Por lo tanto, la asignación del abuelo debe ir precedida de una comprobación de que padre no esté vacío.

---

<div class="post-metadata">

**Author:** ![runasoft](https://avatars.discourse-cdn.com/v4/letter/r/c57346/32.png) [@runasoft](https://foros.velneo.com/u/runasoft)\
**Post date:** [23 Diciembre, 2015 15:50 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/15 "2015-12-23T15:50:48Z")

</div>

Hola foro:

Desde soporte me informan que: “esta incidencia ha sido incluida en nuestro sistema de gestión de incidencias con el código de referencia: VELNEO-4521”.

---

<div class="post-metadata">

**Author:** ![angelcastillo](https://avatars.discourse-cdn.com/v4/letter/a/53a042/32.png) [@angelcastillo](https://foros.velneo.com/u/angelcastillo)\
**Post date:** [7 Noviembre, 2016 18:04 UTC](https://foros.velneo.com/t/nodo-abuelo/8550/16 "2016-11-07T18:04:47Z")

</div>

yo uso esto, a ver si os vale.

function isTopLevelItem(treeW, item){  
var num\_ramas\_princ = treeW.topLevelItemCount;  
var principal = false;  
for( var i = 0; (i \< num\_ramas\_princ) && (principal==false); i++){  
item\_prin = treeW.topLevelItem(i);  
if(item\_prin == item){  
principal = true;  
}   
}   
return principal  
}
