[Eventos]: No te pierdas los próximos eventos y webcasts de las próximas semanas!

Pues eso, aprovechando que por gentileza de Air France no he podido salir de Tokyo todavía, quería recordar los próximos eventos en los que participaré de forma activa de la mano del CIIN, SUGES y la comunidad IT Pro. Si quieres estar al día de SharePoint 2013, Windows 8, Azure, Windows Phone 8, Lync 2013, Project 2013 o Exchange 2013 no te puedes perder estos eventos.

  • Maratón de WebCast de SharePoint 2013 programado para el próximo jueves 29 de noviembre. Durante 13 horas y de la mano de MVPs de España y Latinoamerica estaremos viendo muchas de las novedades de SharePoint 2013. Enlaces de inscripción a cada WebCast aquí.
  • Evento de la comunidad de IT Pro, en el qué hablaremos sobre SharePoint 2013, Lync 2013, Exchange 2013, Project 2013. Enlace del evento: http://technet.microsoft.com/es-es/jj863295. En mi caso, estaré participando en el WebCast de SharePoint 2013 programado para el 11 de diciembre.
  • Y para finalizar, el último evento presencial del año en las oficinas del CIIN: TechDay Tour: Desarrollo para Windows. No te lo pierdas y apúntate a través de este enlace.

Os espero en estos eventos que espero que resulten de vuestro interés…eso sí, espero llegar a tiempo al primero si Air France no me la lía parda :-P.

Windows Azure: Otra oferta más…para que no tengas disculpas para no probarlo!

Pues eso, que pocas disculpas le quedan ya a cualquiera para no probar Windows Azure ya que Microsoft acaba de publicar una nueva oferta de uso gratuito durante un año, esta vez para miembros del programa WebSiteSpark orientado a pequeñas empresas cuya actividad gira en torno al desarrollo web. El offering incluye los siguientes elementos (valorados en $1400):

  • 375 hours of a small compute instance
  • 20GB of storage capacity; 1M storage transactions
  • 1GB Web Edition SQL Database
  • 25 GB out (worldwide) CDN; 500,000 CDN transactions
  • And more!

Podéis leer la noticia en el blog del equipo de Windows Azure.

image

SharePoint 2010: ¿Se soporta o no una instalación de SharePoint sobre Azure?

Pues de forma oficial por parte de Microsoft, no en cuanto a qué no hay persistencia de datos por lo que la instalación que se realice se puede perder. Qué no se soporte no implica que no se pueda hacer, de echo y a modo de ejemplo os dejo esta referencia en la que podéis ver el proceso de como hacer una instalación de SharePoint Foundation 2010 en un rol de ASP.NET de Windows Azure…veremos si a futuro cambia esto.

SharePoint2010_thumb

SharePoint 2010 y Azure: Integración con el Windows Azure Data Market (III)!

Siguiendo con la serie de posts sobre la integración de SharePoint y el Windows Azure Data Market, vamos a cerrar el círculo y ver como otra posibilidad de integración pasa por crear vistas de datos usando SharePoint Designer 2010 (SPD 2010). Os recuerdo antes los artículos previos de la serie:

Lo interesante de esta aproximación es que nos permite integrar datos del Windows Azure Data Market tanto en SharePoint 2010 On-Premise como en SharePoint Online (SPO) en Office 365. Para crear una vista de datos a partir de una fuente disponible en el Windows Azure Data Market:

image image image
  • De esta forma automáticamente tenemos una primera vista de datos disponible en la página y el panel de origen de datos que usaremos a continuación para generar la vista como queremos escogiendo los campos de información necesarios.
  • Eliminamos la vista que añade SPD 2010, escogemos los campos que queremos que formen parte de la vista y los arrastraos a la zona de WebParts de la página.
  • En la cinta de configuración de la vista de datos, pulsamos sobre “Add/Remove Columns” para añadir nuevas columnas y/o ordenar las columnas existentes.
