Servicios Web Microsoft CRM 3.0 (2)

Hola de nuevo. Lo primero pedir perdón por el retraso en publicar la segunda parte de esta serie de post sobre los servicios web de Microsoft Dynamics CRM, pero más vale tarde que nunca no?


 


Si revisáis el post anterior, habíamos dejado todo preparado para utilizar el CRM que teníamos instalado en un Virtual PC. Bien, pues vamos a ver como trabajar con el Servicio Web del CRM desde Visual Studio.


 


Los Servicios Web del CRM


 


Antes de nada vamos a aclarar un concepto sobre los servicios web de Microsoft Dynamics CRM 3.0. Si revisáis la documentación incluida en el SDK del CRM, una lectura recomendada que comentaremos más en profundidad otro día, veréis que disponemos en realidad de dos servicios web:


 


CrmService: Básicamente, proporciona acceso fuertemente tipado a todas las entidades de Microsoft CRM, incluidas las personalizaciones. Y permite la ejecución de todas las operaciones soportadas en el CRM.


 


MetadaService: Este servicio proporciona métodos para acceder a los metadatos del CRM, y al igual que el anterior, mediante un acceso fuertemente tipado.


 


Lo del acceso fuertemente tipado es una gran innovación con respecto a la versión anterior. Ahora podemos utilizar clases del CRM en nuestro propio código, gracias al WSDL del servicio web. Mientras que antes, teníamos que utilizar el XML que siempre es algo más engorroso. Algo que seguimos teniendo que hacer en los Call Outs, aunque este es otro tema que ya veremos.


 


Desde mi punto de vista lo mejor será empezar a probar los servicios web con el CrmService. Ya que de momento, es preferible ver como crear y manejar entidades del CRM desde nuestro código a liarnos con los metadatos. Además este servicio web, como veremos, nos abre multitud de posibilidades para integrar aplicaciones y otras funcionalidades.


 


El Servicio Web CrmService


 


Este servicio web, como ya vimos, nos permite acceder a las entidades del CRM y ejecutar operaciones del sistema. Está formado por una serie de 5 métodos comunes a todas las entidades de negocio del CRM, y por 2 métodos adicionales de consulta y ejecución de operaciones. Los métodos comunes son:


 



  • Create: Crea una instancia de una entidad

  • Delete: Elimina una instancia de una entidad

  • Update: Actualiza una instancia de una entidad

  • Retrieve: Recupera una instancia de una entidad

  • RetrieveMultiple: Obtiene una colección de instancia según unas condiciones específicas.

 


Los otros 2 métodos son:


 



  • Fetch: Que permite hacer consultas con el lenguaje FetchXML sobre múltiples entidades, devolviendo los resultados en XML.

  • Execute: Que permite, mediante distintos tipos de comandos/mensajes, ejecutar prácticamente cualquier operación en el CRM. Incluidas las de los métodos comunes.

 


Bueno, ya basta de rollo por hoy. Vamos a centrarnos en el primer método del servicio web, Create. Y vamos a ver una muestra de cómo utilizarlo como utilizarlo.


 


Utilizando el CrmService desde Visual Studio


 


Lo primero será crear un nuevo proyecto de consola, por ejemplo, en Visual Studio. Podéis utilizar el lenguaje que más os guste, aunque yo voy a utilizar C# por que me encuentro más cómodo con el. Una vez hecho esto tendremos un programa de consola limpio como una patena, es decir con un método main en blanco.


 


Ahora lo primero será añadir una nueva referencia web en nuestro proyecto. Esta referencia web será la que nos permita generar todas las clases Proxy necesarias para utilizar los servicios web de Microsoft CRM 3.0. Aunque, como la mayoría sabéis, también es posible generar los proxies mediante herramientas como WSDL.EXE.


 


En el cuadro de diálogo de añadir referencia web introducimos la dirección de nuestro servicio web, la misma que utilizamos en el post anterior para comprobar que teníamos acceso por red. En mi caso, la URL era:


 


http://192.168.2.2:5555/mscrmservices/2006/crmservice.asmx


 


Además le asignamos un nombre a la referencia como CRMService, por ejemplo. Y pulsamos AddReference.


 


 


 


Una vez hecho esto se recupera el WSDL del Servicio Web y se generan todas las clases Proxy necesarias, lo que no va a permitir el acceso tipado a las entidades del CRM. Además, gracias a que el WSDL se genera dinámicamente, cualquier personalización sobre entidades o atributos está reflejada en el, incluso las nuevas entidades añadidas por nosotros.


 


Si queréis, podéis utiliza el explorador de objetos para curiosear las clases que ha generado esto, están en el espacio de nombres <nombre del proyecto>.CRMService. Pero ya os adelanto que hay un montón, por que pensad que ahora disponemos de todas las entidades del CRM y sus tipos de datos, de todas las operaciones del CRM, y del Proxy del Servicio Web. Ahí es nada.


 


Bueno, vamos a crear una nueva instancia del Servicio Web. Crear un nuevo objeto cuenta. Y llamar al método create del servicio con el nuevo objeto para ver sus efectos en el CRM. El código vendría siendo algo tal que así:


 


using System;


using ConsoleApplication2.CRMService;


 


namespace ConsoleApplication2


{


    class Program


    {


        static void Main(string[] args)


        {


            CrmService servicioWeb = new CrmService();


 


            account cuentaNueva = new account();


            cuentaNueva.name = “Cuenta del Servicio Web”;


            Guid idCuenta = servicioWeb.Create(cuentaNueva);


 


            Console.WriteLine(“Creada cuenta con guid : {0}”, idCuenta);


            Console.ReadKey();


        }


    }


}


 


Fijaos que el método Create acepta cualquier tipo de entidad de negocio del CRM. Y además devuelve el guid que el sistema le ha asignado al objeto que acabamos de crear.


 


Y el resultado que obtendremos será algo tal que así:


 


Exception – The request failed with HTTP status 401: Unauthorized.


 


¿Que ha pasado? Pues que en ningún sitio le hemos indicado quien somos, y como no estamos trabajando como ningún usuario de Windows autorizado a crear cuentas en el CRM la operación ha fallado. Recordad que tanto la aplicación web del CRM como los servicios web utilizan la autenticación de Windows.


 


Para solucionarlo basta con incluir estas líneas antes de llamar al servicio web.


 


servicioWeb.Credentials =


new System.Net.NetworkCredential(“crmadmin”, “Pa$$w0rd”, “AdvWorks.msft”);


 


Con lo que indicamos que queremos llamar al servicio web del CRM, utilizando un objeto de credenciales de red, con el usuario crmadmin, el password del usuario, y el dominio advworks.msft. Cada uno que sustituya esto por un usuario con permiso para crear cuentas en el CRM. En un futuro post veremos más a fondo como impersonar las llamadas a los servicios web, y que variables están implicadas en la identificación de los usuarios que realizan las operaciones.


 


Ahora la salida de nuestro programilla será


 


Creada cuenta con guid : b0149e1e-f1db-da11-8b06-0003ff642152


 


Y si vamos abrimos el cliente de Microsoft Dynamics CRM 3.0, veremos como aparece una nueva cuenta con el nombre que le hemos indicado.


 


Bueno por hoy lo dejamos, aquí. Intentad practicar un poco más con este método del servicio web. Probad a inicializar más propiedades en la cuenta antes de crearla… etc. Aquí tenéis los comentarios para cualquier duda, consulta,  sugerencia, queja…


 


Saludos, Marco

3 comentarios en “Servicios Web Microsoft CRM 3.0 (2)”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *