martes, 29 de enero de 2013

Conociendo “Polaris” (Update Rollup 12): Funcionalidad Cross Browser

Como todos saben y ya se ha publicado mucho, ha sido publicada la actualización conocida como “Polaris”.

Esta incluye muchas nuevas mejoras. He empezado a revisar las características y funcionalidades de la actualización, empezando por la posibilidad de acceso desde diferentes navegadores.

Ahora (por fin) podremos acceder a Dynamics CRM desde diferentes navegadores y no solo desde Internet Explorer.

El mapa de los navegadores soportados es el siguiente:

matrix

Creo que esta funcionalidad ha servido para que el equipo de desarrollo de Microsoft replantee todo el código de Javascript, ya que he estado probándolo en un CRM Online, y la verdad que me he quedado asombrado acerca de la agilidad y velocidad de funcionamiento. El rendimiento de los javascript se ha incrementado de forma notable, y la verdad que alguien que haya trabajado mucho con el CRM Online hasta el momento, notará fácilmente el cambio.

Las pruebas que he realizado son desde mi Windows 8 a una trial de CRM Online que tengo, desde IE10, Firefox y la experiencia es muy natural, funciona perfecto y no he encontrado ninguna incidencia:

image

Las versiones de los exploradores que he utilizado son:

image

image

image

No he conseguido un Ipad para probar, pero en cuanto pueda, publicaré mi experiencia.

Un saludo,

martes, 22 de enero de 2013

Libro “Microsoft Dynamics CRM 2011 Application Design”

Esta semana he estado leyendo un nuevo libro publicado por el MVP Mahender Pal que creo que es un diferente a muchos otros libros que haya leído de CRM hasta el momento.

Es un libro que cubre las típicas funcionalidades y posibilidades que nos ofrece Dynamics CRM 2011 (personalizaciones, procesos, plugins, aplicaciones externas, Web Resources y roles de seguridad), pero siempre enfocado en proyectos reales. En cada capítulo, plantea un proyecto real, y como con Dynamics CRM 2011 se cubren esas necesidades.

El enfoque es muy bueno porque permite entender bien como trasladar una serie de requerimientos de clientes a un proyecto real. Este libro es muy útil para gente que quiera expandir las ideas que tiene acerca de Dynamics CRM 2011 y sus posibilidades de aplicación.

El libro puede ser adquirido en Packt Publishing: http://www.packtpub.com/microsoft-dynamics-crm-2011-application-design/book

o en Amazon.com: http://www.amazon.com/dp/1849684561/?tag=packtpubli-20

miércoles, 16 de enero de 2013

Mostrar usuario actual (logueado) en un Lookup

Hola, a veces en los formularios de Dynamics CRM necesitamos recoger el usuario actual o logueado para rellenar algún lookup con ese valor.
Hoy voy a plantear un ejemplo completo de esto y de como se puede resolver.
Lo primero que hay que hacer es la creación de un campo de tipo Lookup con usuario en la entidad de Cuenta:
image
Luego lo añadimos al formulario de Cuenta:
image
Finalmente debemos añadir el siguiente javascript que se ejecute en el Load para actualizar el valor del campo:
   1: function setUsuarioActual()
   2: {
   3:    var user = Xrm.Page.context.getUserId(); 
   4:    var userId = user.substring(1,37);
   5:    var serverUrl = Xrm.Page.context.getServerUrl()
   6:     var ODATA_ENDPOINT = "/XRMServices/2011/OrganizationData.svc";
   7:     var ODATA_EntityCollection = "/SystemUserSet";
   8:     // Specify the ODATA Query
   9:     var ODATA_Query = "(guid\'" + userId + "')";
  10:     // Combine into the final URL
  11:     var ODATA_Final_url = serverUrl + ODATA_ENDPOINT + ODATA_EntityCollection + ODATA_Query;
  12:  
  13:     //Calls the REST endpoint to retrieve data
  14:     $.ajax({
  15:         type: "GET",
  16:         contentType: "application/json; charset=utf-8",
  17:         datatype: "json",
  18:         url: ODATA_Final_url,
  19:         beforeSend: function (XMLHttpRequest) {
  20:             XMLHttpRequest.setRequestHeader("Accept", "application/json");
  21:         },
  22:         success: function (data, textStatus, XmlHttpRequest) {
  23:            var userName = data.d.FullName;
  24:            Xrm.Page.getAttribute("new_usuarioactualid").setValue( [{id: userId , name: userName , entityType: "systemuser"}]);
  25:  
  26:            },
  27:         error: function (XmlHttpRequest, textStatus, errorThrown) {
  28:             alert('Error: '+ ODATA_Final_url);
  29:  
  30:             }
  31:     });
  32:  
  33:  
  34: }
 

Añadirlo en un web resource y llamar a ese método en el load:

image

Por cierto, para que este código funcione, hay que añadir también la librería de jQuery.
Finalmente al abrir el formulario de las Cuentas, el campo “Usuario Actual” se rellena como se ve:


image


Un abrazo!

martes, 15 de enero de 2013

