SSD: el síndrome de la Sharepoint dependencia

Sharepoint me proporciona seguridad y me hace sentir más fuerte. Las 10 cosas que más me gustan de Sharepoint.

10 puntos para entender a Project Server 2010

Microsoft Project es quizá la herramienta de gestión de proyectos más conocida y utilizada por los líderes de proyectos...

Diseño Gráfico en SharePoint

Serie de artìculos que nos ayudan a incorporar diseño gráfico en las implementaciones de SharePoint...

Revista CompartiMOSS

Artículos publicados en la revista especializada en SharePoint: CompartiMOSS.

Contacto

Enviame un correo :-)

Mostrando entradas con la etiqueta Eventos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Eventos. Mostrar todas las entradas

lunes, 16 de enero de 2012

Sharing The Point South America 2012

Me contacta mi amigo Ricardo Muñoz para informarme sobre este importante evento que se estará realizando la el próximo sábado en Buenos Aires, al cual, desde ya, están todos invitados. A continuación les dejo información sobre el evento:

Sitio web: http://www.sharingthepoint.org/SitePages/Home2012.aspx

Transcribo datos del evento:

Compartiendo el Punto SurAmerica 2011

Después de su gran éxito en el 2011 en Asia y Europa continua la gira mundial de Sharing The Point, en esta ocasión un grupo de evangelistas y expertos de SharePoint de múltiples nacionalidades estarán dando un conjunto de charlas en Suramérica, para arrojar luz sobre el potencial ilimitado de SharePoint para las Organizaciones de todo tamaño y sector.

En esta ocasión el evento se realizara en 4 ubicaciones en Suramérica:

No te pierdas el nutrido grupo de expertos que estarán en el tour tales como: Joel Oleson. Paul Swider, Mark Miller, Dan Holme y Ricardo Muñoz entre otros. Ellos estarán compartiendo experiencias, mejores prácticas y lecciones aprendidas durante una gran cantidad de implementaciones de SharePoint de diversos tipos y tamaños realizadas en múltiples países.

Si quieres aprender mas sobre SharePoint y al mismo tiempo aprovechar la experiencia de los expertos te invitamos a reservar tu lugar en alguna de las paradas de la gira. Visita hoy mismo el Sitio Oficial de la Gira Sharing The Point Suramérica.

El evento será totalmente gratuito lo único que necesitas hacer es registrarte, es importante mencionar que todas las charlas en ingles tendrán traducción.

Sigue al equipo del Sharing the Point en Twitter y Facebook para las ultimas novedades.

image

Espero puedan asistir!

miércoles, 23 de noviembre de 2011

Seguridad a nivel de ítem en una lista

Muchas veces nos consultan sobre cómo aplicar seguridad a nivel de ítem de lista, basado en el valor de una columna. En estos se puede crear un manejador de eventos que modifique la seguridad del elemento.

Un muy buen material para empezar con manejadores de eventos en SharePoint 2007 lo pueden encontrar en http://msdn.microsoft.com/en-us/magazine/cc163318.aspx

La consulta original en el foro la pueden encontrar en este enlace: http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/9769e32c-0a9a-42b6-bdc0-01ceaa2938c3/ (Creating a custom View based on column in a list)

Cualquier consulta adicional me avisan. Saludos!

martes, 2 de agosto de 2011

Manejadores de eventos desde PowerShell en SharePoint 2010

Los manejadores de eventos son una de mis funcionalidades favoritas de SharePoint, ya que permiten resolver cuestiones de negocio. Si no conocen el tema, les dejo un breve screencast que armé hace un tiempo: http://surpoint.blogspot.com/2010/10/manejadores-de-eventos-en-sharepoint.html.

imagePero si lo conocen, seguramente tomarán como buena noticia que en SharePoint 2010 podemos podemos adjuntar los eventos a una lista desde PowerShell. Realmente esto facilita el despliegue de los mismos. ¿Cómo hacerlo? Está explicado en este artículo de SolidQ que pueden leer en: http://blogs.solidq.com/sharepoint/Post.aspx?ID=80&title=How+to+add/delete+an+event+receiver+to+a+single+list+with+PowerShell+in+SharePoint+2010

Espero que les sea útil. Saludos!

lunes, 25 de abril de 2011

Cuarto Simposio de SharePoint en Mexico – SharePoint 2010

Transcribo esta importante información por parte de mi amigo Luis Du Solier, publicada originalmente en http://geeks.ms/blogs/ldusolier/archive/2011/04/14/cuarto-simposio-de-sharepoint-en-mexico-sharepoint-2010.aspx. Espero que puedan ir!

Que tal amigos y amigas miembros de la Comunidad de SharePoint en Español. Este año logramos coordinar esfuerzos otra vez para llevar a cabo nuestro Cuarto Simposio Latinoamericano. Recordando un poco de historia elPrimero Simposio fue en Costa Rica con la Comunidad de SharePoint Costa Rica, con Ricardo Muñoz y Vielka Rojas.

El Segundo Simposio lo hicimos hace 2 años en el Hotel Fiesta American de Reforma en México Df, los detalles y presentaciones los pueden encontrar aquí.

El Tercer Simposio lo hicimos hace un año en la Hacienda los Morales en la Ciudad de México, pueden encontrar más información aquí.

Ahora por supuesto nuestro segundo Simposio enfocado a la última versión de SharePoint, SharePoint 2010. Manejaremos la misma dinámica: Por la mañana charlas con enfoque para los developers o desarrolladores sobre SharePoint, y por la tarde para los It Pros y TDM, aunque cualquier persona puede asistir a cualquier plática independientemente de tu perfil o experiencia.

A continuación les comparto la invitación:

9:00 - 10:00 am

Registro

Agenda de la mañana para desarrolladores (10:00 am - 1:30 pm)

10:00 - 11:00 am

Office 2010 y su integración con SharePoint 2010 – por Gerardo/Sergio

11:00 - 12:00 pm

Desarrollo de soluciones en SharePoint 2010 – por Misael Monterroca