image image image
  • Guardamos los cambios y previsualizamos la vista en el explorador. Y listo.

image

SharePoint 2010 y Azure: Integración con el Windows Azure Data Market (II)!

Siguiendo con la serie de posts sobre como integrar Windows Azure Data Market y SharePoint 2010, en esta ocasión vamos a ver como podemos realizar dicha integración a través de un Business Data Connectivity Model o simplemente un conector de BCS (Business Connectivity Services) que crearemos en Visual Studio 11 Beta (VS 11 Beta) y que luego desplegaremos en nuestro ambiente de SharePoint. Empecemos:

  • Lo primero que tenemos que hacer como siempre es conocer la forma que tenemos de integrar la fuente de datos del Windows Azure Data Market. En mi caso, voy a trabajar con el set de datos 2006 – 2008 Crime in the United States que se puede integrar de forma muy sencilla en nuestras aplicaciones sin más que añadir una referencia al correspondiente servicio que en este caso es: https://api.datamarket.azure.com/data.gov/Crimes/
  • Como siempre, antes de ponernos a  hacer nada podemos jugar con el set de datos directamente desde el Data Market.
  • En VS 11 Beta creamos un proyecto de tipo SharePoint 2010 Project al que añadimos un elemento de tipo Business Data Connectivity Model que pasaremos a parametrizar a continuación. Este modelo tendrá una única entidad, Crime, que nos permitirá acceder a la información de los crímenes que expone el servicio.
image image image
  • En lugar de trabajar con el diseñador del Business Data Connectivity Model, vamos a agregar en primer lugar la lógica necesaria para acceder a los datos del servicio. Para ello, añadimos en primer lugar una referencia al citado servicio en nuestro proyecto. Tendremos que añadir además una referencia a System.Data.Services.Client.
  • A partir de aquí, en el explorador de soluciones vamos a preparar las dos clases que se crean al añadir el elemento de tipo Business Data Connectivity Model al proyecto: Entity1 y Entity1Service. La primera clase modela la entidad tipo que nos permite integrar los datos del servicio en SharePoint a través de una serie de propiedades. La segunda, contiene los métodos que permiten trabajar con entidades de tipo Entity1.
  • En mi caso, he renombrado Entity1 a Crime y le he añadido las siguientes propiedades que luego se mapearán a propiedades del set de datos expuestos por el servicio:
   1: public partial class Crime

   2: {

   3:     //TODO: Implement additional properties here. The property Message is just a sample how a property could look like.

   4:     public int ID { get; set; }

   5:     public string State { get; set; }

   6:     public string City { get; set; }

   7:     public int Year { get; set; }

   8:     public int Population { get; set; }

   9:     public int Burglary { get; set; }

  10:     public int LarcenyTheft { get; set; }

  11:     public int MotorVehicleTheft { get; set; }

  12: }

  • A continuación iremos por la clase Entity1Service que en este caso renombramos a CrimeService. En la misma añadimos referencias a System.Net, System.Data.Services.Clien y al servicio de Windows Azure Data Market.
  • Añadimos a la clase un método que nos permita devolver un proxy al servicio. Como veis, simplemente se trata de devolver dicho proxy y además lidiar con no tener problemas de conexión por SSL usando para ello ServicePointManager y confiando en certificados del Windows Azure Data Market. Este proxy nos permitirá acceder a los datos del servicio.

   1: private static datagovCrimesContainer GetProxy()

   2: {

   3:     ServicePointManager.ServerCertificateValidationCallback =

   4:         ((sender, certificate, chain, sslPolicyErrors) => 

   5:             certificate.Subject.Contains("datamarket"));

   6:     Uri serviceUri =

   7:         new Uri("https://api.datamarket.azure.com/Data.ashx/data.gov/Crimes");

   8:     datagovCrimesContainer proxy =

   9:         new datagovCrimesContainer(serviceUri);

  10:     proxy.Credentials =

  11:         new NetworkCredential("Yor Data Market Account",

  12:             "Your Data Market Key");

  13:     return proxy;

  14:  

  15: }

  • Esta clase al menos tiene que implementar dos métodos:
    • Uno de tipo “Specific finder” que devuelva una entidad de tipo Crime en base a un parámetro como por ejemplo puede ser un identificador. En este caso, el método en cuestión se ha renombrado a ReadCrime. Cómo veis, a partir de un identificador y el proxy podemos acceder fácilmente a un registro expuesto por el servicio y devolverlo.
   1: public static Crime ReadCrime(int id)

   2: {

   3:     datagovCrimesContainer proxy = GetProxy();

   4:  

   5:     var results = from stat in proxy.CityCrime

   6:                   where stat.ROWID == id

   7:                   select stat;

   8:  

   9:     Crime currentStat = new Crime();

  10:  

  11:     currentStat.ID = results.Single().ROWID;

  12:     currentStat.City = results.Single().City;

  13:     currentStat.State = results.Single().State;

  14:     currentStat.Year = results.Single().Year;

  15:     currentStat.Population = results.Single().Population;

  16:     currentStat.Burglary = results.Single().Burglary;

  17:     currentStat.LarcenyTheft = results.Single().LarcenyTheft;

  18:     currentStat.MotorVehicleTheft = results.Single().MotorVehicleTheft;

  19:  

  20:     return currentStat;

  21: }

    • Uno de tipo “finder” que nos devuelva una colección de objetos de tipo Crime. En este caso se ha renombrado el método a ReadCrimes(). Como antes, a partir del proxy es sencillo obtener una colección de objetos CityCrime expuestos por el servicio que luego usaremos para devolver la colección de objetos de tipo Crime.
   1: public static IEnumerable<Crime> ReadCrimes()

   2: {

   3:     List<Crime> queryResults = new List<Crime>();

   4:  

   5:     datagovCrimesContainer proxy = GetProxy();

   6:  

   7:     IEnumerable<CityCrime> crimes = 

   8:         proxy.CityCrime.Where(c => c.State ==

   9:                "Washington" && (c.Year == 2008 || c.Year == 2007));

  10:  

  11:     //Procesando el set de datos devuelto

  12:     foreach (var c in crimes)

  13:     {

  14:         Crime cr = new Crime();

  15:         cr.ID = c.ROWID;

  16:         cr.City = c.City;

  17:         cr.State = c.State;

  18:         cr.Year = c.Year;

  19:         cr.Population = c.Population;

  20:         cr.Burglary = c.Burglary;

  21:         cr.LarcenyTheft = c.LarcenyTheft;

  22:         cr.MotorVehicleTheft = c.MotorVehicleTheft;

  23:  

  24:         queryResults.Add(cr);

  25:     }

  26:  

  27:     return queryResults.ToList();

  28: }

  • A partir de aquí, de vuelta al explorador del modelo de BDC tenemos que configurar adecuadamente la entidad Crime para que se usen estos métodos y tenga los miembros correspondientes de acuerdo a la definición de la clase. Este trabajo lo haremos en el diseñador del modelo y el explorador.
  • En el diseñador configuraremos el nombre de la entidad y de los métodos expuestos. Mientras que en el explorador del modelo configuraremos adecuadamente los parámetros de entrada y de salida de cada uno de estos métodos.
  • Una vez creado el conector, simplemente lo desplegamos y en nuestro sitio de SharePoint creamos la correspondiente lista externa que mostrará los datos expuestos por el servicio.
image image image

 

Y hasta aquí llega este segundo post sobre la integración de SharePoint 2010 y el Windows Azure Data Market.

SharePoint 2010 y Azure: Integración con el Windows Azure Data Market (I)!

Otro gran punto de integración entre SharePoint 2010 y Windows Azure es a través del Windows Azure Data Market de manera que podemos acceder a datos publicados utilizando artefactos de SharePoint como pueden ser WebParts o conectores de BCS. En este primer post os voy a mostrar como podemos usar Bing Translator, que ya está incluido en el Windows Azure Data Market, para poder realizar traducciones en una WebPart. Comencemos:

