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.

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://marioarm.spaces.live.com/blog/cns!C66AFDF233C95FF!355.trak
    Weblogs that reference this entry
    • None