12:00 - 12:30 pm

Receso

12:30 - 1:30 pm

Flujos de trabajo en SharePoint 2010 – por Haaron González

13:30 - 2:00 pm

Juegos/Xbox360 y Kinect

2:00 - 3:00 pm Tiempo libre para COMIDA

Agenda de la tarde para IT Pros (3:00 pm - 8:30 pm)

3:00 - 4:00 pm

Migración a SharePoint 2010 – por Vladimir Medina/Ricardo Muñoz

4:00 - 5:30 pm

Administración en SharePoint 2010 – por Luis Du Solier G.

5:30 - 6:00 pm

Receso

6:00 - 7:00 pm

Reporteo en SharePoint e Inteligencia de Negocio 2010 – por Ricardo Loo

7:00 - 8:30 pm

Administración de Proyectos en SharePoint 2010 – por Tomas Hernandez/Javier D Labra

8:30 - 9:00 pm

Rifa

Comunidad de SharePoint México http://mssharepoint.multiply.com
PodCast de la Comunidad
http://www.sharepoint.com.mx
Blogs de la Comunidad
http://sharepointblogs.com.mx
Para mayor información contactar a Luis Du Solier G.
ldusolier@sharepoint.com.mx o a Vladimir Medina vmedina@sharepoint.com.mx
Twitter:
@ldusolier, @VladPoint

La Comunidad de SharePoint México y Microsoft invita!

Regístrate ya!

https://msevents.microsoft.com/cui/EventDetail.aspx?culture=es-MX&EventID=1032484637&IO=rJdKOw%2bVAyxfqLn5Is1OxQ%3d%3d

miércoles, 20 de octubre de 2010

Manejadores de Eventos en SharePoint 2010 con Visual Studio 2010 (screencast para Channel 9)

imageHe tenido el honor de participar con un screencast sobre el tema de referencia para Channel 9. ¿Cómo? Gracias a la iniciativa de SUGES y en particular de Mario Cortes Flores y Juan Carlos González Martin.

imageEspero que les resulte interesante, he intentado ser breve y concreto (12 minutos). Pueden accederlo en este enlace: http://channel9.msdn.com/Blogs/channel9spain/Manejadores-de-Eventos-en-SharePoint-2010-con-Visual-Studio-2010 o verlo más abajo.

Get Microsoft Silverlight

Hasta la próxima!

lunes, 27 de septiembre de 2010

Manejadores de eventos en SharePoint 2010 con Visual Studio 2010 (revista CompartiMOSS)

image Este artículo lo escribí originalmente para la revista CompartiMOSS gracias a una invitación de Fabián Imaz.

Les recomiendo ampliamente esta revista que pueden accederla desde este enlace:

http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx 

o desde su página en Facebook:

http://www.facebook.com/group.php?gid=128911147140492&v=wall&viewas=0#!/group.php?gid=128911147140492&ref=ts.

Que les sea útil!

Introducción

Los manejadores de eventos constituyen una de las tantas características que SharePoint 2010 posee a la hora de extender una aplicación mediante programación. En lo personal, estoy convencido de que la mejor forma de potenciar SharePoint es aprovechando al máximo las funcionalidades que la plataforma nos ofrece out of the box y reservar la programación para los casos en que se justifique. De esta manera obtendremos aplicaciones más robustas, en menos tiempo, con menor costo y menos propensas a errores.

Bajo este punto de vista, considero que los manejadores de eventos nos ofrecen una funcionalidad con una muy buena relación costo-beneficio, ya que son sencillos de programar y a cambio nos ofrecen funcionalidad más que interesante.

¿Para qué necesitamos un manejador de eventos? En principio debemos entender que los manejadores de eventos agregan comportamiento a listas e ítems (entre otras entidades). Se ejecutan automáticamente como respuesta a un evento como agregar una columna en una lista o modificar un ítem en una lista. Los usos más comunes, según mi opinión, son:

1. Validaciones de datos, previas a la transacción de alta o modificación de un ítem (lo que no podemos resolver con la nueva funcionalidad de SharePoint 2010: Custom Validation).

2. Control de integridad para fortalecer las reglas de negocio que no pueden ser manejadas con los campos de búsqueda (lookup).

3. Control de unicidad de columnas o conjunto de columnas (lo que no podemos resolver con la nueva funcionalidad de SharePoint 2010: Enforce unique values ).

4. Ejecución de procesos de negocio, acciones que puedan ser automatizadas y que no necesiten intervención de un usuario (en cuyo caso quizá sea más acertado programar un flujo de trabajo)

Intro

5. Lo que no puede resolver un campo calculado: con eventos disponemos de toda la potencia de .Net para calcular en forma automática el valor de nuestras columnas.

6. Protección de la parametrización, al impedir, por ejemplo, que un usuario con permisos de administración pueda eliminar una columna de una lista.

7. Controles en la seguridad, útil cuando necesitamos aplicar (o controlar) determinados permisos sobre un ítem basados en un elemento dinámico como un dato en una columna (u otra regla de negocio más sofisticada).

Si me permiten la simplificación, creo que la mejor manera que tiene el lector de comprender qué es un manejador de eventos es recordar lo que nos ofrecen los triggers de un sistema de base de datos relacional.

Eventos en SharePoint 2010

En la sección anterior enumeré ideas de problemáticas que podemos resolver con los manejadores de eventos, pero para entender la potencialidad de esta funcionalidad, lo primero que necesitamos es conocer la lista de eventos que soporta SharePoint 2010, que a continuación enumero:

Eventos de lista

· Columnas: creación, eliminación y modificación.

· Listas: creación y eliminación.

Eventos de ítem lista

· Ítem: creación, eliminación, modificación y protección.

· Archivos adjuntos: creación y eliminación.

· Archivos: movimiento y conversión.

· Recepción de un evento de contexto de lista.

Eventos de e-mail

· Recepción de mensaje de e-mail.

Eventos de web

· Colección de sitios: eliminación.

