CAMPO MAPEADO CON OTRA COLECCIÓN


Propiedad de tipo MAPEADA

    <prop name="MAP_SOCIO" visible="1" group="1" type="T" title="SOCIO" linkedto="IDSOCIO" linkedfield="NOMBRE"/>
 
 


Propiedad de tipo IDENLACE con otra colección.

    <prop name="IDSOCIO" visible="0" group="1" type="N" mapcol="Socios" mapfld="ID"/>


	<prop name="IDCLIENTE" group="1" type="N" visible="0" mapcol="Clientes" mapfld="ID"/>
	<!-- 
		Este campo es el que realmente SE GRABARÁ en la BD, normalmente no está visible.
		Enlaza con la colección "Clientes" y nos guardaremos el valor del campo "ID" seleccionado.
	-->
 
	<prop name="MAP_CLIENTE" ... linkedto="IDCLIENTE" linkedfield="NOMBRE" onchange="Refresh" value="##ID##">Cliente</prop>
	<prop name="MAP_CONTACTO" ... linkedto="IDCLIENTE" linkedfield="CONTACTO" locked="true" onchange="Refresh">Contacto</prop>
	<!-- 
		Estos campos están asociados con el campo "IDCLIENTE". Al llevar el prefijo "MAP_" NO se graban en BD.
		Para obtener sus valores utilizan el campo "IDCLIENTE" (linkedto) como enlace a la otra colección.
		El linkedfield es el campo que mostraremos por pantalla, el cual nos traemos de la otra colección.
		La lupa aparece en el campo que no está locked="true", para poder buscar directamente desde él.
		Los demás campos podemos ponerlos con el locked="true" para que NO se pueda editar su contenido NI TAMPOCO salga la lupa.
	-->



mapcol: Indica que esta propiedad está enlazada con otra colección, o sea, que esto es un campo clave en la relación de muchos a uno.


Ejemplo de código:

  <group name="General" id="1"></group>
  <prop name="IDTIPO" group="1" visible="0" type="N" mapcol="TiposUsuario" mapfld="ID"></prop>

En este ejemplo se indica que la propiedad cuyo nombre es IDTIPO es númerica y está enlazada con una colección llamada “tiposusuario”.

El campo que se usa para enlazar esta propiedad con la colección externa se indica mediante el atributo 'mapfld'.

El valor de este atributo debe ser el nombre de una colección válida dentro de la aplicación. Si la colección no está definida la interfase de usuario puede provocar un error al intentar enlazar esta propiedad con cualquier otra.

Para este valor, se puede usar la macro ##OWNERCOLL## indicando que se está refiriendo a la colección en la cual está definido el objeto propietario de este objeto.

Si la propiedad está declarada en una colección de detalles de documentos, la colección propietaria sería la colección de documentos de la cual está es contents.

La capa de datos sustituye el nombre de esta macro cuando se pide el valor de esta propiedad, por lo que la colección tiene que estar siendo usada como contents.

En caso de que la colección se obtenga directamente de la aplicación y no como una colección de contenido, el resultado de esta macro se obtendrá del atributo default-mapcol en caso de que esté definido dicho atributo, de lo contrario será una cadena vacía.

default-mapcol: Este atributo se utiliza para completar el anterior cuando la colección que contiene este propiedad se utiliza como colección base y no como colección de contenido.


En este caso el atributo mapcol devolverá el valor que tenga este atributo.

En el ejemplo siguiente se muestra este comportamiento:

  <coll name="Recibos" .... >
  <prop name="IDDOCUMENTO" mapcol="##OWNERCOLL##" default-mapcol="Facturas" mapfld="ID"></prop>
  </coll> 
 
  <coll name="Documentos" .... >
  <contents name="Recibos" src="Recibos" filter="IDDOCUMENTO=##ID##"></contents>
  </coll> 


En este ejemplo, la colección “Recibos” se ha declarado para usarse como colección de contenido en la colección “Documentos”. Cuando esto se hace así, el atributo mapcol devuelve el nombre “Documentos” por ser esta su colección propietaria.

En caso de que la colección “Recibos” se obtenga directamente de la aplicación y no como contenido de “Documentos”, el atributo mapcol devolverá el valor “Facturas” que es el valor por defecto.

mapfld: Indica que campo de la colección externa es el que se usa para enlazarla con esta propiedad. En el ejemplo anterior, la propiedad IDTIPO está enlazada con la colección “TiposUsuario” a través del campo ID.


Las propiedades que contienen esta pareja suelen ser propiedades de enlace solamente, por lo que suelen ser invisibles en la edición (visible=”0”).


Estos atributos indican que la propiedad se ha obtenido mediante un enlace con una colección externa. Se define para aquellas propiedades que comienzan con el prefijo MAP_ para indicar que proceden de un enlace entre tablas.

El valor de linkedto debe ser el campo que se ha usado para enlazarlo con la colección externa, tal como indica el ejemplo siguiente:

<coll name='Usuarios' title='el usuario' sql='SELECT u.*,t.ETIQUETA AS MAP_TIPOUSER,t.DERECHOS AS MAP_DERECHOS FROM ##PREF##Usuarios u LEFT JOIN ##PREF##TipoUsuario t ON u.IDTIPO=t.ID' objname='Usuarios' updateobj='Usuarios' progid='ASGestion.CASUser' dropdown='true' filter='IDEMPRESA=##ENTID##'>
   <prop name='IDTIPO' group='1' visible='0' type='N' mapcol='TiposUsuario' mapfld=’ID’></prop>
   <prop name='MAP_TIPOUSER' group='1' type='T' fieldsize='15' size='15' showmap='2' linkedto='IDTIPO' linkedfield='ETIQUETA'> </prop> 
</coll>


Este atributo se utiliza en combinación con el atributo linkedfield para indicar el enlace con otra colección. En este caso se indica que el campo MAP_TIPOUSER está enlazado mediante el campo IDTIPO con la colección “TiposUsuario”. El campo que le corresponde a la propiedad MAP_TIPOUSER es el de la propiedad ETIQUETA de la colección destino. El programa no utiliza esta relación para leer los datos, ya que esto lo hace la sentencia SQL, sino para hacer actualizaciones en cascada, como se describe más adelante.

Otro uso que tiene el atributo linkedto es definir el nombre de la propiedad a la cual está enlazada una propiedad de tipo “bitmapped”, como se describe más adelante.

La sección Controles por Tipo 3.-controles-por-tipo contiene una explicación detallada de como construir enlaces usando los atributos anteriormente explicados.


Muestra la colección enlazada a través del atributo mapcol como un desplegable.