Exportar (0) Imprimir
Expandir todo

Procedimiento para crear e insertar eventos en el suministro de noticias de un usuario

SharePoint 2010

Última modificación: martes, 30 de marzo de 2010

Hace referencia a: SharePoint Server 2010

Microsoft SharePoint Server 2010 le permite ampliar la página Mi suministro de noticias en el host de Mi sitio mediante la creación e inserción de eventos en el suministro de noticias de un único usuario, o realizar una multidifusión de eventos en suministros de noticias de varios usuarios. Los ejemplos siguientes siguen el mismo patrón. Crean una actividad en la que el propietario y el publicador son el mismo usuario. Posteriormente, insertan el evento en suministros de noticias de otros usuarios al copiar el evento e identificar a los compañeros del usuario original como los propietarios de las copias. Vea Ejemplo de código: aplicación de consola de eventos de actividad de multidifusión y Ejemplo de código: envío de un vínculo al evento de actividad de los compañeros para obtener ejemplos de código que demuestren cómo llevar a cabo las tareas incluidas en este tema. En este tema se da por supuesta la adición de las siguientes referencias al proyecto de Microsoft Visual Studio 2010:

Nota importante Importante

Para proteger la privacidad del usuario, debe tener permisos administrativos para el perfil de usuario de la aplicación de servicios para crear eventos de actividad e insertarlos en los suministros de noticias de los usuarios.

  • Microsoft.SharePoint

  • Microsoft.Office.Server

  • Microsoft.Office.Server.UserProfiles

  • System.Web

El método de ejemplo siguiente crea un objeto ActivityEvent para un ActivityType hipotético que representa la acción de un usuario que envía una dirección URL y un texto explicativo a todos los compañeros del usuario. El método toma objetos UserProfile que representan al propietario y publicador del evento, un objeto ActivityType que el ActivityManager puede utilizar para crear un ActivityEvent nuevo y cadenas que representan la dirección URL y el texto explicativo ligado al evento.

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 properties.
  ActivityManager am = new ActivityManager();
  ActivityEvent activityEvent = ActivityEvent.CreateActivityEvent(am, activityType.ActivityTypeId, ownerMP, publisherMP);

  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();

  return activityEvent;
}

Este método CreateActivity puede crear el ActivityEvent original en el que el propietario y el publicador son el mismo usuario. También puede insertar el mismo evento en suministros de noticias de otros usuarios. En el siguiente ejemplo se recorre la lista de compañeros del usuario y se crea una actividad con cada compañero identificado como el propietario.

foreach (Colleague colleague in publisher.Colleagues.GetItems())
{
  //Set the owner of the activity to the colleague.
  CreateActivity(colleague.Profile, publisher, activityType, txtNote.Text, strUrl);
}

La clase ActivityFeedGatherer le permite realizar una multidifusión de los eventos a varios usuarios. Los métodos de la clase ActivityFeedGatherer pueden resultar especialmente útiles en los casos en los que desee insertar eventos de varios publicadores en suministros de noticias de varios usuarios. También debe utilizar este enfoque cuando el rendimiento del sitio es importante.

El método de ejemplo siguiente utiliza cuatro métodos importantes en la clase ActivityFeedGatherer.

El método GetUsersColleaguesAndRights toma una lista de identificadores de propietarios de una lista de objetos ActivityEvent y rellena los dos objetos Dictionary que se pasan como parámetros de salida. El primer objeto Dictionary asigna cada identificador de propietario a un objeto MinimalPerson que representa a cada propietario. El segundo objeto Dictionary asigna cada identificador de propietario a una lista de objetos MinimalPerson que representan a los compañeros de cada uno de los propietarios.

ActivityFeedGatherer.GetUsersColleaguesAndRights(m_ActivityManager, publishers, out owners, out colleaguesOfOwners);

El método MulticastActivityEvents toma una lista de objetos ActivityEvent y los distribuye a los compañeros que devuelve el segundo Dictionary. Para ello, realiza copias de cada objeto ActivityEvent y convierte a cada compañero en el propietario de una copia nueva. El método MulticastActivityEvents también rellena otro objeto Dictionary que se pasa como parámetro de salida. Este Dictionary asigna cada propietario nuevo a la lista de objetos ActivityEvent recién copiados.

ActivityFeedGatherer.MulticastActivityEvents(m_ActivityManager, m_ActivityEvents, colleaguesOfOwners, out eventsPerOwner);

Estos eventos nuevos deben estar escritos por lotes en la base de datos. El método CollectActivityEventsToConsolidate es un método auxiliar que convierte el diccionario eventsPerOwner en una lista plana de eventos que pueden pasarse al método BatchWriteActivityEvents.

ActivityFeedGatherer.CollectActivityEventsToConsolidate(eventsPerOwner, out eventsToWrite);
ActivityFeedGatherer.BatchWriteActivityEvents(eventsToWrite, startIndex, m_ActivityManager.MaxEventsPerBatch);

El método de ejemplo que sigue combina todos estos métodos ActivityFeedGatherer. También recorre la lista de objetos ActivityEvent que deben escribirse en la base de datos, de modo que no supere el valor de propiedad MaxEventsPerBatch del objeto ActivityManager.

public void MulticastPublishedEvents(List<ActivityEvent> m_ActivityEvents, ActivityManager m_ActivityManager)
{
   if (m_ActivityEvents.Count == 0)
   return;

   List<long> publishers = new List<long>();

//Populate the list of publishers.
   foreach (ActivityEvent activityEvent in m_ActivityEvents)
   {
      if (!publishers.Contains(activityEvent.Owner.Id))
      publishers.Add(activityEvent.Owner.Id);
   }

//Create the Dictionary objects that will contain the owners and colleagues.
   Dictionary<long, MinimalPerson> owners;
   Dictionary<long, List<MinimalPerson>> colleaguesOfOwners;
   Dictionary<long, List<ActivityEvent>> eventsPerOwner;

//Get the colleagues of the ActivityEvent publishers.
   ActivityFeedGatherer.GetUsersColleaguesAndRights(m_ActivityManager, publishers, out owners, out colleaguesOfOwners);

//Multicast the events.
   ActivityFeedGatherer.MulticastActivityEvents(m_ActivityManager, m_ActivityEvents, colleaguesOfOwners, out eventsPerOwner);

//Create a list of events that need to be written to the database.
   List<ActivityEvent> eventsToWrite;
   ActivityFeedGatherer.CollectActivityEventsToConsolidate(eventsPerOwner, out eventsToWrite);

//Iterate through the eventsToWrite list to ensure that you do not exceed
//the value of the MaxEventsPerBatch property.
   int startIndex = 0;
   while (startIndex + m_ActivityManager.MaxEventsPerBatch < eventsToWrite.Count)
   {
      ActivityFeedGatherer.BatchWriteActivityEvents(eventsToWrite, startIndex, m_ActivityManager.MaxEventsPerBatch);
      startIndex += m_ActivityManager.MaxEventsPerBatch;
   }
   ActivityFeedGatherer.BatchWriteActivityEvents(eventsToWrite, startIndex, eventsToWrite.Count - startIndex);
}

Mostrar:
© 2014 Microsoft