Freigeben über


Gewusst wie: Erstellen und Einfügen von Ereignissen in Benutzernewsfeeds

Letzte Änderung: Dienstag, 30. März 2010

Gilt für: SharePoint Server 2010

Microsoft SharePoint Server 2010 ermöglicht es Ihnen, die Seite Mein Newsfeed auf dem Host Meine Website zu erweitern, indem Sie Ereignisse erstellen und in den Newsfeed eines einzelnen Benutzers einfügen oder indem Sie Ereignisse per Multicasting in die Newsfeeds mehrerer Benutzer einfügen. Die Beispiele weiter unten folgen alle demselben Muster. Sie erstellen eine Aktivität, bei der Besitzer und Herausgeber derselbe Benutzer sind. Anschließend fügen sie das Ereignis in die Newsfeeds anderer Benutzer ein, indem das Ereignis kopiert und die Kollegen des ursprünglichen Benutzers als Besitzer der Kopien identifiziert werden. Codebeispiele, mit denen das Ausführen der in diesem Thema enthaltenen Aufgaben veranschaulicht wird, finden Sie unter Codebeispiel: Multicasting von Aktivitätsereignissen (Konsolenanwendung) und Codebeispiel: Aktivitätsereignis "Send a Link to Your Colleagues". In diesem Thema wird davon ausgegangen, dass Sie dem Microsoft Visual Studio 2010-Projekt die folgenden Verweise hinzugefügt haben:

Wichtiger HinweisWichtig

Zum Schützen der Privatsphäre der Benutzer benötigen Sie Administratorberechtigungen für die Benutzerprofildienst-Anwendung, um Aktivitätsereignisse zu erstellen und sie in Benutzernewsfeeds einzufügen.

  • Microsoft.SharePoint

  • Microsoft.Office.Server

  • Microsoft.Office.Server.UserProfiles

  • System.Web

Erstellen und Einfügen eines Ereignisses in Benutzernewsfeeds

Die folgende Beispielmethode erstellt ein ActivityEvent-Objekt für ein hypothetisches ActivityType-Objekt, das die Aktion eines Benutzers darstellt, der eine URL und erklärenden Text an alle Kollegen des Benutzers sendet. Die Methode akzeptiert UserProfile-Objekte, die den Besitzer und Herausgeber des Ereignisses darstellen, ein ActivityType-Objekt, das das ActivityManager-Objekt zum Erstellen eines neuen ActivityEvent-Objekts verwenden kann, und Zeichenfolgen, die die URL und den erklärenden Text darstellen, die bzw. der mit dem Ereignis verknüpft ist.

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;
}

Diese CreateActivity-Methode kann das ursprüngliche ActivityEvent-Objekt erstellen, für das Besitzer und Herausgeber derselbe Benutzer sind. Es kann dieses Ereignis außerdem in die Newsfeeds anderer Benutzer einfügen. Das folgende Beispiel durchläuft in einer Schleife die Liste der Kollegen des Benutzers und erstellt eine Aktivität, wobei jeder Kollege als Besitzer identifiziert wird.

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

Multicasting von Ereignissen an Benutzernewsfeeds

Die ActivityFeedGatherer-Klasse ermöglicht es Ihnen, Ereignisse per Multicasting an mehrere Benutzer zu senden. Die Methoden in der ActivityFeedGatherer-Klasse können insbesondere dann hilfreich sein, wenn Sie Ereignisse mehrerer Herausgeber in die Newsfeeds mehrerer Benutzer einfügen möchten. Sie sollten diese Strategie auch verwenden, wenn die Leistungsfähigkeit der Website ein Problem darstellen könnte.

Die folgende Beispielmethode verwendet vier wichtige Methoden in der ActivityFeedGatherer-Klasse.

Die GetUsersColleaguesAndRights-Methode akzeptiert eine Liste mit Besitzer-IDs aus einer Liste von ActivityEvent-Objekten und füllt zwei Dictionary-Objekte auf, die als Ausgabeparameter übergeben werden. Das erste Dictionary-Objekt ordnet jede Besitzer-ID einem MinimalPerson-Objekt zu, das den jeweiligen Besitzer darstellt. Das zweite Dictionary-Objekt ordnet jede Besitzer-ID einer Liste von MinimalPerson-Objekten zu, die die Kollegen der einzelnen Besitzer darstellen.

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

Die MulticastActivityEvents-Methode akzeptiert eine Liste von ActivityEvent-Objekten und verteilt sie an die Kollegen, die im zweiten Dictionary-Objekt zurückgegeben werden. Dies erfolgt, indem Kopien der einzelnen ActivityEvent-Objekte erstellt und jeder Kollege als Besitzer einer neuen Kopie festgelegt wird. Die MulticastActivityEvents-Methode füllt außerdem ein weiteres Dictionary-Objekt auf, das als Ausgabeparameter übergeben wird. Dieses Dictionary-Objekt ordnet jeden neuen Besitzer zur Liste der neu kopierten ActivityEvent-Objekte zu.

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

Diese neuen Ereignisse müssen in einer Batchoperation in die Datenbank geschrieben werden. Die CollectActivityEventsToConsolidate-Methode ist eine Hilfsmethode, die dieses eventsPerOwner-Wörterbuch in eine unstrukturierte Liste mit Ereignissen umwandelt, die dann an die BatchWriteActivityEvents-Methode übergeben werden kann.

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

Die nächste Beispielmethode kombiniert diese ActivityFeedGatherer-Methoden. Sie durchläuft außerdem die Liste der ActivityEvent-Objekte, die in die Datenbank geschrieben werden müssen, damit der Wert der MaxEventsPerBatch-Eigenschaft des ActivityManager-Objekts nicht überschritten wird.

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

Siehe auch

Referenz

Microsoft.Office.Server.ActivityFeed

Konzepte

Gewusst wie: Abrufen von Ereignissen für Benutzer

Gewusst wie: Erstellen eines neuen Aktivitätstyps

Weitere Ressourcen

Microsoft SharePoint Server 2010: Aktivitätsfeeds-Konsolenanwendung

Erstellen von Ressourcendateien