· Sitio: aprovisionamiento, eliminación y movimiento.

Eventos de flujo de trabajo

· Comienzo, suspensión y desactivación.

Eventos de característica

· Activación, desactivación, instalación y desinstalación y modificación.

Intro_After_Before

Tipos de eventos

En casi todos los casos existen dos tipos de eventos, los que se ejecutan antes (before) de que se efectúe la confirmación de la transacción en la base de datos de contenido (terminan en “ing”) y los que se disparan después (after) de que se ejecute la confirmación (terminan en “ed”). Los primeros son sincrónicos y los segundos a-sincrónicos en forma predeterminada.

  • Los eventos after no admiten cancelación por parte del usuario.
  • Los eventos asincrónicos se ejecutan en un thread distinto.
  • SharePoint 2010 posee una nueva propiedad que permite alterar el tipo de sincronización del evento (sólo en los eventos after): eventReceiver.Synchronization.

Ejemplo en Visual Studio 2010

Afortunadamente, Visual Studio 2010 nos ofrece un entorno de desarrollo totalmente integrado con SharePoint 2010. En la versión de 2007, necesitábamos realizar mucho trabajo manual, que ahora se ve reemplazado por un amigable asistente. Nuestro primer paso será crear un proyecto de tipo Event receiver tal como indica la figura:

Visual_New

Luego elegimos nuestro sitio y si se trata de una solución standboxed o farm. La siguiente pantalla nos permite elegir el tipo de evento (ítem de lista en nuestro caso) y la fuente (Anuncios en nuestro caso) tal como muestra la siguiente imagen:

Visual_EventType

Al finalizar el asistente nos genera automáticamente una solución con las referencias y clases correspondientes, quedando de nuestro lado escribir el código personalizado.

using System;

using System.Security.Permissions;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Security;

using Microsoft.SharePoint.Utilities;

using Microsoft.SharePoint.Workflow;

namespace EventReceiverProject1.EventReceiver1

{

    /// <summary>

    /// List Item Events

    /// </summary>

    public class EventReceiver1 : SPItemEventReceiver

    {

       /// <summary>

       /// An item is being updated.

       /// </summary>

       public override void ItemUpdating(SPItemEventProperties properties)

       {

base.ItemUpdating(properties);

       }

    }

}

Ahora que tenemos el esqueleto armado, haremos un ejemplo para entender cómo funciona el manejador de eventos. Vamos a implementar una sencilla regla de negocio: los anuncios de nuestra librería Announcements sólo pueden ser modificados los días miércoles.

Crearemos un evento que valide que la acción de modificación se esté realizando ese día. Para ello agregamos las siguientes líneas de código dentro del esqueleto que nos había construido el asistente de Visual Studio 2010:

DateTime Ahora = DateTime.Now;

string Dia = Ahora.ToString("ddd");

if (Dia != "Wed") {

  properties.Status = SPEventReceiverStatus.CancelWithError;

  properties.ErrorMessage = "Los anuncios sólo pueden ser modificados los miércoles";

  properties.Cancel = true;

}

Como nuestro evento es de tipo before la validación se ejecutará antes de que la modificación se confirme en la base de datos de contenido, permitiendo cancelar la operación e informar mediante un error lo sucedido al usuario.

Para desplegar el evento en nuestro ambiente de desarrollo, el siguiente paso es presionar F5. Visual Studio 2010 nos abrirá Internet Explorer con nuestro sitio cargado, herramientas de debug incluidas. J. Buscamos la lista de anuncios, elegimos uno e intentamos la acción de modificación:

Sitio_Update

Como en nuestro ejemplo, la acción se está ejecutando un viernes, el evento cancelará la edición y generará el siguiente mensaje de error:

Error

Conclusión

En este artículo vimos una introducción rápida a la característica de programación de manejadores de eventos en SharePoint 2010 y sus posibles usos.

Luego vimos un ejemplo muy sencillo con el objetivo de transmitir al lector tranquilidad respecto al costo de programación asociado. Además vimos como Visual Studio 2010 nos ayuda notoriamente en el trabajo con SharePoint a través de sus asistentes y facilidades para desplegar.

Espero que esta herramienta sea de utilidad para aquellos que necesiten extender SharePoint, especialmente programando reglas de negocio.

En caso que tu plataforma sea SharePoint 2007, también puedes programar manejadores de eventos con un poco más de esfuerzo y algunas limitaciones en cuanto a los eventos disponibles. Si este es tu caso, te dejo un enlace con un artículo y webcast que dicté sobre eventos en WSS 3.0: http://surpoint.blogspot.com/2009/12/manejadores-de-eventos-en-sharepoint.html.

Como siempre, espero haber sido útil. ¡Hasta la próxima!

domingo, 22 de agosto de 2010

CompartiMOSS Volumen 5

image Señores y señoras: hace algunas horas ha visto la luz la nueva edición la revista digital especializada en tecnologías SharePoint: CompartiMOSS.

Muchos de ustedes ya conocerán esta excelente publicación por números anteriores. Les recomiendo ampliamente la lectura de este número, actualmente dirigido por Gustavo Velez y Fabián Imaz, reconocidos MVPs de SharePoint.

Aprovecho para agradecer a Fabián Imaz quién me ha invitado a participar en este número con un artículo sobre desarrollo en SharePoint. Un honor para mí!

