Recorrer subojectos de un formulario


([N3] blanyi) #1

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


([N3] pacosatu) #2

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.

Saludos
Paco Satué


([N3] blanyi) #3

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

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

Dios te bendiga.

YIMY MORA ACONCHA


([N4] avelino alonso) #4

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 :slight_smile:


([N1] wikan) #5

Está la función 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.


([N3] pacosatu) #6

Hola avelino alonso.

Completando el código de 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


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é


([N4] avelino alonso) #7

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 :slight_smile: :-), 10Puntos sobre 10 :slight_smile: 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 :slight_smile: