Procédure : créer et insérer des événements sur un échange de News d’utilisateur
Dernière modification : mardi 30 mars 2010
S’applique à : SharePoint Server 2010
Microsoft SharePoint Server 2010 vous permet d’étendre la page Mon échange de News sur l’ordinateur hôte Mon site en créant et en insérant des événements dans un échange de News d’utilisateur unique ou en multidiffusant des événements dans plusieurs échanges de News d’utilisateurs. Les exemples ci-dessous suivent le même modèle. Ils créent une activité dans laquelle le propriétaire et l’éditeur sont le même utilisateur. Ils insèrent ensuite l’événement dans les échanges de News d’autres utilisateurs en copiant l’événement et en identifiant les collègues de l’utilisateur d’origine en tant que propriétaires des copies. Pour obtenir des exemples de code qui illustrent comment effectuer des tâches mentionnées dans cette rubrique, voir Exemple de code : application console de multidiffusion d’événements d’activité et Exemple de code : événement d’activité Envoyer un lien à vos collègues. Cette rubrique suppose que vous avez ajouté les références suivantes à votre projet Microsoft Visual Studio 2010 :
Important
Pour protéger la confidentialité des utilisateurs, vous devez disposer des autorisations administratives pour l’application de service Profil utilisateur afin de créer des événements d’activité et de les insérer dans les échanges de News des utilisateurs.
Microsoft.SharePoint
Microsoft.Office.Server
Microsoft.Office.Server.UserProfiles
System.Web
Création et insertion d’un événement dans des échanges de News d’utilisateurs
L’exemple de méthode ci-dessous crée un objet ActivityEvent pour un ActivityType hypothétique qui représente l’action d’un utilisateur qui envoie une URL et un texte explicatif à tous les collègues de l’utilisateur. La méthode prend des objets UserProfile qui représentent le propriétaire et l’éditeur de l’événement, un objet ActivityType que l’ActivityManager peut utiliser pour créer un ActivityEvent, et des chaînes qui représentent l’URL et le texte explicatif liés à l’événement.
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;
}
Cette méthode CreateActivity peut créer l’ActivityEvent d’origine dans lequel le propriétaire et l’éditeur sont le même utilisateur. Elle peut également insérer le même événement dans les échanges de News d’autres utilisateurs. L’exemple ci-dessous parcourt en boucle la liste des collègues de l’utilisateur et crée une activité avec chaque collègue identifié comme propriétaire.
foreach (Colleague colleague in publisher.Colleagues.GetItems())
{
//Set the owner of the activity to the colleague.
CreateActivity(colleague.Profile, publisher, activityType, txtNote.Text, strUrl);
}
Multidiffusion d’événements dans des échanges de News d’utilisateurs
La classe ActivityFeedGatherer vous permet de multidiffuser des événements pour plusieurs utilisateurs. Les méthodes de la classe ActivityFeedGatherer peuvent être particulièrement utiles dans les cas où vous souhaitez insérer des événements de plusieurs éditeurs dans des échanges de News de plusieurs utilisateurs. Vous devez également adopter cette approche chaque fois que les performances du site constituent une préoccupation.
L’exemple de méthode suivant utilise quatre méthodes importantes de la classe ActivityFeedGatherer.
La méthode GetUsersColleaguesAndRights prend une liste d’identificateurs de propriétaires à partir d’une liste d’objets ActivityEvent et remplit deux objets Dictionary qui sont passés comme paramètres de sortie. Le premier objet Dictionary mappe chaque identificateur de propriétaire à un objet MinimalPerson qui représente chaque propriétaire. Le second objet Dictionary mappe chaque identificateur de propriétaire à une liste d’objets MinimalPerson qui représentent les collègues de chaque propriétaire.
ActivityFeedGatherer.GetUsersColleaguesAndRights(m_ActivityManager, publishers, out owners, out colleaguesOfOwners);
La méthode MulticastActivityEvents prend une liste d’objets ActivityEvent et les distribue aux collègues qui sont retournés dans le deuxième Dictionary. Pour cela, elle effectue des copies de chaque objet ActivityEvent et fait de chaque collègue le propriétaire d’une nouvelle copie. La méthode MulticastActivityEvents remplit également un autre objet Dictionary qui est passé comme paramètre de sortie. Ce Dictionary mappe chaque nouveau propriétaire à la liste d’objets ActivityEvent récemment copiés.
ActivityFeedGatherer.MulticastActivityEvents(m_ActivityManager, m_ActivityEvents, colleaguesOfOwners, out eventsPerOwner);
Ces nouveaux événements doivent être écrits par lot dans la base de données. La méthode CollectActivityEventsToConsolidate est une méthode d’assistance qui transforme ce dictionnaire eventsPerOwner en une liste plate d’événements qui peut ensuite être passée à la méthode BatchWriteActivityEvents.
ActivityFeedGatherer.CollectActivityEventsToConsolidate(eventsPerOwner, out eventsToWrite);
ActivityFeedGatherer.BatchWriteActivityEvents(eventsToWrite, startIndex, m_ActivityManager.MaxEventsPerBatch);
L’exemple de méthode suivant combine toutes ces méthodes ActivityFeedGatherer. Il itère également la liste des objets ActivityEvent qui doivent être écrits dans la base de données afin qu’elle ne dépasse pas la valeur de la propriété MaxEventsPerBatch de l’objet 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);
}
Voir aussi
Référence
Microsoft.Office.Server.ActivityFeed
Concepts
Procédure : obtenir des événements pour des utilisateurs
Procédure : créer un nouveau type d’activité