Ejemplo de código: envío de un vínculo al evento de actividad de los compañeros

Última modificación: lunes, 22 de agosto de 2011

Hace referencia a: SharePoint Server 2010

En este artículo
Introducción a las actividades de SharePoint
Creación y publicación de eventos de actividad
Desarrollo y ejecución del ejemplo

En este ejemplo se muestra cómo crear objetos ActivityType y ActivityEvent y cómo insertar nuevos objetos ActivityEvent en los suministros de noticias de los usuarios. En este procedimiento se crea un formulario sencillo que permite a los usuarios compartir vínculos con sus compañeros en pocos pasos. La interfaz de usuario incluye un cuadro emergente que los usuarios pueden usar para insertar direcciones URL y comentarios en los suministros de noticias de sus compañeros.

Código de ejemplo creado por:Colaborador MVP Mathew McDermott, Catapult Systems | Colaborador MVP Andrew Connell, Critical Path Training, LLC

Para instalar este ejemplo de código en su equipo, descargue el kit de desarrollo de software de Microsoft SharePoint 2010 (SDK) o descargue el ejemplo de la galería de códigos. Si descarga el SDK de SharePoint 2010, el ejemplo se instala en la siguiente ubicación del sistema de archivos: C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples\Social Data and User Profiles.

Introducción a las actividades de SharePoint

Microsoft SharePoint Server 2010 se encarga de la consolidación de eventos supervisados y notificaciones a través del suministro de noticias en el host de Mi sitio. Esta nueva página y nueva característica permite al usuario concentrarse en una ubicación única para las actualizaciones de la empresa. El usuario puede "suscribirse" a las noticias y una cómoda visualización de la información, con el formato de la imagen del usuario y vínculos a la información asociada. Esto hace que el suministro de noticias sea una ubicación útil para la notificación de aplicaciones adicionales. Cada elemento del suministro de noticias muestra el contenido de un objeto ActivityEvent.

Plantillas de actividad

El diseño de la actividad empieza con una frase sencilla. Por ejemplo, si se crea un nuevo objeto ActivityType que indica que un compañero desea compartir un vínculo con usted, la frase es similar a la siguiente:

Arturo López le envió el siguiente vínculo de interés: Excelente artículo sobre SharePoint

La parte variable de la actividad es Arturo López y el texto del vínculo es Excelente artículo sobre SharePoint. En el desarrollo de una plantilla de tipo de actividad, se sustituyen las partes variables con un token, como en la siguiente plantilla de ejemplo:

{Publisher} has sent you the following link of interest: {Link}

La aplicación personalizada desarrollada rellena los tokens con la información pertinente. El texto de la plantilla se implementa en los servidores como un archivo de recursos, a fin de facilitar la localización en los idiomas de destino deseados. Para obtener más información acerca de cómo crear y usar archivos de recursos, vea el tema sobre cómo trabajar con archivos de recursos.

Implementación de esta solución

La tabla 1 detalla los componentes necesarios en esta solución de fuente de actividades.

Tabla 1. Componentes necesarios de la solución de fuente de actividades

Activo del proyecto

Destino

Ensamblado del proyecto (*.dll)

Caché global de ensamblados

Archivos de recursos de la plantilla de actividad (*.resx)

Directorio de recursos

Página de aplicación (*.aspx)

Plantilla/Diseños/MSDN

Una vez implementados los activos de la actividad, el nuevo objeto ActivityType y el objeto ActivityTemplate asociado deben crearse mediante un receptor de eventos que relacione el objeto ActivityType y el objeto ActivityTemplate con el archivo de recursos. El proyecto de ejemplo realiza esta acción cuando se implementa la solución.

private void SetupCustomActivity(SPSite site)
{
  try
  {
    //Get a Service Context from the site.
    SPServiceContext context = SPServiceContext.GetContext(site);
    //We need a User Profile Manager to work with Activities.
    UserProfileManager upm = new UserProfileManager(context);
    //Grab the current user's profile.
    UserProfile p = upm.GetUserProfile(true);

    Debug.WriteLine("Got the User Profile for: " + p.DisplayName);
    //Grab an activity manager.
    ActivityManager am = new ActivityManager(p, context);
    //Ensure that we have permission to do this.
    bool hasrights = am.PrepareToAllowSchemaChanges();
    Debug.WriteLine("Does installer have Admin rights to change the schema? " + hasrights);

    // Create our activity application.
    Debug.WriteLine("Create our Activity Application");
    ActivityApplication app = am.ActivityApplications["Send Link to Colleague"];
    if (app == null)
    {
      app = am.ActivityApplications.Create("Send Link to Colleague");
      app.Commit();
    }
    Debug.WriteLine("Send Link to Colleague App id: " + app.ApplicationId);

    //Create our Colleagues Activity Type, but first check to see whether it already exists.
    Debug.WriteLine("Activity Type: SendColleagueUrlNote");
    ActivityType activityType = app.ActivityTypes["SendColleagueUrlNote"];
    if (activityType == null)
    {
      activityType = app.ActivityTypes.Create("SendColleagueUrlNote");
      activityType.ActivityTypeNameLocStringResourceFile = resFile;
      activityType.ActivityTypeNameLocStringName = "ActivityFeed_SendColleagueUrlNote_Type_Display";
      activityType.IsPublished = true;
      activityType.IsConsolidated = true;
      activityType.Commit();
    }
    //SendColleagueUrlNote Activity Template.
    Debug.WriteLine("SendColleagueUrlNote Activity Single Value Template");
    ActivityTemplate urlTemplateSV = activityType.ActivityTemplates[ActivityTemplatesCollection.CreateKey(false)];
    if (urlTemplateSV == null)
    {
      urlTemplateSV = activityType.ActivityTemplates.Create(false);
      urlTemplateSV.TitleFormatLocStringResourceFile = resFile;
      urlTemplateSV.TitleFormatLocStringName = "ActivityFeed_SendColleagueUrlNote_SV_Template";
      urlTemplateSV.Commit();
     }

Creación y publicación de eventos de actividad

El objetivo de diseño de la aplicación de ejemplo es proporcionar a los usuarios un formulario sencillo que les permita compartir vínculos con sus compañeros en pocos pasos. Modelado a partir de la característica Etiquetas y notas, la característica de envío de vínculos a compañeros Send Link to Colleague agrega un elemento de menú al menú personal, tal como se muestra en la figura 1.

Figura 1. Detalle del menú de envío de vínculo a compañeros

Detalle del menú de envío de vínculo a compañeros

Una vez que el usuario selecciona este elemento de menú, se muestra el formulario Send Link to Colleague.

Figura 2. Página de envío de vínculo a compañeros

Página de envío de vínculo a compañeros

El ECMAScript (JavaScript, JScript) que se usa para iniciar el formulario proporciona la dirección URL de la ventana activa y la pasa como parámetro al formulario, que muestra en la sección de depuración los valores que se pasan. Para enviar la actividad personalizada a sus compañeros, el usuario agrega una nota en el cuadro de texto y hace clic en Post.

Creación de actividades

La aplicación de ejemplo crea actividades para el usuario en el método CreateActivity. Este método toma como argumentos el perfil de usuario del propietario de la actividad y el perfil de usuario del publicador de la actividad. A continuación, crea un objeto MinimalPerson para cada usuario y lo pasa al método CreateActivityEvent. El vínculo de la actividad se construye a partir de la dirección URL y la nota proporcionada por el usuario.

public ActivityEvent CreateActivity(UserProfile ownerProfile, UserProfile publisherProfile, ActivityType activityType, string linkText, string linkUrl)
{
  //Get the Owner and Publisher Profile.
  Entity ownerMP = new MinimalPerson(ownerProfile).CreateEntity(activityManager);
  Entity publisherMP = new MinimalPerson(publisherProfile).CreateEntity(activityManager);

  //Create the activity and set some properties.
  ActivityManager am = new ActivityManager();
  ActivityEvent activityEvent = ActivityEvent.CreateActivityEvent(am, activityType.ActivityTypeId, ownerMP, publisherMP);

  Debug.WriteLine("Got my ActivityEvent");
  activityEvent.Name = activityType.ActivityTypeName;
  activityEvent.ItemPrivacy = (int)Privacy.Public;
  activityEvent.Owner = ownerMP;
  activityEvent.Publisher = publisherMP;
           
  //Create the link for the activity.
  Link link = new Link();
  link.Href = linkUrl;
  link.Name = linkText;
  activityEvent.Link = link;
  //Save your work.
  activityEvent.Commit();

  Debug.WriteLine("End of Activity event: " + activityType.ActivityTypeName);
  return activityEvent;
}

Envío del evento de actividad a los compañeros del usuario

Esta solución usa los métodos por lotes proporcionados por el objeto ActivityFeedGatherer para realizar una multidifusión de la actividad a todos los compañeros del usuario.

//Send activity to the Owner’s Colleagues.
//Create Dictionary objects that will be output parameters for the batch gatherer methods.
  Dictionary<long, MinimalPerson> owners;
  Dictionary<long, List<MinimalPerson>> colleaguesOfOwners;
//Create List objects that contain the ActivityEvent and its publisher.
  List<ActivityEvent> events = new List<ActivityEvent>();
  events.Add(activityEvent);
  List<long> publishers = new List<long>();
  publishers.Add(activityEvent.Owner.Id);
  ActivityFeedGatherer.GetUsersColleaguesAndRights(activityManager, publishers, out owners, out colleaguesOfOwners);
  Dictionary<long, List<ActivityEvent>> eventsConsolidatedPerOwner;
  ActivityFeedGatherer.MulticastActivityEvents(activityManager, events, colleaguesOfOwners, out eventsConsolidatedPerOwner);
  List<ActivityEvent> eventsConsolidated;
  ActivityFeedGatherer.CollectActivityEventsToConsolidate(eventsConsolidatedPerOwner, out eventsConsolidated);
  ActivityFeedGatherer.BatchWriteActivityEvents(eventsConsolidated, 0, events.Count);

Desarrollo y ejecución del ejemplo

En los siguientes pasos, se demuestra cómo probar este proyecto en el sitio de prueba o desarrollo.

Para generar el ejemplo

  1. Cree una carpeta denominada Microsoft.SDK.Server.Samples y, a continuación, descomprima el archivo MSDN SharePoint 2010 Activity Feeds - Code.zip en ella.

  2. Inicie Visual Studio 2010 y, a continuación, abra el archivo SendColleagueURLNote.sln, que se encuentra en la carpeta creada en el paso 1.

  3. En la ventana Propiedades, especifique el valor de la dirección URL de sitio de la dirección absoluta del sitio de prueba o desarrollo (por ejemplo, http://misitio/). Asegúrese de incluir la barra diagonal de cierre.

  4. En el archivo SendColleagueURLNote.EventReceiver.cs, en el método SendColleagueURLNoteEventReceiver, especifique la dirección URL del sitio de Administración central de SharePoint.

  5. Si todavía no existen, agregue referencias a los siguientes ensamblados del proyecto:

    • Microsoft.SharePoint.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.UserProfiles.dll

  6. Agregue los archivos de recursos del directorio Recursos (URLNote.en-US.resx y URLNote.resx) al directorio \Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Resources.

  7. En el menú Generar, seleccione Implementar solución. Una vez completada la creación, la página de la aplicación se instala en el sitio de prueba o desarrollo.

Para ejecutar el ejemplo

  1. Una vez que se haya creado e implementado la solución, vaya a la página del sitio de SharePoint Server 2010. En el menú desplegable ubicado en la parte superior derecha de la página, seleccione Send Link to Colleague.

  2. Escriba una nota opcional en el cuadro de texto y, a continuación, haga clic en Post para insertar la nota y el vínculo en los suministros de noticias de sus compañeros.

Vea también

Referencia

Microsoft.Office.Server.ActivityFeed

Conceptos

Uso de fuentes de actividades con el modelo de objetos