Después de una semanita en la que no he tenido prácticamente tiempo para poner ningún post en el blog, hoy voy a dejar aquí una recopilación de algunos «tips» que he ido apuntando sobre cosas interesantes de los campos lookup de Microsoft Dynamics CRM 3.0. Espero que os resulte útil.
Fijar la entidad por defecto en un campo Lookup
A veces resulta un poco molesto tener que estar seleccionando el tipo de entidad adecuado cuando queremos seleccionar un registro en un campo de lookup que acepta varios tipos de entidades. Por ejemplo, imaginad que en la empresa os dicen que todos los incidentes de servicio se relacionarán con contactos y no con cuentas, pues puede resultar un poco molesto para la persona que está registrando incidentes tener que estar seleccionando el tipo de entidad relacionada cada vez que quiera relacionar el incidente con un cliente.
Bueno pues esto tiene solución. En el evento form OnLoad() podemos poner una línea de Java Script que cambie el tipo de entidad por defecto de un campo Lookup.
//Establecer tipo de entidad por defecto
crmForm.all.regardingobjectid.defaulttype = «2»;
Como véis no hay más que indicar el EntityTypeCode de la entidad deseada y listo.
Limitar los tipos de entidades que se pueden seleccionar en un Lookup
Siguiendo con el ejemplo anterior. ¿Cómo hacemos para que en el lookup «cliente» de la ficha de casos sólo se puedan seleccionar contactos y no cuentas? Pues, de nuevo utilizando Java Script lo podemos conseguir, aunque esta vez ya se complica un poquito más.
//Establecer solo contactos como tipos de entidad
crmForm.all.regardingobjectid.lookuptypes = «2»;
//Poner el icono a mostrar en los registros
crmForm.all.regardingobjectid.lookuptypeIcons = «/_imgs/ico_16_2.gif»;
No os olvidéis de incluir siempre la segunda línea para establecer el icono que se muestra delante del nombre del registro en el campo de Lookup.
Filtrar los registros disponibles en el Lookup
Y finalmente un «tip» que me encanta, cómo filtrar los registros que aparecen en el cuadro de diálogo del Lookup. Imaginad que tenéis miles de contactos en el CRM, y que queréis establecer el contacto principal de una cuenta mediante el campo disponible a tal efecto en el formulario. Resultaría más cómodo que en el listado de selección del cuadro de diálogo sólo se mostrasen aquellos contactos que se encuentren relacionados con esa cuenta ¿no? Bueno, pues otra vez el Java Script nos va a ayudar.
crmForm.all.primarycontactid.lookupbrowse = 1;
crmForm.all.primarycontactid.additionalparams = «fetchXml=<fetch mapping=’logical’><entity name=’contact’><all-attributes /><filter type=’and’><condition attribute=’parentcustomerid’ operator=’eq’ value='» + crmForm.ObjectId + «‘/></filter></entity></fetch>»;
En la primera línea fijamos el campo lookupbrowse a 1 para indicar que se van a filtrar los resultados a mostrar en el cuadro de diálogo. Mientras que en la segunda línea debemos proporcionar la consulta que utilizaremos para obtener los registro a mostrar, propocionando el FetchXML que la describe.
En este caso el FetchXML simplemente selecciona aquellos contactos que tengan como «parentaccount» (cuenta principal) la cuenta que estamos visualizando en el formulario, de ahí la concatenación del ObjectID en el medio de la consulta.
Sin embargo, hacer este filtrado tiene un efecto colateral que hay que destacar. El botón de crear un nuevo registro en el cuadro de diálogo del Lookup dejará de funcionar, si lo pulsamos mostrará un error. Es lo que tiene utilizar personalizaciones no soportadas.
Bueno, espero que os resulten de interés estos truquillos sobre los campos de Lookup. La semana que viene más.
Un saludo,
Marco Amoedo
PD: Estas personalizaciones no están soportadas, por lo tanto úsalas bajo tu propia responsabilidad y ten en cuenta que pueden provocar problemas a la hora de futuras actualizaciones y/o recibir soporte técnico.