# Recorrer subojectos de un formulario

**URL:** <https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690>\
**Category:** Velneo\
**Created:** [11 Febrero, 2016 13:32 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690 "2016-02-11T13:32:03Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ymoracon](https://avatars.discourse-cdn.com/v4/letter/y/b2d939/32.png) [@ymoracon](https://foros.velneo.com/u/ymoracon)\
**Post date:** [11 Febrero, 2016 13:32 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/1 "2016-02-11T13:32:03Z")

</div>

Buenos días.

Creo que no he sabido buscar porque me parece haber visto algo de lo que estoy referenciando pero no lo he encontrado.

Quiero saber si con lenguaje nativo o con javascripts se pueda hacer un recorrido por la lista de subojectos contenidos en un formulario y si se cumple una condición dada habilitar o deshabilitar ese subojecto. Necesito hacerlo de esta forma porque quiero hacerlo de manera generica, que me sirva para cualquier formulario y cualquier subobjecto.

Gracias de antemano.

YIMY MORA ACONCHA

---

<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:** [11 Febrero, 2016 14:59 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/2 "2016-02-11T14:59:27Z")

</div>

Hola YIMY.

Tienes las funciones del API VFormDataView.controlCount() y VFormDataView.control(Index) para recorrer todos los Controles del formulario.

Lo más farragoso es recorrer los controles de un Objeto contenido en un Contenedor del formulario (pila, vista de datos, separador, …) y así sucesivamente con todos los subObjetos.

Tienes un ejemplo sencillo en las [vitaminas de Jesús Arboleya](http://jarboleya.com/2013/07/20/deshabilitar-controles-de-formulario-con-el-api-de-velneo-v7/).

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![ymoracon](https://avatars.discourse-cdn.com/v4/letter/y/b2d939/32.png) [@ymoracon](https://foros.velneo.com/u/ymoracon)\
**Post date:** [11 Febrero, 2016 16:14 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/3 "2016-02-11T16:14:34Z")

</div>

Hola Paco, muchííííísimas gracias.

Eso es exactamente lo que necesito, la vitamina de Arboleya me cayó estupendamente.

Dios te bendiga.

YIMY MORA ACONCHA

---

<div class="post-metadata">

**Author:** ![avelino\_alonso](https://avatars.discourse-cdn.com/v4/letter/a/977dab/32.png) [@avelino\_alonso](https://foros.velneo.com/u/avelino_alonso)\
**Post date:** [5 Abril, 2016 15:19 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/4 "2016-04-05T15:19:31Z")

</div>

Buenas tardes Paco,  
Despues de darle muchas vueltas y leeros a todos sobre éste tema, he conseguido la primera parte de mi pretensión, sacar toda la info posible de los controles de formularios.  
Lo que he intentado un montón de veces, y no he conseguido, es obtener de la misma forma todos los “subcontroles” de un control separador.  
Artesanalmente, con el nombre del control separador y nombre de la pestaña, lo consigo, pero lo que quiero es hacerlo variable.  
Espero que se entienda lo que pretendo.

Por lo que tu dices “Lo más farragoso es recorrer los controles de un Objeto contenido en un Contenedor del formulario (pila, vista de datos, separador, …) y así sucesivamente con todos los subObjetos.”, creo que sin ayuda, no conseguiré hacerlo 🙂

---

<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:** [5 Abril, 2016 17:49 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/5 "2016-04-05T17:49:10Z")

</div>

Está la función [widgetType](https://velneo.es/info_v7_718_es/velneo_vdevelop_v7/scripts/clases/core/vmainwindow/#widgetType) que devuelve el tipo de widget (lógica). Solo tendrías que controlar que controles pueden tener subcontroles y usar la clase VObject para recorrer sus subcontroles.

---

<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 Abril, 2016 22:33 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/6 "2016-04-05T22:33:58Z")

</div>

Hola avelino alonso.

Completando el código de [https://velneo.es/foros/topic/identificador-de-control-en-js/](https://velneo.es/foros/topic/identificador-de-control-en-js/)  
Verás que la clave estar en el uso de la función subObjectInfo().

Ejemplo inspeccionando los Separadores de formularios TypeControl = 13

```auto

var oForm = theRoot.dataView()
var oFormInfo = theRoot.objectInfo();
var nNumObj = oFormInfo.subObjectCount(VObjectInfo.TypeControl)
// var numControles = oForm.controlCount();
var controlesList = ''
// alert(numControles)
// Los objetos se recorren a través del subObjectInfo que devuelve otro VObjectInfo
for ( var numControl = 0; numControl < nNumObj ; numControl++ ) {
	objInfo = oFormInfo.subObjectInfo(VObjectInfo.TypeControl, numControl)
	// La función objInfo.id() devuelve el nombre del Control
	// La función objInfo.propertyData(0) devuelve el Tipo de Control
	controlesList = controlesList + objInfo.propertyData(0) + " - " + objInfo.id() + "\n"
	// Comprobamos el Separador de formularios
	if (objInfo.propertyData(0) == 13) {
		var oSep = oForm.control(objInfo.id())
		// Recorremos los Separadores de formularios
		for (var numSep = 0; numSep < oSep.count ; numSep++ ) {
			var oFormSep = oSep.form(numSep)
			var oFormSepInfo = oFormSep.objectInfo()
			var nNumObjSub = oFormSep.controlCount()
			controlesList = controlesList + " " + oFormSepInfo.id() + "\n"
			for ( var nCtrl = 0; nCtrl < nNumObjSub ; nCtrl++ ) {
				objetoSub = oFormSepInfo.subObjectInfo(VObjectInfo.TypeControl, nCtrl)
				controlesList = controlesList + " " + objetoSub.id() + "\n"
			}
		}
	}
}
alert (controlesList)

```

Dije que es farragoso porque no todos los Controles pueden tener Subcontroles y además cada Subcontrol puede tener a su vez otros controles con Subcontroles y así indefinidamente (tendremos que hacerlo recursivo hasta un determinado nivel).

Pruébalo  
Paco Satué

---

<div class="post-metadata">

**Author:** ![avelino\_alonso](https://avatars.discourse-cdn.com/v4/letter/a/977dab/32.png) [@avelino\_alonso](https://foros.velneo.com/u/avelino_alonso)\
**Post date:** [6 Abril, 2016 11:01 UTC](https://foros.velneo.com/t/recorrer-subojectos-de-un-formulario/8690/7 "2016-04-06T11:01:33Z")

</div>

Muchas gracias Wikan por la pista widgetType, me fue de gran utilidad para localizar el tipo de control hasta que hace un rato he visto la respuesta de Paco que me ha completado toda la consulta 🙂 :-), 10Puntos sobre 10 🙂 Me lo has dado todo ya perfectamente montado Paco!!! … Muchisimas gracias. Ahora ya me centrare en el tema de la parte “farragosa”, que con ésta base me será mucho más sencillo.  
Quedais los dos invitados si os pasais por Asturias!!!.. la población no importa 🙂
