Mario's profileMario Rodriguez MierPhotosBlogListsMore Tools Help

Blog


    Ejemplo de extensión de LinQ para manejo de listas de Sharepoint (Sharepoint List Rapid Implementation )


    Con este ejemplo pretendo mostrar una implementación rápida de una “extensión” de LinQ para poder manipular información contenida en listas de sharepoint. La propuesta pretende demostrar la flexibilidad que posee LINQ para poder acceder a diferentes fuentes de datos manteniendo las características que lo distinguen y que permiten la integración de un lenguaje de consulta dentro de un lenguaje de programación como C# o VB.NET.

    Con este ejemplo no pretendo hacer una implementación eficiente en cuanto a performance y comunicación de red si no que mas bien pretendo mostrar las facilidades para extender LinQ. Posteriormente daré algunas pautas para que puedan ser realizadas modificaciones al codigofuente para optimizar la implementación.

    Aquellos que hayan leído y trabajando con LINQ sabrán que una de las mayores ventajas es poder escribir en lenguaje p-seudo SQL sentencias que permitan manipular datos independientemente de la fuente de donde estos persistan. Esto permite una mayor claridad en el código, legibilidad, mantenibilidad y por sobre todo nos permite centrarnos en la resolución de la problemática de negocios que deseamos resolver y no en detalles no funcionales como lo es el acceso a datos.

    Con esta implementación deseamos que los desarrolladores que pretenden integrar sus aplicaciones con sistemas de manejo de contenido (Conent Managemt Systems), en este caso en particular sharepoint, lo puedan hacer de una manera facil e intuitiva como se muestra a continuación : 

    MYSPContext context = new MYSPContext( "URL de Sitio en SHAREPOINT"

                                                                           ,"usuario"

                                                                                     ,"palabra clave"

                                                                                     ,"dominio"

                                                                                  );

    var lista_de_alumnos = from alumno in context.alumnos

    where alumno .Nombre == "Jorge"

    select alumno ;

    Como pueden observar la simplicidad a la hora de escribir código referente a consultas que podamos hacer sobre las listas de sharepoint es bastante significativa si lo comparamos con la manera habitual que hasta el momento usábamos. Aquellos que lo hayan hecho sabrán bien de lo que estoy hablando, ya que habrán tenido que escribir bastantes líneas de código para poder hacer lo que nosotros hemos hecho en una sola sentencia.

    Para lograr este objetivo simplemente se debe realizar un “mapeo” utilizando atributos de objetos a las listas de sharepoint como se muestra en el siguiente ejemplo:

    [ListAttribute(Name="Contactos")]
    class Alumnos {

         [SPColumn(Name="ows_Nombres")]
         public string Nombre;

        [SPColumn(Name="ows_Title")]
        public string Apellido;

        [SPColumn(Name="ows_ID", PrimaryKey=true)]
        public string ID;

        [SPColumn(Name="ows_Universidad")]
        public string Universidad;

        [SPColumn(Name="ows_newsletter")]
        public string Newsletter;

        [SPColumn(Name="E_x002d_mail_x0020_Address")]
        public string Email;

    }

    Como se puede apreciar en el ejemplo mediante “atributos” (prefiero llamarlos anotaciones) podemos especificar la lista sharepoint a la cual queremos hacer referencia:

    [ListAttribute(Name="Contactos")]

    que campo de la lista será “mapeado” en propiedades o campos de la clase:

    [SPColumn(Name="ows_Universidad")]

    y también podemos especificar cuál será la propiedad o campo que representa el identificador de registro en la lista de sharepoint:

    [SPColumn(Name="ows_ID", PrimaryKey=true)]

    Una vez realizado este “mapeo” en cual puede ser generado por una herramienta al estilo sqlmetal.exe que vienen con LINQ para realizar el “mapeo” de bases de datos solamente nos resta definir una clase donde exponemos todas las listas que estaremos usando en ese sitio, como se muestra en el siguiente ejemplo:

     

    class MYSPContext : SPContext {

         public SPList<Alumnos> alumnos ;

         public MYSPContext ( string SharepointURL

                                            , string UserName

                                            , string Password

                                            , string Domain

                                         ) : base(SharepointURL, UserName, Password,Domain){}

    }

    De esta manera tenemos todo lo necesario para poder escribir la consulta LINQ que propusimos al comienzo de este artículo.

    Próximamente cuando este mas acabado y sea digno de mostrar estaré poniendo en este blog el código fuente de la implementación. Si lo deseas tener antes, por favor escríbeme a mi dirección de correo solicitándolo que con mucho gusto de lo hare llegar. Escribe a mario.rodriguez@microsoft.com.

    Espero que te haya gustado y sobre todo que te haya servido de utilidad.

    Concurso Emprendedores.NET 2006 de la Universidad Federico Santa María.

    Gracias al fuerte convencimiento en Microsoft de apoyar el desarrollo de la economía local y como parte de mi trabajo, he tenido la oportunidad de financiar proyectos para alumnos emprendedores de la Universidad Federico Santa María en Chile. Para esto, en conjunto con el centro de emprendedores de la universidad (3ie) decidimos realizar un concurso para alumnos donde se financiaron 4 proyectos con el objetivo de ser incubados.

     

    Esta experiencia fue muy grata y productiva a la vez, pues al ver la calidad de los trabajos presentados, la seriedad de los mismos y el impacto que podían tener en la industria local haciendo un buen uso de la tecnología, quedé impactado. Se presentaron 29 trabajos y participaron cerca de 94 alumnos de la universidad, algunos de estos alumnos fueron capacitados gratuitamente en el uso de herramientas de desarrollo de Microsoft para que pudieran hacer y defender con bases sólidas sus trabajos desde el punto de vista tecnológico.

     

    Los proyectos ganadores fueron (en orden alfabético):

    Dvine: Proyecto para el control y seguimiento de viñedos. Este proyecto aprovecha todas las ventajas tecnológicas existentes y pretende agregar capas de software que le permitan a los productores de vino poder tomar decisiones acertadas teniendo en cuenta las condiciones meteorológicas y estadío de sus viñedos.

    EcoInformat: Proyecto que permite facilitar la labor de los obstetras durante el embarazo de su paciente, además de brindar herramientas a los futuros padres para que puedan tener un informe detallado de las ecografías y el desarrollo del embarazo.

    Proyecto Orión: Proyecto enfocado al turismo local, el cual plantea un sistema de mapas que le permitirá al turista estar ubicado en todo momento y poder aprovechar al máximo su estadía en el lugar. Haciendo uso de dispositivos móviles y de mapas confeccionados por investigadores locales, el turista puede requerir la información que desee desde el lugar que se encuentre.

    TEC2 (Trade Execution and Cost optimization Transaction Engine for Chilean stock markets): Motor de automatización y minimización de costos de ejecución de órdenes de compra y venta de altos volúmenes de acciones en los mercados bursátiles chilenos.

    Como podrán apreciar, para el jurado no fue tarea fácil, pues el resto de los trabajos no distaban mucho de los antes mencionados.  La calidad, lo novedoso de los trabajos y el impacto en la economía local fueron los parámetros más relevantes a la hora de tomar una decisión.

     

    Quiero agradecer a los miembros del jurado quienes tuvieron en sus manos la responsabilidad  de seleccionar a los equipos ganadores.  Ellos son:

    René Villegas: Director del Centro de Emprendedores de la UFSM.

    Raul Monge: Director del Departamento de Informática de la UFSM.

    Hernan Astudillos: Profesor titular del Departamento de informática de la UFSM.

    Cesar Cornejo: Gerente General de DISC

    Santiago Macías: Gerente de Producto de Tuxpan.

    También quiero agradecer la colaboración de Claudia Villalobos del 3iE,  Wilson Pais y José Antonio Barrigas, ambos de Microsoft Chile por todo el apoyo y aporte a este concurso.

    Workshop IDEAS 2006, Universidad Nacional de la Plata, Argentina

    Del 24 al 28 de Abril de 2006 se realizó una nueva edición del workshop IDEAS (Iberoamericano de Ingeniería de Requisitos y Ambientes de Software)  en la Universidad Nacional de la Plata, Argentina. En este workshop participaron investigadores de varias universidades de Iberoamérica (Argentina, Cuba, España, Venezuela, Brasil, México, Colombia, entre otros).

     

    En este evento tuve la oportunidad de impartir una charla en conjunto con el PhD. Miguel Katrib, profesor titular de la Universidad de La Habana, sobre las “Innovaciones en los lenguajes C# 2.0 y el futuro C#3.0 y la integración de consultas. El Proyecto LINQ” (bájate la presentación haciendo click aquí). Entre los temas que detallamos se encuentran:

     

    Extensión Method: static void Where (this  IEnumerable ítems , … );

    Expresiones Lambda: f => Autor.Nombre.Contains(“Alf”);

    Inicializadores de Objetos:  new Film { Titulo = “Jaw”, Genero = TGenero.Terror};

    Tipos Anónimos : new { f.Titulo, f.Director};

    Expresiones de Consulta : fromwhereselect;

    Arboles de Expresiones : Expression<T>;

     

    Por otra parte, destacamos la importancia de las modificaciones introducidas en C# 2.0 como son: Genericidad, las modificaciones a los Iteradores e instrucciones del tipo yield return.

     

    Entre las cosas más novedosas a las cuales hicimos referencia se encuentra la trasparencia de poder hacer consultas integradas en el lenguaje a diferentes fuentes de datos, como son: Colecciones en Memoria, Archivos XMLs y Bases de Datos y, lo más importante, poder realizar consultas que mezclen diversas fuentes de datos.

     

    Prontamente estaré escribiendo un artículo que detalla todas las innovaciones realizadas en C#2.0 y C#3.0 el cual documentaré con bastantes ejemplos para que puedan sacar sus propias conclusiones.

     

    Todas estas innovaciones apuntan a permitir en un futuro mediato poder obtener código de muy alta calidad y simplicidad permitiendo a los sistemas ser mucho más desacoplados, mantenibles,  y aumentar considerablemente la productividad por hora de desarrollador.

    Quiero agradecer la hospitalidad y los buenos momentos que pasamos a: Claudia Pons, Silvia Gordillo y Gustavo Rossi.

     

    Por el momento los dejo y me despido con esta sentencia y una pregunta:

     

    var despedidas = from s in saludos

                              where s.Idioma =”Español”

                               select s;

    foreach ( var s in despedidas) {

                Console.WriteLine(s.Saludo);

    }

    El resultado es:

                Adios

                Hasta Pronto

                Nos Vemos

               Que te vaya bien

                ……

     

    Pregunta: Cuales son las posibles fuentes de datos que estoy usando?

                            A: Colecciones en Memoria

                            B: Base de Datos

                            C: Archivo XML

     

    Nota:Puedes seleccionar más de una.

    Microsoft Research Academic Summit en Guadalajara, Jalisco, México.

    El pasado 17 de Mayo de 2006, se realizó en Guadalajara el 4 encuentro de investigadores de Microsoft Research con investigadores de las universidades más importantes de Latinoamérica. Fue un evento muy emotivo y de muy alta calidad donde se expusieron trabajos realizados por investigadores de MSR y de importantes universidades de la región. Es de destacar la conferencia impartida por Álvaro Soto, de la Pontificia Universidad Católica de Chile, sobre robótica, proyecto que esta desarrollando con alumnos de su universidad y que es apoyado por Microsoft Research.

    Por otra parte y no menos importante este evento me permitió compartir ideas, compartir momentos con amigos que hacía meses que no nos veíamos, además de tener la oportunidad de conocer a docentes de otras regiones  con los cuales espero poder estrechar lazos de cooperación.

     

    Entre los participantes de Cono Sur se encontraban:

     

    Alejandro Fernández, Universidad Nacional de la Plata, Argentina

    Sergio Ochoa, Universidad de Chile, Chile

    Jose A Pino, Universidad de Chile, Chile

    Yadran Eterovik, Pontificia Universidad Católica de Chile, Chile.

    Álvaro Soto, Pontificia Universidad Católica de Chile, Chile

    Uriel Cukierman, Universidad Tecnológica Nacional, Argentina

    Nicolas Kicillof, Universidad de Buenos Aires, Argentina.

     

    Entre los participantes de Microsoft se encontraban:

    Leandro Doeyo, David Delgado,Jaime Puente, John Spencer, Rico Malvar, Jim Larus, Kentaro Toyama, Manuel Reyes-Gomez, John Nordlinger, Steven Drucker, Tom Healy, Jose Blakeley, Pedro Celis

     

    Es de destacar la organización del evento a cargo de Ricardo Medina, Microsoft Mexico, a mi entender fue un exitazo total.