CRM WebService Error: Only one usage of each socket address (protocol/network address/port) is normally permitted
Este error se presenta cuando se hacen aplicaciones que utilizan los WebServices de Dynamics CRM, y en realidad es un error que puede ocurrir con aplicaciones que utilizan WebServices en general, en situaciones que se requiere carga masiva de datos.
Esto hace que los settings por defecto IIS no sean suficientes, y tendremos el mensaje “Only one usage of each socket address (protocol/network address/port) is normally permitted (typically under load).”
Esto sucede en cargas grandes de datos, al abrir y cerrar conexiones. Al cerrar la conexión, la misma entra en un estado de espera de 240 segundos (TIME_WAIT).
El problema ocurre porque por default, se usan los puertos 1024 a 5000, lo que da 3976 puertos para utilizar. Al estar realizando múltiples inserciones por segundo (lo cual significa múltiples llamados a los webservices, y cierres de conexión por segundo, los puertos se acaban rápidamente.
Pasos para solucionar el problema:
Esto requiere cambiar (o adicionar) 2 llaves en el registry. Como es usual se recomienda precaución al modificar el registry. Realice este procedimiento bajo su propia responsabilidad.
1. Incremente el rango de puertos, hasta un valor máximo de 65534. (Puede buscar otro valor de ajuste para su caso en particular).
o Use Regedit, y edite HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort (si la llave no existe, haga una nueva como DWORD )
o Ajuste el valor como DECIMAL a 65534, u otro valor de ajuste que considere conveniente para su caso.
2. Reduzca el TIME_WAIT de las conexiones, para que los puertos sean reciclados más pronto:
o Use Regedit, y editar HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\TCPTimedWaitDelay (si no existe, crearla como DWORD )
o Ajuste el valor a 30 cómo decimal.
Referencia de Entidades y Campos Dynamics CRM 4
Cuándo estamos programando JavaScript para los eventos OnLoad, OnChange, o los WebServices, se hace necesario tener a mano una lista con los nombres de entidades y sus respectivos campos. Esto se hace difícil si tenemos que estarvisitando la sección de Settings / Customization, pues se pierde mucho tiempo.
La solución, utilizar este link provisto por el Dynamics
http://servidor:puerto/sdk/list.aspx
Ese link muestra un listado de todos las entidades, y se puede ir al detalle, donde se muestran los atributos, sus respectivos tipos y relaciones.
Color de Campos “Read Only”
Al deshabilitar un campo en Dynamics CRM desde la propiedad Read Only en Personalización de formularios, el formato de la hoja de estilo (css) cambia el color de los campos o controles deshabilitados a gris palido. Si fuese necesario modificar el color para hacer el campo más visible o agradable tenemos dos opciones:
1. Modificar la hoja de estilo de controles que se encuentra en la carpeta /_forms/controls/controls.css.aspx (que de paso es una modificación no “soportada”).
2. Utilizar JavaScript en el evento OnLoad para deshabiliar el control y cambiar suspropiedades de formato, en lugar de utilizar la propiedad Read Only de personalización.
Ejemplo caso 1, hoja de estilo, cambiar los códigos de color a algo más visible, experimentando con los valores de color: (los colores mostrados en los valores numéricos son los colores actuales en la hoja de estilo):
INPUT.ms-crm-ReadOnly,
TEXTAREA.ms-crm-ReadOnly,
DIV.ms-crm-ReadOnly,
SPAN.ms-crm-ReadOnly
{
background-color: #EAF3FF;
color: #000000;
border-color: #C5C5C5;
}
Ejemplo caso 2, con JavaScript, deshabilitando el campo (sin utilizar la propiedad Read Only en personalización) y luego modificando sus propiedades:
crmForm.all.<NombreCampo>.Disabled = true; //Deshabilita el campo <NombreCampo>
crmForm.all.<NombreCampo>.style.textColor= “#000000″;
crmForm.all.<NombreCampo>.style.borderColor= “#ff0000“;
crmForm.all.<NombreCampo>.style.backgroundColor = “#c0c0c0“;
Los códigos del ejemplo son para referencia, por lo que deberá seleccionar colores que se ajusten al gusto del cliente, y esta herramienta le puede ayudar, solo copie el valor HEX generado:
Qué es un CRM “On Premise” y qué es “On Demand”
Los conceptos de CRM On Premise and CRM On Demand no son nuevos, pero igual no está de más una rápida explicación sobre él significado de ambos términos, pues sos dos estrategias diferentes, que pueden impactar positiva o negativamente en nuestros ambientes de TI y de negocio.
Al inicio de un proyecto de CRM, posiblemente será un buen momento para revisar cómo está todo en casa, pues los proyectos de CRM tienen la particularidad de sacar a la luz muchas cosas que no estan bién a nivel técnico de TI y de negocios.
On Premise: Lo que hace la mayoría de las empresas en América Latina (y el mundo). Contratan a un proveedor de soluciones de software, idealmente certificado y con experiencia en la aplicación a adquirir, que se encarga de la instalación e implementación del software de CRM, pues no siempre se cuenta con personal experimentado para arrancar el proyecto.
El software es adquirido en su totalidad, licencia de servidor, de cliente, y contrato de mantenimiento de software/servicios, más: licencias de sistema operativo de servidor, licencias de base de datos, hardware para los nuevos servidores, sean propios o alquilados (hey…a nadie le sobran servidores para los proyectos de software…). La empresa dueña del flamante CRM, será la responsable de actualizar, respaldar y gestionar todo lo relacionado al CRM.
On Demand: Aquí no compramos nada, hacemos uso del software cómo un servicio, a ver, algo así: este més hay que pagar el recibo del agua, la electricidad, Internet, salarios, y también… el CRM. Nota: Si no paga su recibo mensual de CRM…adivinó…tampoco tendrá acceso al mismo, al menos no normalmente. Ya en serio, en este modelo, su empresa contrata un servicio por cuotas mensuales o anuales a un tercero, que brindará toda la plataforma de software, hardware y administración de TI para que usted haga uso del CRM mediante acceso por Internet. Ventaja, usted no tiene que comprar, mantener y gestionar software/ hardware.
Los upgrades o actualizaciones son “gratis” pues forman parte del servicio. Sus datos reciden en un servidor propiedad de la empresa que ofrece el servicio, y que probablemente (?) contará con personal, condiciones de seguridad y disponibilidad que no se pueden replicar a bajo costo en su propia empresa. Baste decir que dichos proveedores de servicios (al menos en Estados Unidos) , cumplen con normas muy estrictas, y utilizan impresionantes DataCenters. (Ese tema da para otro post).
En este modelo es sumamente importante contar con buen ancho de banda para Internet, y de ser posible contar con dos enlaces a proveedores distintos, para tener acceso Multi-Wan, pues si se cae la conectividad a Internet, no se puede usar la aplicación. Por otro lado, su aplicacción se puede acceder desde cualquier lugar del mundo, vía Internet Explorer o FireFox (verifique con su proveedor los navegadores soportados…)
Algunos CRM ON Premise, con los que he trabajado:
• Microsoft Dynamics CRM
• Pivotal ePower
• SugarCRM
• Numara FootPrints (no es un CRM, pero permite crear funcionalidad similar.)
• SalesLogix
Y algunos CRM On Demand:
• SalesForce
• SalesNet
• NetSuite
• Microsoft Dynamics CRM (si, lo notó, también Microsoft tiene ambos mundos…)
• SugarCRM
• Numara FootPrints
Probablemente notó que algunos fabricantes tienen disponibles ambos mundos, así que el tema de cual modelo debe escoger, depende de la estrategia de TI y presupuesto, entre otras variables.
Hoy en día comparar aplicaciones de CRM es algo cada vez más difícil, las diferencias son borrosas, pues todos tienen más o menos los mismos módulos (Ventas, Mercadeo y Servicio) y funcionalidades similares, idiomas, y tecnologías subyacentes.
Por ejemplo Numara Footprints corre en MySQL, en Oracle y Microsoft SQL Server. Otros como Pivotal corren en Oracle y Microsoft SQL Server. Todos corren en Internet Explorer, algunos en FireFox..etc…
Definitivamente, es necesaria una evaluación financiera (acorde al tamaño y naturaleza de su empresa), por lo que montar unas tablitas en Excel no está de más.
Una mirada al Dynamics CRM 4.0 SDK
Algunas veces no ponemos atención a los archivos que contiene el SDK de Dynamics, pero dando una buena mirada a los folders, encontraremos muchos ejemplos útiles de código para el servidor y para el cliente, así como para crear funcionalidad adicional para los Workflows. Si el Workflow no puede hacer lo que usted quiere, ayúdelo construyendo un Custom Assembly. Este SDK se baja del sitio de downloads de Microsoft, y a la fecha está disponible en idioma Inglés y Japonés (Domo Arigato…Mr. Gates)
Esta es una lista de los contenidos de los archivos del SDK:
|
|
|
|
Bin\Microsoft.Crm.Sdk.dll |
Tipos y métodos para desarrollar plug-ins y workflows |
|
Bin\Microsoft.Crm.SdkTypeProxy.dll |
Tipos y m étodos para desarrollar plug-ins y workflows |
|
Bin\msidcrl40.dll |
Tipos y métodos requeridos para autenticación en Windows Live |
| Client\ | Ejemplos de código JavaScript para programación de cliente, como eventos OnLoad y OnChange |
| Server\ | Ejemplos de código para programación del lado del server, en C# y VB, bastantes ejemplos. |
|
Tools\ |
Aquí está el pluggindeveloper y el plugginregistration, para la creación de Custom Assemblys que podemos utilizar en los Workflows. |
|
Walkthroughs\ |
El código ejemplo que se utiliza con el SDK Help |
| WSDL\ | Este archivo se utiliza con el Microsoft Dynamics CRM Online. |
| CrmSdk4.chm | Archivo de ayuda para el SDK, el que realmente nos interesa pues contiene toda la documentación del SDK |
| LicenseTerms.doc | Los típicos téminos de Licencia de Microsoft. |
| SDKReadme.htm | Archivo que describe la información aquí expuesta. |
| CRM4 UX Design Guide.pdf | Guía para construir interfaces gráficas, que sean consistentes con el diseño de Microsoft Dynamics CRM 4.0, asi nuestras páginas se verán iguales a las del CRM. |
Propiedades de uso común de los Campos accesibles desde javascript
Cuando realizamos scripting de eventos en Dynamics CRM, podemos utilizar las siguientes propiedades y métodos de los campos para interactuar con ellos:
{Campo}.DataValue Valido para todos los campos. Nota: Asignar un valor a un campo no dispara el evento OnChange.
Field}.Disabled Booleano para activar o desactivar un campo.
Ejemplo:
var oField = crmForm.all.SOME_FIELD_ID;
// Toggle the disbled state of the field
oField.Disabled = !oField.Disabled;
{Field}.IsDirty Propiedad booleana que indica si un campo fue modificado (true).
Ejemplo:
var oField = crmForm.all.SOME_FIELD_ID;
if (oField.IsDirty)
{
alert("El valor del campo ha cambiado.");
}
else
{
alert("El valor del campo no ha cambiado.");
}
Método {Field}.FireOnChange() dispara el evento OnChange para el campo.
Ejemplo
crmForm.all.Algun_Campo_ID.FireOnChange();
Realizar operaciones matemáticas con JavaScript
Para realizar operaciones matemáticas utilizando JavaScript, y evitar problemas con campos nulos, es buena idea utilizar el operador condicional de JavaScript:
Sintaxis: variablename=(condition)?value1:value2
Esto nos evitará problemas, al validar los campos nulos antes utilizarlos en operaciones como sumas, de lo contrario se producirá un error al ejecutar el script.
Por ejemplo, para sumar dos números, usamos la propiedad DataValue que permite leer o asignar un valor a un campo:
var campo1 = crmForm.all.micampocrm1.DataValue;
var campo2 = crmForm.all.micampocrm1.DataValue;
//Inicializamos en 0 si el campo es null (esta vacío)
valor1 = (valor1 == null) ? 0:campo1 ;
valor2 = (valor2 == null) ? 0 : campo2 ;
//Ejecutamos la operación
crmForm.all.micamposuma.DataValue = valor1 + valor2;
En este caso, si ambos campos están vacios, la suma no producirá error, y el campo micamposuma será =0
Algunos tips para principiantes
Estos son algunos tips para usuarios principiantes de Dynamics CRM.
Ver el Calendario.
- Haga click en el botón Area de Trabajo (Workplace) en el panel de navegación (el panel de botones de la izquierda).
- En la parte de arriba, en Mi área de trabajo, haga click en Calendario.
Completar una Actividad.
- Haga click en el botón Area de Trabajo.
- Haga click en Mi área de trabajo, haga click en Actividades
- Seleccione en la venta o área principal de trabajo la tarea que desea completar, haciendo doble click sobre la actividad.
- En el formulario de actividad, seleccione el tab de Notas, y cree una nota.
- Finalmente, haga click en el botón Guardar Como Completado (es que tiene un diskette azul con un check).
Crear una nueva cuenta o contacto.
- Estando en cualquier área (ventas, mercadeo o servicio), seleccione Cuentas o Contatos en el panel de navegación (según sea el caso).
- En la ventana principal (área donde se muestran los registros), notará un botón llamado Nuevo, haga click en él.
- Aparece un formulario, donde podrá registrar la información de su contacto o cuenta.
- Al finalizar de llenar la información con la que cuente, recuerde hacer click en Guardar y Cerrar.
¿Cómo ocultar campos en Dynamics CRM?
Algunas veces es necesario ocultar campos en los formularios de Dynamics CRM. Esto puede lograrse utilizando javascript de dos formas:
- En el evento OnLoad de las propiedades del formulario (Form Properties) ocultamos cada campo.
- En el mismo evento Onload, ocultamos un TAB, al cuál hemos movido todos los campos que deseamos hacer invisibles.
Así, para el primer caso, tenemos que agregar dos líneas de código por cada campo a ocultar:
crmForm.all.nombrecampo_d.style.display = ‘hidden’;
crmForm.all.nombrecampo_c.style.display = ‘hidden’;
Nota: debe adicionar _d y _c al nombre de esquema del campo, _d significa el campo de datos y _c es el “caption”.
Y para el segundo caso, donde hemos creado un tab llamado “Ocultos”, y hemos movido los campos que queremos hacer invisibles, agregamos está línea de javascript
tab4Tab.style.visibility = ‘hidden’;
Porqué tab4Tab?, esto se debe a que generalmente los tabs del form empiezan con indice 0 así:
tab0Tab = General Tab
tab1Tab = Details Tab
tab2Tab = Administration
tab3Tab = Notes
Esta opción es más útil, y se puede implementar de forma estandar en todos los forms. Recuerde que solo es posible utilizar 8 tabs por formulario, así que debería poder utilizar está técnica de ocultar con tab, siempre y cuando pueda disponer de un tab para ocultar. De lo contrario…de regreso al caso 1.
Así de fácil.
Nota: Las técnicas aquí propuestas deben ser usadas “bajo su propio riesgo”, y no asumimos ninguna responsabilidad por su uso y resultados.
Microsoft Dynamics CRM 4.0 en múltiples idiomas?
Si desea instalar la versión en Inglés (u otro idioma base) de Microsoft Dynamics CRM, y a la vez proveer otro u otros idiomas (de entre 22 posibles) a sus usuarios, como español o alemán por ejemplo, es posible lograr esto con los “Multilingual User Interface” (MUI) packs, que el administrador del CRM puede instalar. Si quiere ver el video haga click aquí http://www.zonacrm.com/wpzonacrm/?page_id=52
Los MUI Packs se pueden conseguir en el sitio de “dowloads” de microsoft, y una vez implementados la aplicación muestra el idioma que el usuario ha seleccionado. Nota: Puede realizar la búsqueda y bajarlos pack desde el sitio de downloads de microsoft, utilize Languaje Pack en su criterio de búsqueda.
Nota: Existen dos tipos de paquetes, para cada idioma:
- Para el sistema, que modifica los textos, etiquetas.etc..
- Para el Help, que modifica el idioma de la ayuda.
Cada MUI pack debe ser instalado de forma independiente. Es importante notar que el idioma del CRM no está definido por el MS Internet Explorer o los “settings regionales” en el Panel de Control, y es el usuario que puede cambiar el idioma del sistema.
Para cambiar el idioma, una vez instalado el Language Pack en el idioma deseado, los usuarios del sistema pueden seleccionar el link de “Personalizar Espacio de Trabajo”, y seleccionar el tab “Languages”. Ahi podrá seleccionar tanto el idioma del sistema como también el de la ayuda.
Nota: Las técnicas aquí propuestas deben ser usadas “bajo su propio riesgo”, y no asumimos ninguna responsabilidad por su uso y resultados.