image image image

Partimos del ejemplo de uso de Microsoft Translator que pasa por descargarse el proxy C# disponible en la página de detalle de Microsoft Translator en el Data Market. A partir de aquí, ya estamos listos para codificar de acuerdo a los siguientes pasos:

  • Agregar referencia a System.Data.Services.Client puesto que los datos del Data Market los consultaremos a través de servicios REST.
  • Añadir directivas using a System.Data.Services.Client, System.Net y el espacio de nombres del proxy que nos hemos bajado (Microsoft en este caso).
  • Especificar la cuenta y clave de uso del Azure Data Market.
  • Evitar el infame error: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel, date una vuelta por este enlace para saber de que estamos hablando. Como veis, en mi caso y dado que esto son pruebas uso SharePointManager para saltarme problemas de certificados y dar por válidos los certificados usados por el Azurre Data Market. Si quieres específicamente confiar únicamente en los certificados del Windows Azure Data Market, basta con cambiar que se confía en todos los certificados (valor true) por certificate.Subject.Contains("datamarket").
  • Creamos una instancia del objeto TranslatorContainer definido en el proxy y que nos permite realizar la consulta de traducción.
  • Especificamos la url del servicio de Microsoft Translator y las credenciales de acceso al Windows Azure Data Market.
  • A partir de aquí especificamos que queremos traducir, el idioma de destino y el de origen…realizamos la traducción y procesamos los resultados.
   1: try

   2: {

   3:     this.txtTranslation.Text = "";

   4:     // tUri del Servicio 

   5:     Uri uServiceRootUri =

   6:                    new Uri(

   7:                        "https://api.datamarket.azure.com/Bing/MicrosoftTranslator/");

   8:  

   9:     //  Claves de acceso

  10:     string sAccountUser = "TuCuenta";

  11:     string sAccountKey = "TuClave";

  12:  

  13:     // Objeto Translator Container

  14:     ServicePointManager.ServerCertificateValidationCallback =

  15:         ((MySender, certificate, chain, sslPolicyErrors) => true); 

  16:     TranslatorContainer tc = 

  17:         new TranslatorContainer(uServiceRootUri);

  18:  

  19:     // Credenciales de acceso 

  20:     tc.Credentials = 

  21:         new NetworkCredential(sAccountUser,sAccountKey); 

  22:  

  23:     //*****************************************

  24:     //A traducir

  25:     //*****************************************

  26:  

  27:     // Generamos la consulta 

  28:     var translationQuery = 

  29:         tc.Translate(this.txtWordToTranslate.Text,"en","es");

  30:  

  31:     // Ejecutamos la consulta

  32:     var translationResults = translationQuery.Execute();

  33:  

  34:     // Procesamos los resultados

  35:     if (translationResults!=null)

  36:     {

  37:         foreach (var item in translationResults)

  38:         {

  39:             this.txtTranslation.Text += item.Text;

  40:         }

  41:     }                

  42:  

  43: }

  44: catch (Exception ex)

  45: {

  46:  

  47:     this.lblError.Text = "Error: " +

  48:         ex.Message;

  49: }

Y finalmente la prueba del algodón:

image

Otros posts sobre la integración de SharePoint y Azure:

Windows Azure: Ale, a repasar las PPTs para cambiar nombres!

Pues eso, que parece que a Microsoft (por si acaso he mirado el calendario para ver si no era una fecha de esas típicas de bromas o inocentadas) le ha dado por hacer un rebranding de Windows Azure que implica eliminar estas dos palabras de todos los servicios que forman parte de su plataforma de cloud computing. Los detalles los podéis ver en este post de Mary Jo Foley. Y el resumen de cambios es el siguiente:

Asique a más de uno le tocará repasar sus ppts…