Guía para el examen de certificación MB2-866 (Customization & Configuration)

5801EN_Microsoft%20Dynamics%20CRM%202011Customization%20and%20Configuration%20(MB2-866)%20Certification%20Guide_cov
Neil Benson (Twitter: @customery), un arquitecto de de Dynamics CRM y conocido MVP ha publicado un libro que sirve como guía para el examen de certificación de Dynamics CRM 2011 “MB2-866”.
Este libro es mas bien una guía que recorre todos los temas requeridos en el comentado examen de certificación. Recorre cada uno los elementos de configuración y personalización que dispone Dynamics CRM 2011 de forma fácil y sencilla, explicando paso a paso como trabajar con los mismos.
Si bien este libro está enfocado mas bien a personas que estén queriendo certificarse en este examen, también sirve para personas que ya lo tengan, o usuarios finales avanzados que quieran comprender todas las posibilidades y funcionalidades que Dynamics CRM 2011 ofrece.
Por último, contiene una gran cantidad de preguntas guía para preparase el examen (similares a las del examen real), que sirven para acostumbrarse a la forma de preguntar y como responder.
La forma de leer el libro es muy cómoda y rápida, sin grandes descripciones, pero enfocado en los aspectos técnicos de cada tema.
El libro está disponible en "Amazon": http://www.amazon.com/dp/1849685800/?tag=packtpubli-20
y en "Packt Publishing": http://www.packtpub.com/microsoft-dynamics-crm-2011-customization-configuration-mb2-866-certification-guide/book

miércoles, 9 de enero de 2013

Nueva versión de la SDK (5.0.13)

Con la nueva actualización de Dynamics CRM 2011 (UR12 o “Polaris”) se incluyen nuevas funcionalidades. Es por esto que era necesaria la publicación de una nueva SDK, y esto ha ocurrido esta semana.
Se ha publicado la nueva versión de la SDK ya disponible para la descarga: http://www.microsoft.com/en-us/download/details.aspx?id=24004
El listado de modificaciones está recogido en este enlace: http://msdn.microsoft.com/en-us/library/jj863620.aspx
Uno de los temas que creo que son de los mas interesantes es lo de la nueva funcionalidad de acciones con datos de forma “masiva” como se explica aquí: http://msdn.microsoft.com/en-us/library/jj863631.aspx
Un ejemplo de utilización de esta nueva funcionalidad:
   1: // Get a reference to the organization service.

   2: using (_serviceProxy = ServerConnection.GetOrganizationProxy(serverConfig))
   3: {
   4:     // Enable early-bound type support.
   5:     _serviceProxy.EnableProxyTypes();
   6:  
   7:     #region Execute Multiple with Results
   8:     // Create an ExecuteMultipleRequest object.
   9:     ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest()
  10:     {
  11:         // Assign settings that define execution behavior: continue on error, 
  12:         // return responses. 
  13:         Settings = new ExecuteMultipleSettings()
  14:         {
  15:             ContinueOnError = false,
  16:             ReturnResponses = true
  17:         },
  18:         // Create an empty organization request collection.
  19:         Requests = new OrganizationRequestCollection()
  20:     };
  21:  
  22:     // Create several (local, in memory) entities in a collection. 
  23:     EntityCollection input = GetCollectionOfEntitiesToCreate();
  24:  
  25:     // Add a CreateRequest for each entity to the request collection.
  26:     foreach (var entity in input.Entities)
  27:     {
  28:         CreateRequest createRequest = new CreateRequest { Target = entity };
  29:         requestWithResults.Requests.Add(createRequest);
  30:     }
  31:  
  32:     // Execute all the requests in the request collection using a single web method call.
  33:     ExecuteMultipleResponse responseWithResults =
  34:         (ExecuteMultipleResponse)_serviceProxy.Execute(requestWithResults);
  35:  
  36:     // Display the results returned in the responses.
  37:     foreach (var responseItem in responseWithResults.Responses)
  38:     {
  39:         // A valid response.
  40:         if (responseItem.Response != null)
  41:             DisplayResponse(requestWithResults.Requests[responseItem.RequestIndex],
  42:                  responseItem.Response);
  43:  
  44:         // An error has occurred.
  45:         else if (responseItem.Fault != null)
  46:             DisplayFault(responseItem.Fault);
  47:     }


Como se ve, se puede utilizar el mensaje “ExecuteMultipleRequest” como una sola petición a los web services de CRM que hagan múltiples operaciones.

Además se dispone de dos parámetros:
  • ContinueOnError: para determinar si queremos que se detenga en caso de algún error
  • ReturnResponses: para que devuelva una colección con las respuestas

Próximamente intentaré probar esta funcionalidad (cuando disponga de un CRM con UR12…)

Además una nueva posibilidad es que ahora se puede añadir filtros al consultar metadatos de forma que esta consulta nos de solo lo que necesitemos y funcione mas rápido. un ejemplo en este blog: http://mscrmtools.blogspot.com.es/2013/01/sdk-5013-yes-you-can-get-only-metadata.html

Un saludo,