update UserSettingsBase set PagingLimit=500
domingo, 12 de diciembre de 2010
Aumentar el número de registros por página
Por defecto Dync CRM permite visualizar un máximo de 250 registros por página en cada vista, para poder aumentar dicha cantidad ejecutar la siguiente sentencia sql:
Aumentar el número de registros para exportación a excel
Por defecto en Dync CRM 4 se puede exportar a excel como máximo 10000 registros. Para aumentar dicha cantidad se deberá ejecutar la siguiente sentencia SQL en la BD Organizacional:
Luego, en el servidor de CRM deberemos realizar iisreset para aplicar los cambios realizados.
update OrganizationBase set maxrecordsforexporttoexcel=65535Nota: el número 65535 sólo es referencial
Luego, en el servidor de CRM deberemos realizar iisreset para aplicar los cambios realizados.
sábado, 11 de diciembre de 2010
Reordenar NavBar de entidad
Es conocido que para ordenar ítems del navBar existe una opción llamada “Orden de visualización”
No obstante, esta opción sólo está habilitada para las relaciones personalizadas y no para las que son OOTB o para los ítems que creamos por el ISV.
Para estos casos se puede hacer uso de un JScript en el OnLoad y utilizar la función "insertBefore". Este script requiere de los ID de los ítems del NavBar de la entidad (este ID lo podremos obtener utilizando herramientas como IEDevTollbar o simplemente buscando en el código fuente del formulario). En este ejemplo trabajaremos con los ítems Actividades e Historial de la entidad Contactos. En el OnLoad copiar lo siguiente:
var _ActivitiesNavItem = document.getElementById("navActivities").parentNode;
var _ActHistoryNavItem = document.getElementById("navActivityHistory").parentNode;
_ActHistoryNavItem.insertBefore(_ActivitiesNavItem);
Y Esto sería el antes y el después.CrmForm Jscript con intellisense generator
En ciertas ocasiones hemos deseado o necesitado un editor que cuente con intellisense para desarrollar nuestros JS. Aquí les muestro de un tool que les servirá de mucha ayuda, MS CRM Javascript Intellisense Generator que lo puedes descargar de aquí.
Una vez descargado y ejecutado, nos parecerá una pantalla de conexión.
Una vez conectado, en la parte inferior nos mostrará el nombre de la organización y al lado derecho se mostrará el listado de entidades. (Si seleccionamos una serie de características asociadas a la entidad).
Hacemos clic en el botón “Save” para generar una carpeta con el contenido de características de todas las entidades existentes.
Colocamos la carpeta generada dentro de una solución de Visual Studio y procederemos a abrir el archivo relacionado a la entidad en la cual queramos generas nuestro JScript.
En la parte inferior del archivo abierto ya podremos comenzar a desarrollar nuestros JS con intellisense.
viernes, 10 de diciembre de 2010
Obtener sentencia SQL desde Vista o Búsqueda Avanzada
Muchas veces (especialmente cuando empezamos con Dync CRM) y nos solicitan hacer reportes desde Visual Studio, desconocemos el nombre de las tablas, de los atributos, o simplemente no tenemos experiencia haciendo consultas a BD. En un post anterior mostré como obtener el FetchXML de vistas y búsquedas avanzadas, ahora les mostraré la manera de obtener la sentencia SQL.
Primero haremos una búsqueda avanzada (o seleccionaremos una vista) y la exportaremos a Excel seleccionando la opción “Hoja de cálculo dinámica” (Dynamic worksheet).
Cuando tengamos el Excel abierto con el resultado de la exportación, procederemos a seleccionar la opción “Datos” del ribbon y luego seleccionaremos la opción “Conexiones”.
domingo, 19 de septiembre de 2010
Limitar el número de registros asociados a una entidad
Partamos del siguiente ejemplo:
Se tiene la entidad personalizada jlc_documento la cual está asociada a las entidades contact y account. Siendo contact y account las entidades que tengan la vista asociada y jlc_documento los lookups. (El lookup creado de la relación contact-jlc_documento es jlc_documentocontactid y el lookup creado de la relación account-jlc_documento es jlc_documentoaccountid)
Se desea poder registrar como máximo 10 jlc_documentos por cada registro de contact y account.
La solución a este problema podría ser la siguiente:
var clienteId;
var nroRegistros;
var authenticationHeader;
var xml;
if (crmForm.FormType == 1) {
if (crmForm.all.jlc_documentoaccountid.DataValue[0].id != null || crmForm.all.jlc_documentocontactid.DataValue[0].id != null) {
if (crmForm.all.jlc_documentoaccountid.DataValue[0].id != null) {
clienteId = crmForm.all.jlc_documentoaccountid.DataValue[0].id;
}
else {
clienteId = crmForm.all.jlc_documentocontactid.DataValue[0].id;
}
authenticationHeader = GenerateAuthenticationHeader();
//Prepare the SOAP message.
xml = "<?xml version='1.0' encoding='utf-8'?>" +
"<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'" +
" xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" +
" xmlns:xsd='http://www.w3.org/2001/XMLSchema'>" +
authenticationHeader +
"<soap:Body>" +
"<Fetch xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>" +
"<fetchXml><fetch mapping='logical'>" +
"<entity name='jlc_documento'>" +
"<filter type='or'>" +
"<condition attribute='jlc_documentoaccountid' operator='eq' value='" + clienteId + "'/>" +
"<condition attribute='jlc_documentocontactid' operator='eq' value='" + clienteId + "'/>" +
"</filter>" +
"</entity>" +
"</fetch></fetchXml>" +
"</Fetch>" +
"</soap:Body>" +
"</soap:Envelope>";
//Prepare the xmlHttpObject and send the request.
var xHReq = new ActiveXObject("Msxml2.XMLHTTP");
xHReq.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
xHReq.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Fetch");
xHReq.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xHReq.setRequestHeader("Content-Length", xml.length);
xHReq.send(xml);
//Capture the result
var resultXml = xHReq.responseXML;
//Check for errors.
var errorCount = resultXml.selectNodes('//error').length;
if (errorCount != 0) {
var msg = resultXml.selectSingleNode('//description').nodeTypedValue;
alert(msg);
}
//Process and display the results.
else {
//Capture the result and UnEncode it.
var resultSet = new String();
resultSet = resultXml.text;
resultSet.replace('<', '<');
resultSet.replace('>', '>');
// Create an XML document that you can parse.
var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
oXmlDoc.async = false;
// Load the XML document that has the UnEncoded results.
oXmlDoc.loadXML(resultSet);
//Display the results.
var results = oXmlDoc.getElementsByTagName('result');
nroRegistros = results.length;
if (nroRegistros == 10) {
alert("Se han registrado el número máximo de asociaciones");
window.close();
}
}
}
}
miércoles, 8 de septiembre de 2010
Ejecutar OnChange sin perder el foco
El evento OnChange de los campos de un formulario de Dync CRM tienen una peculariedad ... el evento se ejecuta cuando se pierde el foco. Este detalle podría crearnos ciertas dificultades para lo cual tendríamos que forzar a que dicho evento se ejecute inmediatamente después de cambiar su valor y no después que se haya perdido el foco del campo. Veamos el siguiente ejemplo:
ESCENARIO
Se tiene el campo checkbox "valor" y un campo de caja de texto "descripcion". El campo "descripcion" deberá estar deshabilitado a menos que se haya seleccionado el campo "valor".
SOLUCION FALLIDA
En el evento OnChange de "valor" colocar:
if(crmForm.all.valor.DataValue==true) crmForm.all.descripcion.Disabled=false;
La opción arriba mencionda funciona sí y sólo sí luego de haber colocado un check en el campo "valor" se da un clic en cualquier otra parte del formulario o si se presiona la tecla TAB.
Para lograr nuestro cometido emplearemos "attachEvent" y que se ejecute en el momento que se haga check en "valor"
SOLUCION CORRECTA
En el evento OnLoad del formulario colocaremos lo siguiente
Para lograr nuestro cometido emplearemos "attachEvent" y que se ejecute en el momento que se haga check en "valor"
SOLUCION CORRECTA
En el evento OnLoad del formulario colocaremos lo siguiente
function MiFuncion(){
if(crmForm.all.valor.DataValue==true)
crmForm.all.descripcion.Disabled=false;
}
crmForm.all.valor.attachEvent('onclick',MiFuncion);
Suscribirse a:
Entradas (Atom)








