MSCRM 4.0: Lookup falso

16 11 2010

Con la llegada de la versión de MSCRM 4.0 algunos pensamos que ya podíamos olvidarnos definitivamente de lo que llamábamos Lookup falso. Para los que no lo recordéis en la versión MSCRM 3.0, no era posible crear más de una relación 1:n entre dos entidades. Esto suponía que si se quería establecer más de una relación 1:n entre dos entidades se debía crear un lookup falso. La técnica consistía en crear dos atributos de texto en la entidad hija de la relación virtual, uno de los cuales ocultábamos y el otro lo substituíamos con el código HTML de un lookup (mediante el outterHTML).

Pues bien, una vez más debemos retomar esa técnica y actualizarla!!! En MSCRM 4.0 podemos establecer más de una relación 1:n entre dos entidades con lo que aparentemente no nos haría falta crear este tipo de lookups pero, ‘al loro’, que tenemos ciertas entidades a las que no podemos crearles ninguna relación 1:n!!! En concreto me refiero a las entidades de actividades (fax, phone…). Por lo que, si queremos añadir una relación 1:n entre una de esas entidades (por ejemplo, la entidad fax) y una entidad personalizada, debemos recurrir a esa solución.

Recientemente hemos aplicado la solución del lookup falso actualizada para MSCRM 4.0 en el siguiente entorno. En una integración de MSCRM 4.0 integramos un sistema de envío de fax desde MSCRM 4.0. Este nuevo sistema permite enviar fax individuales o de forma masiva (en algún otro artículo explicaré el funcionamiento de este sistema de envío de fax). Los servicios de envío de fax permiten el envío de archivos adjuntos como contenido del fax. En el caso de los fax individuales podríamos utilizar las notas (archivos adjuntos) inherentes a la entidad fax. Sin embargo, para los envíos masivos (a través de una campaña de marketing), MSCRM no nos permite adjuntar archivos!!!. Por tanto, ideamos un sistema en el que el usuario puede crear un documento adjunto (en una entidad personalizada con notas) y asociar ese documento a la plantilla de fax de la actividad de la campaña de marketing. Pero el problema surgió cuando no pudimos crear la relación n1:n entre la entidad de documento adjuntos y la entidad fax. Pues bien en esta situación creamos un lookup falso en el formulario de detalle de la entidad fax que permite que el usuario pueda seleccionar un documento para adjuntar al fax.

Como se observa en la figura, el lookup falso que hemos añadido no se distingue de un lookup ‘verdadero’ fruto de una relación 1:n. En este caso el lookup falso permite seleccionar un registro de la nueva entidad Attachment (con la que no podíamos crear la relación 1:n).

Para implementar este sistema tan sólo ha sido necesario utilizar las funciones siguientes:

SaveLookupValue = function(destinationfieldId, namefieldId)
{
document.getElementById(namefieldId).DataValue = '';
var lookupItem = document.getElementById(destinationfieldId).DataValue;
if (lookupItem != null) {
document.getElementById(namefieldId).DataValue = lookupItem[0].name;
}
}

CreateFalseLookup = function(txtboxId, namefieldId, entitySchemaName, entityName, entityCode, custom) {
HideField(namefieldId);
var val = document.getElementById(txtboxId).DataValue;
var txtboxIdComillas = "'" + txtboxId + "'";
var namefieldIdComillas = "'" + namefieldId + "'";
var htmlLookup = '<td id="' + txtboxId + '_d">';
htmlLookup += '<table style="table-layout: fixed" class="ms-crm-Lookup" cellSpacing="0" cellPadding="0" width="100%">';
htmlLookup += '<tbody><tr><td><div style="width: 100%" class="ms-crm-Lookup " ime-mode="auto"></div>';
htmlLookup += '<label class="ms-crm-Hidden-NoBehavior" for="' + txtboxId + '_ledit">' + entityName + '</label>';
htmlLookup += '<input id="' + txtboxId + '_ledit" class="ms-crm-Hidden-NoBehavior" maxLength="1000" ime-mode="auto" {95919BE0-C436-4eab-8083-096E94826667}="" value="" /></td>';
htmlLookup += '<td class="Lookup_RenderButton_td" width="25">';
htmlLookup += '<img style="ime-mode: auto" id="' + txtboxId + '" onchange="SaveLookupValue(' + txtboxIdComillas + ',' + namefieldIdComillas + ');" class="ms-crm-Lookup" title="Haga clic para seleccionar un valor para ' + entityName + '." alt="Haga clic para seleccionar un valor para ' + entityName + '." src=<a href="http://montau.cambrasabadell.org/_imgs/btn_off_lookup.gif&quot;">http://<server>/_imgs/btn_off_lookup.gif</a> resolveemailaddress="0" showproperty="1" autoresolve="1" defaulttype="0" lookupstyle="single" lookupbrowse="0" lookuptypeIcons="/CAMSBD/_Common/icon.aspx?objectTypeCode=' + entityCode + '&iconType=GridIcon&inProduction=1&cache=1" lookuptypenames="' + entitySchemaName + ':' + entityCode + '" lookuptypes="10160" />'; //req="0"
if (custom)
htmlLookup += '<a title="Haga clic para seleccionar un valor para ' + entityName + '." onclick="previousSibling.click();"
href="<a href="http://montau.cambrasabadell.org/CAMSBD/userdefined/edit.aspx?etc=">http://<sever>/<orgname>/userdefined/edit.aspx?etc=</a>' + entityCode + '#"></a>';
else
htmlLookup += '<a title="Haga clic para seleccionar un valor para ' + entityName + '." onclick="previousSibling.click();" href="<a href="http://montau.cambrasabadell.org/CAMSBD/edit.aspx?etc=">http://<server>/<orgname>/edit.aspx?etc=</a>' + entityCode + '#"></a>';
htmlLookup += '</td></tr></tbody><table>';
var obj = document.getElementById(txtboxId);
if (obj != null) {
obj.outerHTML = htmlLookup;
}
var textField = document.getElementById(namefieldId);
if (textField == null) return false;
var lookupData = new Array();
var lookupItem = new Object();
lookupItem.typename = entitySchemaName;
lookupItem.id = val;
lookupItem.name = textField.DataValue;
lookupData[0] = lookupItem;
document.getElementById(txtboxId).DataValue = lookupData;
}

CreateFalseLookup('new_attachmentid', 'new_attachmentidname', 'new_attachment', 'Attachment', '10160', true);

Si bien este código ha sido particularizado para la integración MSCRM que nos ocupaba, entendemos que es de fácil adaptación a cualquier otro entorno que se requiera.

Anuncios

Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: