none
Tratamiento de Registros Duplicados RRS feed

  • Pregunta

  • Hola Amigos, estoy introduciendome en el CRM 4, necesito programar algo en el momento de hacer OnSave en la carga de un nuevo registro. Necesito controlar que ese registro que se intenta agregar ya no existe en la base dedatos sql server. El problema es que con la deteccion de duplicados que provee CRM me da la opcion para igualmente guardar el registro por mas que este repetido, es decir detecta el duplicado pero no evita que lo guarde igual y esto no deberia pasar. Estuve mirando y ese control de podria hacer con un servicio, crear un servicio o algo asi. Me podrian ayudar?

    Gracias!
    jueves, 10 de septiembre de 2009 19:42

Respuestas

  • Hola,

    La solución de crear un servicio web externo para comprobar dùplicados y utilizar JavaScript en el formulario para comprobarlo antes de guardar daría resultado, y te permitiría hacer cosas como automáticamente lanzar en una nueva ventana el posible dupllicado.

    Sin embargo, la forma más fácil de implementar este funcionalidad sería un pre-plugin síncrono en el evento Create de la entidad. En el plug-in recibirías los valores para el nuevo registro a punto de ser creado y podrías realizar una búsqueda en CRM usando los Web Services de duplicados. En caso de encontrar alguno podrías bloquear la operación lanzando un excepción con un mensaje para el usuario.

    La gran ventaja de usar plug-ins es que estos se aplicarán no sólo para la interfaz de usuario, si no también en importaciones y todo tipo de operaciones. Sin embargo, tienes más limitada la interación con el usuario ya que sólo puedes retornar un simple mensaje de error.

    En cualquier caso, ten en cuenta de que vas a hacer bastantes consultas en CRM para buscar duplicados cada vez que crees un registro. Esto puede tener un impacto notable en el rendimiento. Te recomiendo revisar los white papers sobre optimización y crear lon índices adecuados en las tablas.

    Un saludo
    Marco Amoedo - http://marcoamoedo.com
    jueves, 1 de octubre de 2009 7:51
    Moderador
  • Hola Amigos, ya lo solucione!
    Lo hice copiando los archivos microsoft.crm.sdk.dll y microsoft.crm.sdktypeproxy.dll en donde estaba ubicado el archivo PluginRegistration, porque no los encontraba ese era el problema.

    Muchas Gracias!
    Santiago123
    jueves, 15 de octubre de 2009 13:20

Todas las respuestas

  • Hola espero que esto te pueda ayudar aquí muestran como acceder a un servicio web con códijo javascript. http://geeks.ms/blogs/marco/archive/2007/01/08/c-mo-implementar-bloqueos-de-registro-en-crm-3-0-servicios-web-jscript.aspx

    Saludos
    viernes, 11 de septiembre de 2009 15:56
  • Hola Santiago:

    Lo que puedes hacer es lo siguiente:

    Crear un servicio web que lo que haga que es recibir un parámetro ( valor que diferencia a un registro del otro por ejemplo en la entidad contacto puede ser el DNI del contacto).

    Dentro de la lógica de tu servicio web ...  deberías consultar dentro de la tabla contactos si ya existe un DNI con el valor que se ha enviado.

    Si si encuentra puedes activar un flag con el valor de true. Por lo que tu servicio web te deberia de retornar un booleano.


    Dentro de tu codigo JavaScript en el evento Onsave preguntas por el valor que te devuelve el servicio Web ( la forma de como llamar al servicio web creo que ya te la han mostrado en el post anterior).

    Lo siguiente que deberias de hacer es preguntar SI el valor que te devuelve el servicio web es verdadero, si es verdadero significa que el registro ya se encuentra ingresado en la base de datos del crm.

    Le pudieras mostrar un alert(" Ya existe un DNI ingresado , por favor buscar el registro en la entidad contactos o de lo contrario ingrese un DNI nuevo)

    Seguido de eso en tu evento JS


    crmForm.all.new_dni.SetFocus();

    // Darle el focus.

     

    event.returnValue = false; // Cancelar la operacion guardar.

     

    return false;


    **********************************************************************************

    Otra opción sería realizarlo a traves de un plugin de CRM , donde la lógica a desarrollar sería parecida a la descrita líneas arriba. ( El decidir porque opción irse involucra hacer un análisis del esfuerzo que demandaría realizar este requerimiento, temas de performance ( tiempos de respuesta) , disponibilidad de recursos de desarrollo entre otros)

    Bueno como otra alternativa que te daría y lo que siempre aconsejo es usar la funcionalidad nativa de la herramienta ( hasta donde se pueda), si bien es cierto tu puedes publicar reglas de detección de duplicados pero a pesar de que te detectan el duplicado te permite guardar el registro , también puedes crear trabajos de detección de duplicados que se ejecuten dado un determinado periodo de tiempo sobre registros especificos ( x ejemplo los creados en esta semana) y enviarlos a través de correo electrónico a un usuario de CRM, este usuario lo que haría es hacer el mantenimiento respectivo a estos registros.

    Parte de la capacitación que debería de realizarse al usuario final , debería de involucrar capacitarlo en el uso de búsqueda de registros activos ( Búsqueda rápida ) e indicarles que antes de crear un registro primero busquen que el registro no exista en la BBDD del CRM.  Claro este es mas un tema procedimental ... lo pueden hacer como no lo pueden hacer , pero si en caso no lo hicieran tenemos diversar alternativas de solución como las que te plantee arriba, estoy seguro deben de haber mucho más con lógicas mas interesantes no lo dudo, pero bueno espero haberte ayudado.


    Un abrazo 


    Jimmy Larrauri

    Consultor Senior Microsoft Dynamics CRM

    Jimmy Larrauri
    miércoles, 16 de septiembre de 2009 16:23
    Moderador
  • Hola,

    La solución de crear un servicio web externo para comprobar dùplicados y utilizar JavaScript en el formulario para comprobarlo antes de guardar daría resultado, y te permitiría hacer cosas como automáticamente lanzar en una nueva ventana el posible dupllicado.

    Sin embargo, la forma más fácil de implementar este funcionalidad sería un pre-plugin síncrono en el evento Create de la entidad. En el plug-in recibirías los valores para el nuevo registro a punto de ser creado y podrías realizar una búsqueda en CRM usando los Web Services de duplicados. En caso de encontrar alguno podrías bloquear la operación lanzando un excepción con un mensaje para el usuario.

    La gran ventaja de usar plug-ins es que estos se aplicarán no sólo para la interfaz de usuario, si no también en importaciones y todo tipo de operaciones. Sin embargo, tienes más limitada la interación con el usuario ya que sólo puedes retornar un simple mensaje de error.

    En cualquier caso, ten en cuenta de que vas a hacer bastantes consultas en CRM para buscar duplicados cada vez que crees un registro. Esto puede tener un impacto notable en el rendimiento. Te recomiendo revisar los white papers sobre optimización y crear lon índices adecuados en las tablas.

    Un saludo
    Marco Amoedo - http://marcoamoedo.com
    jueves, 1 de octubre de 2009 7:51
    Moderador
  • Hola chicos, muchisimas gracias todavia estoy a las vueltas con este tema. Trate de hacer lo que me pasaste en el link, lo copie y setee mis valores pero no me funciona. Pense que hacer una consulta sobre la base seria mejor y mas sencillo pero todavia no logro hacer nada!!!. Ahora voy a cambiar todo y voy a investigar como se hace un plugins para el CRM, creo que se hace en el Visual Studio no?

    Saludos
    Santiago.
    miércoles, 7 de octubre de 2009 19:21
  • Hola Santiago123


    Pues si, los plugin los haces en el VS.NET, y es muy sencillo de hacerlos, 


    En este link te explican como hacer los plugin, tambien puedes encontrar informacion  mas detallada en el sdk y ejemplos tanto de plugin como de workflow.


    Ejemplo : http://msdn.microsoft.com/en-us/library/dd393295.aspx

    SDK : http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&displaylang=en


    Tambien te dejo el link para el registration tool sin contar que esto lo encuentras tambien el el sdk


    http://code.msdn.microsoft.com/crmplugin


    aca esta el link para los template de los plugin


    http://code.msdn.microsoft.com/crmplugintemplate


    Y bueno con estas herramientas ya creo que puedes darle duro a los plugin  


    jueves, 8 de octubre de 2009 7:50
  • Hola amigos, ya hice el plugin en el VS.NET, pero mi problema es que al correr la herramienta para registrar el plugin Plugin Registration Tool se conecta bien al servidor del crm pero no me muestra las opciones que figuran en la pagina de microsoft como por ejemplo "Register" "Import/Export", ni siquiera ejecutando la herramienta en el servidor mismo. A que se puede deber este problema?. No me arroja ningun error simplemente no me muestra esta ventana para poder registrar el plugin en el servidor de CRM.
    Tambien las direcciones que muesta debajo: CrmService URL y MetaDataService URL estan ok, porque las copie y pegue en el iexplorer y abrieron los archivos ok. Es medio raro.


    Gracias
    Santiago.
    miércoles, 14 de octubre de 2009 12:19
  • Hola Amigos, ya lo hice funcionar! pero a la hora de registrar el plugin me arroja el siguiente error:

    Unhandled Exception: System.IO.FileNotFoundException: No se puede cargar el archivo o ensamblado 'Microsoft.Crm.Sdk, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ni una de sus dependencias. El sistema no puede hallar el archivo especificado.
       en System.Reflection.Assembly._GetExportedTypes()
       en System.Reflection.Assembly.GetExportedTypes()
       en PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path)
       en PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path)
       en PluginRegistrationTool.RegistrationHelper.RetrievePluginsFromAssembly(String pathToAssembly)
       en PluginRegistrationTool.PluginRegistrationForm.btnLoadAssembly_Click(Object sender, EventArgs e)

    Estoy usando el Microsoft.Crm.Sdk que viene en el cd de instalacion del crm.


    Saludos
    Santiago123
    miércoles, 14 de octubre de 2009 13:12
  • Hola Amigos, ya lo solucione!
    Lo hice copiando los archivos microsoft.crm.sdk.dll y microsoft.crm.sdktypeproxy.dll en donde estaba ubicado el archivo PluginRegistration, porque no los encontraba ese era el problema.

    Muchas Gracias!
    Santiago123
    jueves, 15 de octubre de 2009 13:20
  • Hola Santiago,

    Estoy intentando realizar lo mismo que planteaste sobre el borrado de duplicados pero no he podido resolverlo.

    Serías tan amable de publicar tu código con variables genéricas? (Por si no quieres publicar tu código tal cual lo tienes funcionando)

    Muchas gracias.

    Saludos cordiales.

    --

    Mauro D. Gioino

    martes, 21 de agosto de 2012 15:17