26/11/09

A vueltas con el Event Viewer

Recientemente me he tenido que pelear con la generación de instaladores MSI con WIX, o sea, que como diría Clint "He descubierto un mundo de dolor". Una de las cosas que hay que hacer es dar mensajes al usuario durante la instalación para que sepa cómo está funcionando todo. La información tiene que ir tanto en la ventana interactiva del instalador como en el Visor de Sucesos de Windows.

Pues bien, después de mucha pelea acabé con una CustomAction que incluye el siguiente código que hace las dos cosas a la vez:


private static void Log(Session session, string message)
{
EventLog.WriteEntry(
"MsiInstaller",
message,
EventLogEntryType.Information,
1000);

var recordInfo = new Record(3);
recordInfo[2] = message;
session.Message(
InstallMessage.ActionStart,
recordInfo);
}

Utilizo la Event Source MsiInstaller porque creo que siempre va a estar creada, con lo que se evita el problema de que el usuario no tenga permisos para crear la fuente de eventos.


Gracias a NETIKUS por explicar qué demonios es el Event Id y por qué tengo que poner un "1000". De hecho, si no ponemos el Identificador de evento, nos encontraremos con un extraño error que dice algo como:


The description for Event ID ([Event Id]) in Source ([Nombre_Fuente]) could not be found. 
It contains the following insertion string(s): ....

Esto ocurre porque los eventos del visor responden a una tabla con mensajes predefinidos con un formato específico, por ejemplo "No se pudo instalar el servicio %1" donde cada símbolo es sustituible por un parámetro. El formato del 1000 es simplemente "%1" así que podemos poner lo que queramos.

23/11/09

Novedades de CRM "5.0"

Como Marco ya lo ha explicado mejor que yo, me limito a copiar (y traducir) su post sobre novedades de CRM 5.0 en la conferencia PDC que se celebró la semana pasada.



  • Empaquetado de soluciones Se acabó lo de tener que manejar Plugins y personalizaciones por separado. Se incorpora un gestor de soluciones y versiones, muy útil para ISVs.

  • Soporte a Framework 4.0 Por primera vez, alineación de versiones entre CRM y .NET
    Mejora de Web Services: basados en WCF, dan soporte a REST y AJAX, para que sea más fácil interoperar con otros entornos.

  • Tipos de datos del sistema Esta me encanta... los datos ahora se expresan con clases nativas de .NET. Adiós a CrmNumber, por ejemplo. No sé si lo echaremos de menos...

  • Linq to CRM Sin tener que recurrir a terceros, librería de consultas integrada en el lenguaje.

  • Picklists compartidos Si hay un picklist que aparece en más de una entidad es incómodo tener que sincronizarlos a mano. Pues nada, solucionado en esta versión.

  • Code Sandbox Plug-Ins y actividades personalizadas de Workflow no sólo en en CRM On-premise, también en Hosted y CRM Online.


He aquí unos enlaces a los PPTs de las sesiones originales


Managing the Solution Lifecycle for xRM Applications

Gestión de soluciones, empaquetado y despliegue con xRM.
http://microsoftpdc.com/Sessions/PR31



Developing xRM Solutions using Windows Azure

http://microsoftpdc.com/Sessions/P09-07

Nuevas opciones de desarrollo sobre xRM y conexión con el mundo "de la nube" con Azure y el Service Bus.



Build a .NET Business Application in 60 Minutes with xRM and SharePoint

Desarrollo de una aplicación de línea de negocio en 60 minutos con xRM y SharePoint
http://microsoftpdc.com/Sessions/PR33



Ah, y aquí tenéis el post original de Marco Amoedo: Summary of xRM and CRM 5 at PDC09