Contenido de este número:

  • Editorial
  • Mayor productividad en Microsoft Office 2010 (Alejandro Garrido)
  • Manejadores de Eventos en SharePoint 2010 (Juan Pablo Pussacq Laborde)
  • Automatización de pruebas de interfaz de usuario con Visual Studio 2010 (Fernando Machado)
  • Motor de búsqueda de SharePoint 2007 y aplicaciones personalizadas para el acceso de la información (Fabián Imaz)
  • Herramientas para SharePoint de Recuperación, Búsqueda, Restauración y Migración (Rafael Jiménez)
  • Secciones fijas
  •  

    Descarga:

    Descargar CompartiMOSS Número 5 - Septiembre 2010 (Alta resolucion, 2,1 MB)
    Descargar CompartiMOSS Número 5 - Septiembre 2010 (Baja resolucion, 1,2 MB)

    Enlaces:

    Sitio Oficial de la Revista CompartiMOSS
    Sitio Oficial de la Revista CompartiMOSS en Facebook

     

    Que la disfruten!

    miércoles, 12 de mayo de 2010

    Mini truco: RunWithElevatedPrivileges en ItemAdded

    En algunos casos, necesitamos que en el evento ItemAdded se actualicen algunos campos de la lista, pero el usuario que da de alta el ítem no tiene los permisos necesarios para poder actualizarlos. En este caso, si utilizamos el evento ItemAdded, va a lanzar una excepción del tipo “Access Denied”.

    Para salvar esta excepción, podemos utilizar el evento SPSecurity.RunWithElevatedPrivileges. Aquí les dejo un ejemplo, en donde luego de dar de alta un ítem de lista necesitaba determinar el valor de un campo del tipo imagen:

    public override void ItemAdded(SPItemEventProperties properties){

    Guid listID;

    int itemID;

    listID = properties.ListId;

    itemID = properties.ListItem.ID;

    SPSecurity.RunWithElevatedPrivileges(delegate() {

            SPSite Site = new SPSite(properties.WebUrl);

            using (SPWeb currentWeb = Site.OpenWeb()){

                    SPList list = currentWeb.Lists[listID];

                    SPListItem addedItem = list.GetItemById(itemID);

                    addedItem["ID_Idea"] = itemID;

                    addedItem["Imagen_CicloVida"] = "/pi/Arte/PI_WF_Discovery.PNG";

                    addedItem.SystemUpdate();

             }

    });

    }

    Espero les sirva y nos vemos en otra entrada.

    martes, 5 de enero de 2010

    Mini-truco del día: SPLookupURLValue (SharePoint)

    ¿Cómo cargar una campo de tipo Lookup programáticamente?
    Veamos un ejemplo desde un evento:


    public override void ItemAdded (SpItemEventProperties properties)
    {
      SPFieldLookupValue Proyecto = new SPFieldLookupValue(properties.ListItem[“Proyecto”] as string);

      properties.ListItem[“Copia de Proyecto”] = Proyecto.LookupId;

      properties.ListItem.Update();
    }


    Fuente: http://surpoint.blogspot.com/2009/12/manejadores-de-eventos-en-sharepoint.html


    Ver todos los "mini-trucos" en http://surpoint.blogspot.com/search/label/Mini-truco

    martes, 29 de diciembre de 2009

    Mini-truco del día: SPFieldURLValue (SharePoint)

    ¿Cómo cargar una campo de tipo URL programáticamente?
    Veamos un ejemplo desde un evento:

    public override void ItemAdded (SpItemEventProperties properties)
    {
      SPFieldURLValue AgregarActividad = new SPFieldURLValue();
      AgregarAcividad.Description = “Agregar Actividad…”;
      AgregarActividad.URL = “/g/Lists/Fases/NewForm.aspx”;
      properties.ListItem[“Agregar actividad”] = AgregarActividad;
      properties.ListItem.Update();
    }

    Fuente: http://surpoint.blogspot.com/2009/12/manejadores-de-eventos-en-sharepoint.html

    Ver todos los "mini-trucos" en http://surpoint.blogspot.com/search/label/Mini-truco

    jueves, 17 de diciembre de 2009

    Manejadores de eventos en SharePoint

    Los manejadores de eventos constituyen una de las funcionalidades más sencillas de utilizar a la hora de extender nuestras aplicaciones de SharePoint a través del desarrollo. Básicamente permiten agregar comportamiento a nuestra aplicación e implementar reglas de negocio.
    Este post pretender describir todos los aspectos de esta técnica, desde la parte conceptual hasta la parte de código con algunos ejemplos en Visual Studio. Está basado en el webcast que dicté el 16/12/2009. Como siempre, espero que les sea útil.

    WebCast

    Si desean ver el webcast, pueden hacerlo desde:
    Si desean ver la presentación que utilicé en el webcast pueden verla aquí:

    Introducción

    Los manejadores de eventos permiten extender a través de desarrollo una aplicación SharePoint. Agregan comportamiento a listas e ítems entre otros. Un manejador de evento se ejecuta automáticamente como respuesta a un evento como agregar una columna en una lista o modificar un ítem en una lista. Pueden servir para:
    • Validaciones de datos
    • Control de integridad referencial
    • Control de unicidad
    • Ejecución de procesos de negocio
    • Lo que no puede resolver un campo calculado
    • Protección de la parametrización
    • Cambios en la seguridad
    • Controles de seguridad funcional
    Si conocen triggers de base de datos, verán que tienen un cierto parecido. Si bien son más potentes, podríamos decir que todo lo que se hace con un trigger, puede hacerse con un evento en SharePoint. Esto puede darles una idea del potencial de esta técnica.

    ¿Qué eventos maneja SharePoint?

    El siguiente gráfico resume los eventos soportados por SP. Pueden observar que existen eventos a nivel de ítems de lista (los que se parecen a los triggers), pero también eventos a nivel de lista, sitio, colección de sitio o característica:
    image

    Imaginen lo que se puede hacer...

    A continuación les daré algunas ideas de lo que se puede hacer con eventos. Son sólo ideas. Es mucho más lo que se puede hacer, pero les servirá de inspiración. Lo importante es que realmente resuelven temas que no existen en SP "out of the box", en forma bastante sencilla:
    image

    Tipos de eventos ¿antes o después? ¿sincrónicos o a-sincrónicos?

    Es importante aclarar que existen dos tipos de eventos, los que se ejecutan antes de que se efectúe el "commit" de la transacción en la base de datos de contenido y los que se disparan luego de que se ejecute el "commit". Los primeros son sincrónicos, los segundos a-sincrónicos (en SP 2007, en 2010 es configurable).
    image
    El siguiente es el mapa completo de todos los eventos que SP 2007 maneja, incluye sus variantes sincrónicas y a-sincrónicas:
    image

    Evento o Flujo de Trabajo

    Por sugerencia de Angel Acha Lizama luego del webcast, me pareció importante incluir una breve comparación entre Eventos y Flujos de trabajo porque son técnicas que tienen algún punto en común y el lector podría encontrar difícil la decisión de cuál usar en cada caso.
    En líneas generales tengan en cuenta que un flujo de trabajo suele tener interacción con los usuarios a través de pantallas, puede perdurar en el tiempo (días, semanas, meses, etc.) y requiere persistir la información.
    Un evento responde a una transacción y se ejecuta en el momento, no tiene pantallas asociadas, su duración es breve y no debe ser retomado luego de un tiempo, como sucede con un flujo de trabajo.
    Les dejo este enlace que me pasó Angel, si quieren ampliar el tema: http://msdn.microsoft.com/en-us/library/ee413841.aspx

    Pasos para crear un evento

    La siguiente lámina muestras los pasos que se deben seguir para crear un evento. No estamos usando ninguna herramienta, ni extensión para SharePoint que nos facilite la creación, con el fin de explicar los conceptos básicos.
    image

    Paso 1: crear el proyecto

    Si necesitan ayuda con este paso, les dejo este enlace que lo explica en forma detallada: http://sharepoint-puntodeencuentro.blogspot.com/2008/09/registrar-un-evento-mediante-una.html

    Paso 2: definición de una clase

    Ejemplo muy sencillo de definición de clase, cuyo objetivo es impedir que un administrador agregue columnas en una lista:
    image

    Paso 3: binding

    Existen dos formas de vincular la definición de una clase de un evento a una entidad (lista, característica, etc): 1) a través de XML dentro de una característica y 2) programáticamente. Estas dos formas apuntan a objetivos distintos. A continuación veremos dos ejemplos:
    Binding XML
    image

    Observaciones
    • Sólo pueden registrarse en características cuyo ámbito sea «site».
    • Sólo se puede registrar el evento para un «tipo de lista», no para una lista en particular.
    • También se puede registrar eventos para tipos de contenidos o features.
    • «SequenceNumber» indica el órden cuándo tengo más de un evento.
    Binding en forma programática
    A diferencia de la opción vía XML, nos permite vincular un evento a una lista específica, en lugar de a un tipo de lista. Ejemplo:
    image





    Demostraciones



    A continuación dejamos el código fuente de las demostraciones que presentamos en el webcast. Tengan en cuenta que se trata de un prototipo, no una aplicación final, por lo cual nos hemos tomados algunas licencias para escribir código y notarán algunas desprolijidades.







    Demo 1: completando una columna en un evento de ítem



    Este ejemplo muestra como completar un campo dentro de un evento. En el código pueden ver dos ejemplo, un caso común para el campo "Proyecto" y otro para un campo de tipo URL, el campo "Actividad".





    image







    Demo 2: validando integridad en un evento de ítem


    El siguiente ejemplo muestra cómo validar "unicidad" de una columna y cancelar la operación, emitiendo un mensaje al usuario, en caso que no se cumpla esta restricción.





    imageimage 








    image










    Demo 3: ejecutando un proceso de negocio en un evento de ítem


    Este ejemplo muestra cómo a partir de la creación de un ítem, se dispara la creación de ítems en otra lista. Muestra cómo se leen los datos de la lista origen, cómo se recorren esos datos y como se crean los ítems en la lista destino.











    imageimage image













    Demo 4: ejecutando un evento al instalar una característica


    Este último ejemplo nos muestra un ejemplo de evento para una característica. El objetivo es hacer cambios de estilos en SharePoint. Para una explicación más amplia pueden consultar este enlace: http://surpoint.blogspot.com/2009/07/cambios-de-estilos-en-sharepoint.html.











    image
    







    Paso 4: instalar


    No voy a bajar a detalle con este paso, pero quería dejarles el contenido del ."bat" en dónde se muestra la instalación de la dll en la GAC, el copiado de los archivos XML y la instalación de la característica en SharePoint:










    image







    SharePoint 2010


    El siguiente gráfico resume las novedades en SharePoint 2010 respecto a eventos. Lo más importante es saber que hay algunos eventos nuevos, pero fundamentalmente que los eventos "before" pueden ser sincrónicos o a-sincrónicos. Al final de este artículo les dejo un enlace por si necesitan ampliar este tema.







    image


    Un tema relacionado que no debemos dejar pasar es que SP 2010 agrega el concepto de validación de campos "Out of the box". Esto es mucho más sencillo de usar que programar un evento para validar de datos. La validación se arma con fórmulas similares a la de los campos calculados y es posible especificar el mensaje de error para el usuario. Estas validaciones se pueden crear a nivel de columnas de sitio, o columnas dentro de una lista.










    image






    Fin


    Aquí termino. Espero que les haya sido útil y lo hayan disfrutado. Hasta la próxima!







    Bibliografía y enlaces interesantes


    image Libros




    • Inside Microsoft Windows SharePoint Services 3.0 (Chapter 6)
    • By Ted Pattisonand & Daniel Larson (Microsoft Press)


    Artículos










    jueves, 5 de noviembre de 2009

    Trabajando con tipos de contenido en SharePoint

    Según Microsoft TechNet un tipo de contenido define los atributos de un elemento de la lista, documento o carpeta. Cada tipo de contenido puede especificar: propiedades, flujos de trabajo, eventos, plantillas de documentos y otras características personalizadas.

    Una explicación mía, menos ortodoxa, define a los tipos de contenido como algo muy parecido a los subtipos y supertipos de un modelo de entidad relación. El clásico ejemplo de Empleado Contratado y Empleado en Relación de dependencia puede definirse en forma muy simple en SharePoint, logrando con muy poco esfuerzo pantallas para cada tipo de empleado con sus columnas asociadas.

    Este artículo trata sobre la creación de tipos de contenido en forma programática…

    Introducción

    Los tipos de contenidos trabajan bajo el principio de la herencia. No es posible crear un tipo de contenido desde cero, debe heredar de un tipo de contenido base. Una primera definición al crear un tipo de contenido consiste en definir si será utilizado en listas o librerías de documentos. Los tipos de contenido para librerías de documentos soportan como adicional la posibilidad de especificar plantillas de documentos, por ejemplo en Word.

    Como punto final, es importante saber que los tipos de contenido pueden definir también el comportamiento, a través de flujos de trabajo y manejadores de eventos.

    Crear un tipo de contenido usando CAML

    Para crear un tipo de contenido es necesario haber creado previamente las columnas de sitio. Para cada columna de sitio que incluiremos en nuestro tipo de contenido, debemos incluir un elemento FIELDREF, que defina el GUID y el NAME de la columna, Opcionalmente podemos definir un DISPLAYNAME distinto a NAME.

    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">

      <ContentType ID=""

        Name="EmpleadoContratado"

        Description="Crear un nuevo empleado contratado"

        Version="0"

        Group="Tipos de contenido de SurPoint" >

        <FieldRefs>

         <FieldRef ID="{}" Name="Title" DisplayName="Empleado" Sealed="TRUE" />

         <FieldRef ID="{}" Name="Legajo" DisplayName="Legajo" />

        </FieldRefs>

      </ContentType>

    </Elements>

    El ID especifica el identificador del tipo de contenido y está diseñado para ser recursivo. Cada identificador de tipo de contenido contiene el identificador del tipo de contenido primario, el cual contiene a su vez el identificador del elemento primario de dicho tipo de contenido y así sucesivamente hasta llegar al identificador de tipo de contenido del sistema, inclusive. Mediante el análisis del identificador de tipo de contenido, puede determinar qué tipos de contenido hereda el tipo de contenido y cómo están relacionados dos tipos de contenido [MSDN: Identificadores de tipo de contenido].

    La siguiente imagen muestra la jerarquía de tipos de contenido. Más información en: MSDN: Jerarquía de tipos de contenido base.

    image

    Asociar un tipo de contenido a una lista

    Se puede asociar uno o varios tipos de contenido a una lista en el momento de la definición de la misma utilizando el elemento ContentTypes:

    <ContentTypes>

      <ContentTypeRef ID = "Text">

        <Folder

         TargetName="Text">

        </Folder>

      </ContentTypeRef>

      ...

    </ContentTypes>

    ContentTypeRef establece la referencia al tipo de contenido que queremos asociar con la lista.

    Control de cambios en tipos de contenido

    Pueden establecer un tipo de contenido como sólo lectura, lo cual genera una advertencia para el usuario, pero no impiden que cambie este parámetro.

    Otra alternativa es sellar los tipos de contenido (atributo Sealed), lo cual impide los cambios. El usuario debería ser administrador de la colección de sitios para modificar este parámetro.

    Más información en: MSDN: Control de cambio de tipos de contenido

    Links interesantes

    FIN

    Como verán, el tema es bastante amplio. Finalizo este artículo aquí para dejarles una primera introducción como base.

    Como siempre, espero que les sea útil y que lo disfruten..

    martes, 27 de octubre de 2009

    Lo nuevo de SharePoint Foundation 2010!!

    Les paso un breve resumen de las novedades de SharePoint Foundation 2010, el sucesor de Windows SharePoint Services 3.0. Fuente: What's New in SharePoint Foundation 2010.

    Cuando terminen de leerlo, van a querer instalarlo ya!

    SharePoint Foundation 2010. Lo nuevo.

    Business Connectivity Services  (ex BDC):

    Como todos sabrán, en MOSS 2007 existe algo llamado Business Data Catalog que permite acceso de lectura a sistemas legados. Bien, BDC ha sufrido algunos cambios buenos:

    1. Ahora se llama BCS
    2. Ahora es lectura y escritura!
    3. Ahora permite operaciones batch de múltiples registros.
    4. Ahora puede trabajar con datos de tipo BLOB.
    5. Lo más importante, ya no es exclusivo de MOSS, es parte de SharePoint Foundation (WSS)

    Más información en What's New- Business Connectivity Services.

    Modelo de objetos de Cliente:

    SharePoint Foundation introduce tres API para cliente:

    1. .Net Framework
    2. Silverlight
    3. ECMAScript (JavaScript, JScript)

    Estas APIs permiten inter-operar con el servidor y son más sencillas que el uso de WebServices. Más información en What's New- Client Object Model:

    Mejoras en eventos:

    Algunas de las mejoras:

    1. Evento On Create de listas
    2. Eventos after sincrónicos!
    3. Evento Add en sitios
    4. Evento Add y Delete en listas

    Más información en What's New- Events Improvements.

    Mcirosoft Synch Framework

    Es una arquitectura de sincronización global y unificada que permite a Microsoft y otras aplicaciones de terceros sincronizar más fácilmente con SharePoint 2010 Fundation. Más información en What's New- Microsoft Synch Framework.

    Mejoras en el desarrollo para móviles

    1. Las webparts pueden ahora adpatarse para móviles a través de mobile adapters.
    2. Alertas SMS: Sí, leíste bien, ahora las alertas pueden convertirse en SMS y llegar a un celular.
    3. Alrededor de 60 nuevos controles para móviles.

    Más información en What's New- Mobile Device Development Enhancements.

    Mejoras en consultas!!

    1. Creo que todos saben que ahora existe LINQ to SharePoint Provider
    2. Pero a eso agreguen la posibilidad de hacer join con CAML
    3. Y a eso agreguen hacer consultas desde el modelo de objetos del cliente

    Qué se elimina? En realidad se mantiene, pero se recomienda no usar:

    • Web Services para acceder a datos
    • Llamadas directas a owsscr.dll

    Más información en: What's New- Query Enhancements.

    Ribbon:

    Básicamente es una nueva barra de herramientas. Una imagen vale más que mil palabras:

    image 

    Más información en What's New- Ribbon.

    Soluciones Standboxed

    Permite a los usuarios subir código personalizado dentro del contexto de una colección de sitios.

    image

    Más información en What's New- Sandboxed Solutions.

    Services Aplication Framework

    Proporciona una plataforma que permite a los desarrolladores construir aplicaciones escalables. Ayuda a equilibrar la carga y gestión de los servicios de SharePoint. Proporciona más de 20 servicios que están integrados en el producto básico. Por ejemplo, la búsqueda de SharePoint es ejecutada por este framework.

    Reemplaza al Service Application Framework Microsoft Office SharePoint Server 2007. Más información en What's New- Service Application Framework.

    Silverlight & Fluid Application Model

    Ahora se puede hostear una aplicación Silverlight dentro de una WebPart, de la misma manera que se pueden integrar aplicaciones externas dentro de una WebPart en forma segura. Para mayor información consultar What's New- Silverlight Integration and the Fluid Application Model.

    Mejoras en la interfaz de usuario

    Como ya se mencionó anteriormente, una de las mejoras es la Ribbon.

    Otro cambio significativo es que ahora la master page es compartida por las applications pages y las sites pages. Esto no era así en WSS3 (consultar el artículo Master pages en SharePoint). Finalmente se renovaron las hojas de estilo, facilitando su personalización y performance. Más información en What's New- UI Improvements.

    Windows PoweShell para SharePoint

    Es una nueva herramienat de línea de comandos que soprota lenguaje de script que complementa CMD.EXE. Es el reemplazo de STSADM. Más información en What's New- Windows PowerShell for SharePoint.

    Mejoras en flujos de trabajo

    Entres las mejoras se pueden identificar:

    1. Nuevas actividades.
    2. Interacción con más eventos y posibilidad de crear nuestros propios manejadores de eventos.
    3. Ahora los flujos de trabajo pueden depender de sitios, no sólo de listas.
    4. Flujos de trabajo que pueden ser ejecutados con permisos elevados, no con los permisos del iniciador.
    5. Se pueden reusar los flujos de trabajo y aplicar a varias listas.

    Más información en What's New- Workflow Improvements.

     

    Aquí termina. Consideren todo este material como “beta”. Acepto todo tipo de comentarios y aportes para ampliar estos temas, ya que todo es nuevo, hay poca información y pude haber cometido errores de interpretación.

    Hasta la próxima!

    Master pages en SharePoint

    WSS 3 fue diseñado para trabajar con páginas maestras, lo que constituye un importante cambio respecto a WSS 2, y facilita enormemente la personalización de un sitio a través de distintas páginas. En esta artículo comentaré algunos puntos importantes a tener en cuenta a la hora de trabajar con este tema en SharePoint:

    Introducción

    Las páginas que están vinculadas a una página maestra se denominan content pages. Estas páginas comparten un diseño común, provisto por la página maestra. La página maestra contiene placeholders que pueden ser reemplazados por contenido único.
    Un importante punto a tener en cuenta es que las páginas maestras que utilizan las application pages son distintas a las que utilizan las site pages. La mayoría de las application pages trabajan con la página maestra llamada application.master, que no puede ser personalizada. Si están buscando un método que afecte a los dos tipos de páginas, les recomiendo que lean el artículo Cambios de estilos en SharePoint.
    Default.master es la página estándar  utilizada por por las site pages y pueden encontrarla en C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\GLOBAL\default.master. Cuando ustedes crean un nuevo sitio en SharePoint, se crea automáticamente la galería Master Page con una instancia de la default.master en /_catalogs/masterpage/default.master. A esta altura el lector ya habrá descubierto que las páginas maestras dentro de los sitios se comportan de la misma manera que las páginas de sitio y aplican los mismos conceptos. Por ejemplo, usted podría personalizar una página maestra desde SharePoint Designer y los cambios se almacenarían en la base de datos.
    Qué podemos definir en una página maestra?
    • Vínculos estándar que apliquen a todas las páginas
    • Menús compartidos
    • Iconos, gráficos, logos, etc.
    • Componentes de navegación como el mapa del sitio
    • Named Placeholders
    • Delegate Controls

    Named Placeholders

    Como dijimos anteriormente, los named placeholders constituyen un mecanismo de extensibilidad permitiendo agregar contenido único en una página de sitio o plantilla de páhina que esté vinculada a una página maestra. El siguiente HTML es un pequeño extracto de una página maestra en SharePoint para “graficar” esta funcionalidad.
    <HEAD runat="server">
    <SharePoint:CssLink ID="CssLink1" runat="server"/>
    <SharePoint:Theme ID="Theme1" runat="server"/>
    <Title ID=onetidTitle>
          <asp:ContentPlaceHolder id=PlaceHolderPageTitle runat="server"/>
        </Title>
    </HEAD>

    image 

    CssLink y Theme existen también en application.master y ese es uno de los motivos por el cual afectan a ambos tipos de páginas, a diferencia de la personalización de la página maestra que estamos viendo en este momento.

    Veamos ahora como se ve el named placeholder en una plantilla de página:

    <%@ Page MasterPageFile="~masterurl/default.master" %>
    <asp:Content ID="PageTitle" runat="server" ContentPlaceHolderID="PlaceHolderPageTitle"> Home de Surpoint
    </asp:Content>

    Controles de Navegación

    Varios opciones de navegación pueden ser modificadas en las páginas maestras. Este tema está fuera del alcance de este artículo, pero a modo de ejemplo es bueno saber que puede alterarse mediante programación el funcionamiento de el menú lateral o superior en el evento de activación de una feature. Lo interesante de este punto es que mediante programación de pueden lograr resultados que no pueden alcanzarse con la funcionalidad OOTB (out of the box).

    Delegate controls

    Los controles delegados constituyen una potente funcionalidad de sharepoint que definen regiones dentro de las páginas maestras que pueden ser sustituidas para resolver algún requerimiento. Lo más interesante es que esto puede ser realizado sin necesidad de alterar la página maestra, ya que la operación se realiza a través de una feature. Para mayor información consultar el artículo Mi primer delegate control.

    Personalizando default.master

    Como dijimos anteriormente, esto es algo que puede hacerse mediante Sharepoint Designer. Si optamos por esa opción, sepamos que aplican las reglas de ghosting de las sites pages. En este artículo veremos como realizar estos cambios a través de Visual Studio. Esto abarca tres pasos:

    1. Crear la plantilla de página maestra
    2. Instanciarla
    3. Redireccionar las páginas a nuestra nueva página maestra
    Para crear la plantilla de página maestra, podemos hacer una copia de la default.master y modificarla o empezar desde cero. Recomiendo la primera.

    Para instanciarla, usaremos una feature que incluya un elemento de módulo. Ejemplo:
    <Module Name="MasterPages" List="116" Url="_catalogs/masterpage">
    <File Url="Surpoint.master" Type="GhostableInLibrary" />
    </Module>

    Algunas observaciones:

    • 116 identifica la galería de páginas maestras
    • GhostableInLibrary significa que la página maestra se instanciará en una librería de páginas maestras
    El último paso es redireccionar las páginas de sitio a la nueva página maestra. Afortunadamente esto se puede realizar en forma sencilla programáticamente en un evento de activación de feature.:

    SPWeb sitio= SPContext.Current.Web;
    string PathPagMaestra = sitio.ServerRelativeUrl;
    if (!PathPagMaestra.EndsWith(@"/")) PathPagMaestra+= @"/";
    PathPagMaestra+= @"_catalogs/masterpage/Surpoint.master";
    sitio.MasterUrl = PathPagMaestra;
    sitio.Update();

    Algunas observaciones más:

    • El ámbito de las páginas maestras es sitio (no colección de sitios).
    • Ademas de MasterUrl existe CustomMasterUrl. Esto permite tener una segunda página maestra e intercambiarlas programáticamente.
    Hasta aquí este artículo introductorio. Pueden encontrar información adcional en Automated SharePoint Site Branding.

    Como siempre, espero que les sea útil. Hasta la próxima!

    martes, 6 de octubre de 2009

    Introducción a características (features) de Sharepoint – Parte 1

    La feature es una funcionalidad de WSS 3.0 orientada al desarrollador. Permite definir elementos de sitio y agregarlos al sitio a través del proceso denominado "activación". ¿Qué tipos de elementos permite definir? Comandos de menú, plantillas de páginas, instancias de páginas, definiciones de listas, eventos, workflows entre otros.

    Para crear una feature se necesita crear un archivo XML denominado "feature.xml":

    Feature.xml

    <Feature

    Id=""
    Title="Mi primera feature"
    Description="Esta es la primera feature que desarrollo"
    Scope="Web"
    Hidden="FALSE"
    ImageUrl="...gif"
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
    <ElementManifest Location="elements.xml" />
    </ElementManifests>
    </Feature>

    Los atributos básicos de este XML son:

    • Id: GUID de la característica. Puede ser creado con la aplicación "Create GUID".
    • Scope: una característica se activa o desactiva dentro del alcance definido por el scope: Web / Site / WebApplication / Farm.
    • Hidden: este atributo hará que la característica no sea visible por los usuarios y por lo tanto deberá ser activada en forma obligatoria desde la línea de comandos.
    • ElementManifiest: contiene los elementos que define esta característica. Lo veremos más adelante.

    Más información en MSDN: Trabajo con características y MSDN: Archivos Feature.xml.

    Elements.xml

    Veamos un ejemplo de elements.xml en el que definimos una custom action para el menú "Site Actions".

    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <CustomAction
    Id="SiteActionsToolbar"
    GroupId="SiteActions"
    Location="Microsoft.SharePoint.StandardMenu"
    Sequence="100"
    Title="Mi primera accion"
    Description="una acción de ejemplo"
    ImageUrl="...gif" >
    <UrlAction Url ="/_layouts/SampleUrl.aspx"/>
    </CustomAction>
    </Elements>

    Esta característica agregará la custom action. Los atríbutos más importantes del XML son:

    • Sequence: especifica la prioridad de ordenamiento.
    • URLAction: la URL de la página que es llamada desde la acción personalizada.

    Más información en MSDN: Creación de una característica simple y MSDN: Elemento CustomAction (Acción personalizada).


    Instalar la característica

    Para instalar una característica se deben realizar dos pasos:

    • Instalación
    • Activación

    Esto se describe en otro artículo: surpoint: Instalando una feature en sharepoint.

    Agregando un evento a una característica

    Avancemos un poco más y veamos como agregar un evento a una característica, evento que se ejecutará cuando la característica de active por ejemplo.

    using System;
    using Microsoft.SharePoint;
    namespace surpoint{
    public class FeatureReceiver : SPFeatureReceiver {
    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
    SPWeb site = SPContext.Current.Web;
    site.ApplyTheme("Wheat");
    site.Update();
    }

    Esta característica modifica el tema de SharePoint en el momento en que la característica es activada. Para que funcione correctamente, debe modificarse el archivo "feature.xml" como se indica a continuación:

    <Feature

    Id=""
    Title="Mi primera feature"
    Description="Esta es la primera feature que desarrollo"
    Version="1.0.0.0"
    Scope="Web"
    Hidden="FALSE"
    ImageUrl="...gif"
    ReceiverAssembly="surpoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=..."
    ReceiverClass="surpoint.FeatureReciever"
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
    <ElementManifest Location="elements.xml" />
    </ElementManifests>
    </Feature>

    Es importante realizar un ISSRESET porque los ensamblados instalados en la GAC están cacheados.

    Más información en:

    Creando un control delegado

    La forma de crear una característica con un control delegado se describe en otro artículo: surpoint: Mi primer "delegate control".

    Hasta aquí la parte 1. Que la disfruten y en breve la parte 2…