Freigeben über


Codebeispiel: Aktivitätsereignis "Send a Link to Your Colleagues"

Letzte Änderung: Montag, 22. August 2011

Gilt für: SharePoint Server 2010

Inhalt dieses Artikels
Einführung in SharePoint-Aktivitäten
Erstellen und Veröffentlichen von Aktivitätsereignissen
Erstellen und Ausführen des Beispiels

In diesem Beispiel wird veranschaulicht, wie ActivityType-Objekte und ActivityEvent-Objekte erstellt und neue ActivityEvent-Objekte in die Newsfeeds von Benutzern eingefügt werden. Es wird ein einfaches Formular erstellt, das es Benutzern ermöglicht, in wenigen einfachen Schritten Links für Kollegen freizugeben. Die Benutzeroberfläche enthält ein Popupfeld, das Benutzer zum Einfügen von URLs und Kommentaren in die Newsfeeds von Kollegen verwenden können.

Beispielcode von:MVP-Mitwirkender Mathew McDermott, Catapult Systems | MVP-Mitwirkender Andrew Connell, Critical Path Training, LLC

Installieren Sie das Codebeispiel auf Ihrem Computer, indem Sie das Microsoft SharePoint 2010 Software Development Kit (SDK) herunterladen oder das Beispiel aus der Code Gallery herunterladen. Wenn Sie das SharePoint 2010 SDK herunterladen, wird das Beispiel im folgenden Speicherort im Dateisystem installiert: C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples\Social Data and User Profiles.

Einführung in SharePoint-Aktivitäten

Microsoft SharePoint Server 2010 stellt die Konsolidierung überwachter Ereignisse und Benachrichtigungen über die Seite Newsfeed in Mein Websitehost bereit. Durch diese neue Seite und dieses neue Feature kann der Benutzer auf Aktualisierungen aus dem gesamten Unternehmen an einer einzelnen Stelle zugreifen. Der Benutzer kann sozusagen "der Teilnahme" an den News und der Anzeige von Informationen "zustimmen" (sogenanntes Opt-In), die mit dem Bild des Benutzers und Links zu zugehörigen Informationen formatiert sind. Dadurch wird Newsfeed zu einem nützlichen Ort für die zusätzliche Anwendungsbenachrichtigung. Jedes Newsfeedelement zeigt den Inhalt eines ActivityEvent-Objekts an.

Aktivitätsvorlagen

Der Entwurf der Aktivität beginnt mit einem einfachen Satz. Wenn beispielsweise ein neues ActivityType-Objekt erstellt wird, das angibt, dass ein Kollege einen Link für Sie freigeben möchte, sieht der Satz dem folgenden ähnlich:

Jörg Bott hat Ihnen den folgenden interessanten Link gesendet: Großartiger SharePoint-Artikel

Der variable Abschnitt der Aktivität ist Jörg Bott, und der linkText lautet Großartiger SharePoint-Artikel. Bei der Entwicklung einer Aktivitätstypvorlage ersetzen Sie die variablen Abschnitte durch ein Token, wie in der folgenden Beispielvorlage veranschaulicht:

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

Die Token werden von der benutzerdefinierten Anwendung, die Sie entwickeln, mit den notwendigen Informationen aufgefüllt. Der Vorlagentext wird den Servern als Ressourcendatei bereitgestellt, um die Lokalisierung in die gewünschten Zielsprachen zu vereinfachen. Weitere Informationen zum Erstellen und Verwenden von Ressourcendateien finden Sie unter Arbeiten mit Ressourcendateien.

Bereitstellen dieser Lösung

In Tabelle 1 werden die Komponenten aufgeführt, die für diese Aktivitätsfeedlösung erforderlich sind.

Tabelle 1. Erforderliche Komponenten der Aktivitätsfeedlösung

Projektposten

Ziel

Projektassembly (DLL)

Globaler Assemblycache

Ressourcendateien der Aktivitätsvorlage (RESX)

Verzeichnis Resources

Anwendungsseite (ASPX)

Template/Layouts/MSDN

Nach dem Bereitstellen der Aktivitätsposten müssen das neue ActivityType-Objekt und das zugeordnete ActivityTemplate-Objekt von einem Ereignisempfänger erstellt werden, der die Objekte ActivityType und ActivityTemplate der Ressourcendatei zuordnet. Diese Aktion wird vom Beispielprojekt bei der Bereitstellung der Lösung durchgeführt.

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

Erstellen und Veröffentlichen von Aktivitätsereignissen

Das Entwurfsziel der Beispielanwendung besteht darin, Benutzern ein einfaches Formular bereitzustellen, mit dem sie Links für Kollegen in einigen wenigen Schritten freigeben können. Vergleichbar mit dem Feature "Kategorien und Notizen" wird durch das Feature zum Senden von Links an Kollegen ("Send Link to Colleagues") dem persönlichen Menü ein Menübefehl hinzugefügt, wie in Abbildung 1 veranschaulicht.

Abbildung 1. Menüdetail von "Send link to Colleagues"

Menüdetail von 'Link an Kollegen senden'

Nachdem der Benutzer diesen Befehl ausgewählt hat, wird das Formular Send link to my Colleagues angezeigt.

Abbildung 2. Seite "Send Link to Colleague"

Seite 'Link an Kollegen senden'

ECMAScript (JavaScript, JScript) zum Starten des Formulars stellt die URL des aktuellen Fensters bereit und übergibt sie als Parameter an das Formular, welches die Werte, die übergeben werden, im Abschnitt für das Debuggen anzeigt. Der Benutzer fügt dem Textfeld einen Kommentar hinzu und klickt auf Post, um die benutzerdefinierte Aktivität an Kollegen zu senden.

Erstellen von Aktivitäten

Aktivitäten für den Benutzer werden von der Beispielanwendung in der CreateActivity-Methode erstellt. Diese Methode nimmt das Benutzerprofil des Aktivitätsbesitzers und das Benutzerprofil des Aktivitätsherausgebers als Argumente. Von der Methode wird dann ein MinimalPerson-Objekt für jeden Benutzer erstellt und diese beiden Objekte an die CreateActivityEvent-Methode übergeben. Der Aktivitätslink wird aus der URL und dem Kommentar des Benutzers konstruiert.

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

Senden des Aktivitätsereignisses an die Kollegen des Benutzers

Für diese Lösung werden die Batchmethoden des ActivityFeedGatherer-Objekts verwendet, um die Aktivität per Multicasting an alle Kollegen des Benutzers zu senden.

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

Erstellen und Ausführen des Beispiels

In den folgenden Schritten wird gezeigt, wie Sie das Projekt auf der Entwicklungs- oder Testwebsite testen können.

So erstellen Sie das Beispiel

  1. Erstellen Sie einen Ordner namens Microsoft.SDK.Server.Samples, und entzippen Sie dann die Datei MSDN SharePoint 2010 Activity Feeds - Code.zip im Ordner.

  2. Starten Sie Visual Studio 2010, und öffnen Sie dann die Datei SendColleagueURLNote.sln, die sich in dem Ordner befindet, den Sie in Schritt 1 erstellt haben.

  3. Geben Sie im Fenster Eigenschaften den Wert der Website-URL der absoluten Adresse Ihrer Entwicklungs- oder Testwebsite an (beispielsweise http://meinewebsite/. Beachten Sie dabei den abschließenden Schrägstrich ("/").

  4. Geben Sie in der Datei SendColleagueURLNote.EventReceiver.cs in der SendColleagueURLNoteEventReceiver-Methode die URL für die Website für die SharePoint-Zentraladministration an.

  5. Sofern noch nicht vorhanden, fügen Sie dem Projekt Verweise auf folgende Assemblys hinzu:

    • Microsoft.SharePoint.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.UserProfiles.dll

  6. Fügen Sie die Ressourcendateien im Verzeichnis Resources (URLNote.en-US.resx und URLNote.resx) dem Verzeichnis \Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Resources hinzu.

  7. Klicken Sie im Menü Erstellen auf Projektmappe bereitstellen. Nach dem Erstellen wird die Anwendungsseite auf der Entwicklungs- oder Testwebsite installiert.

So führen Sie das Beispiel aus

  1. Wechseln Sie nach dem Erstellen und Bereitstellen der Projektmappe zu einer Seite in Ihrer SharePoint Server 2010-Website. Wählen Sie im Dropdownmenü oben rechts auf der Seite den Befehl Send Link to Colleagues aus.

  2. Geben Sie einen optionalen Kommentar in das Textfeld ein, und klicken Sie dann auf Post, um den Kommentar und den Link in die Newsfeeds Ihrer Kollegen einzufügen.

Siehe auch

Referenz

Microsoft.Office.Server.ActivityFeed

Konzepte

Verwenden von Aktivitätsfeeds mit dem Objektmodell