Freigeben über


Codebeispiel: Seite "Colleague Approval Social Tagging Application Page"

Letzte Änderung: Montag, 22. August 2011

Gilt für: SharePoint Server 2010

Die Seite Colleague Approval Social Tagging Application ist eine Anwendungsseite, die Ihre Kollegen aufführt und es ermöglicht, die Zustimmung eines jeden Kollegen durch die Aktivierung eines Kontrollkästchens zu kennzeichnen. Dieses Beispiel ist ein Microsoft Visual Studio 2010 SharePoint-Anwendungsseitenprojekt. Nach der Erstellung und Bereitstellung dieses Projekts auf Ihrer Microsoft SharePoint Server 2010-Site, können Sie diese Seite verwenden, um die Genehmigung aller Benutzer auf Ihrer Kollegenliste zu kennzeichnen. In ihrer gegenwärtigen Form zeigt die Seite nur ein Sternchen, um die Genehmigung zu kennzeichnen. Sie können das Sternchen mit einem beliebigen Symbol oder Bild ersetzen.

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

Verwenden von thematische Kategorien zur Kennzeichnung der Genehmigung eines Elements

Die Anwendung erstellt ein UserProfileManager-Objekt und ein SocialTagManager-Objekt unter Verwendung eines SPServiceContext-Objekts, das Sie mit einer Website oder Websitesammlung erstellen, die Sie direkt in Ihren Code schreiben. Sie ruft auch das den aktuellen Benutzer darstellende UserProfile-Objekt ab. Die Anwendung ruft alle thematischen Kategorien des aktuellen Benutzer ab und erstellt eine Liste von Zeichenfolgen, die die Namen der Kollegen des Benutzers enthalten. Jedes UserProfile-Objekt, das einen Kollegen des aktuellen Benutzers darstellt, besitzt eine PublicUrl-Eigenschaft. Alle Objekte, die durch eine URL dargestellt werden können, können mit einer thematischen Kategorie gekennzeichnet werden. Diese Anwendung könnte somit dahingehenden überarbeitet werden, dass sie es Benutzern ermöglicht, ihre Genehmigung für eine beliebige Gruppe von Elementen zu erteilen, die durch URLs dargestellt werden können, beispielsweise Elemente in einer SharePoint-Liste oder in einer Dokumentbibliothek.

string mySite = "http://mysite";
protected void Page_Load(object sender, EventArgs e)
{

using ( SPSite site = new SPSite(mySite) )
{


//Create UserProfileManager with desired SPContext.
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager myUserProfileManager = new UserProfileManager(serviceContext);
UserProfile myUserProfile = myUserProfileManager.GetUserProfile(true);
SocialTagManager mySocialTagManager = new SocialTagManager(serviceContext);
string [] colleagueAccountNames = new string [myUserProfile.Colleagues.GetItems().GetLength(0)];
SocialTag[] mySocialTags = mySocialTagManager.GetTags(myUserProfile);

Nur Benutzer, die in der Berechtigungs-Zugriffssteuerungsliste (Access Control List, ACL) der Benutzerprofildienst-Anwendung aufgeführt sind, können eine Instanz des UserProfileManager-Objekts erstellen. Führen Sie die Schritte im folgenden Verfahren aus, um einen Benutzer der Berechtigungs-ACL der Benutzerprofildienst-Anwendung hinzuzufügen.

So fügen Sie einen Benutzer zur Berechtigungs-ACL der Benutzerprofildienst-Anwendung hinzu

  1. Wechseln Sie im Browser zur Startseite der SharePoint-Zentraladministration.

  2. Navigieren Sie zur Seite Dienstanwendungen verwalten, die unter der Überschrift Anwendungsverwaltung aufgeführt wird.

  3. Wählen Sie die Option Benutzerprofildienst-Anwendung aus. Klicken Sie auf Berechtigungen.

  4. Fügen Sie in dem Dialogfeld die Benutzerkonten hinzu. Klicken Sie auf OK.

Da thematische Kategorien nur gültige Taxonomieterminologie verwenden, muss die Anwendung zunächst das TaxonomySession-Objekt vom SocialTagManager-Objekt abrufen. Anschließend überprüft die Anwendung, ob die für die Darstellung der Genehmigung verwendete Taxonomieterminologie zurzeit im Terminologiespeicher für Standardschlüsselwörter enthalten ist (dem Standardort für Taxonomieterminologie). In diesem Beispiel wird die Daumen hoch-Terminologie verwendet, diese Terminologie kann jedoch entsprechend Ihren spezifischen Anforderungen geändert werden. Dieser Code kann auch im FeatureActivated-Ereignisempfänger platziert werden, damit er nur einmal ausgeführt wird.

TaxonomySession taxSession = mySocialTagManager.TaxonomySession;
TermStore termStore = taxSession.DefaultKeywordsTermStore;
TermCollection thumbsUp = termStore.KeywordsTermSet.GetTerms("Thumbs Up", true, StringMatchOption.ExactMatch, 1, true);
Term thumbsUpTerm;
if (thumbsUp.Count < 1 || !thumbsUp[0].IsAvailableForTagging)
{
  thumbsUpTerm = termStore.KeywordsTermSet.CreateTerm("Thumbs Up", termStore.DefaultLanguage);
  termStore.CommitAll();
}
else
{
  thumbsUpTerm = thumbsUp[0];
}

Anschließend speichert die Anwendung jeden Kollegen in einem Array von string-Objekten.

int n = 0;
foreach (Colleague colleague in myUserProfile.Colleagues.GetItems())
  { 
    colleagueAccountNames[n] = (string)colleague.Profile[PropertyConstants.AccountName].Value;
    n++;
  }

Nachdem die Kollegen des Benutzers abgerufen wurden, und die Taxonomieterminologie festgelegt wurde, die für die Kennzeichnung der einzelnen Kollegen verwendet wird, überprüft die Anwendung, ob die Seite geladen wurde, nachdem ein Benutzer ein Kontrollkästchen in der Liste der Kollegen des Benutzers aktiviert oder deaktiviert hat. Wenn das Laden der Seite das Ergebnis der Aktivierung oder Deaktivierung eines Kontrollkästchens in dem Formular ist, überprüft die Anwendung, welchen Kollegen der Benutzer markiert oder für welchen Kollegen er die Markierung aufgehoben hat. Die thematische Kategorie wird zu jedem Kollegen hinzugefügt, dessen Name markiert wurde und von jedem Kollegen entfernt, für dessen Namen die Markierung entfernt wurde. Das UserProfileManager-Objekt ruft das UserProfile-Objekt ab, das jeden einzelnen Kollegen darstellt, sodass es thematische Kategorien von der öffentlichen URL eines jeden Kollegen abrufen, hinzufügen oder entfernen kann. Die Anwendung verwendet die HTML-Zeichenreferenz für ein Sternchen (*), um die Genehmigung des aktuellen Benutzers darzustellen. Sie können dieses Symbol entsprechend Ihren spezifischen Anforderungen ändern oder entfernen.

if (IsPostBack)
{
  for (int i = 0; i < CheckBoxList1.Items.Count; i++)
  {
    UserProfile userProfile = myUserProfileManager.GetUserProfile(CheckBoxList1.Items[i].Value);
    Uri userUrl = userProfile.PublicUrl;
    bool itemProcessed = false;
    foreach (SocialTag tag in mySocialTags)
    {
      if (tag.Term == thumbsUpTerm && tag.Url == userUrl && CheckBoxList1.Items[i].Selected == false)
      {
        mySocialTagManager.DeleteTag(userUrl, thumbsUpTerm);
        CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
        itemProcessed = true;
      }
      else if (tag.Term == thumbsUpTerm && tag.Url == userUrl)
      {
        CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " &#42;";
        itemProcessed = true;
      }

    }
    if (CheckBoxList1.Items[i].Selected == true && !itemProcessed)
    {
      SocialTag thumbsUpTag = mySocialTagManager.AddTag(userUrl, thumbsUpTerm);
      CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " &#42;";
      itemProcessed = true;
    }
    else if (!itemProcessed)
    {
      CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
    }
  }
}

Wenn das Laden der Seite das Ergebnis der Navigation eines Benutzers zu der Seite ist, ohne dass ein Kontrollkästchen in der Liste aktiviert oder deaktiviert wurde, füllt die Anwendung die Kontrollkästchenliste mit den Namen aller Kollegen des Benutzers aus und überprüft, ob alle Kollegen markiert wurden.

else
{
  CheckBoxList1.DataSource = colleagueAccountNames;
  CheckBoxList1.DataBind();
  for (int i = 0; i < CheckBoxList1.Items.Count; i++)
  {
    UserProfile userProfile = myUserProfileManager.GetUserProfile(CheckBoxList1.Items[i].Value);
    Uri userUrl = userProfile.PublicUrl;
    bool itemProcessed = false;
    foreach (SocialTag tag in mySocialTags)
    {
      if (tag.Term == thumbsUpTerm && tag.Url == userUrl && !itemProcessed)
      {
        CheckBoxList1.Items[i].Selected = true;
        CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " &#42;";
        itemProcessed = true;
      }
    }
    if ( !itemProcessed )
    {
      CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
    }
  }
}

}
}

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 mit dem Namen Microsoft.SDK.Server.Samples, und entpacken Sie die Datei RatingColleagues.zip darin.

  2. Starten Sie Visual Studio 2010, und öffnen Sie anschließend die Datei RatingColleagues.sln, die sich in dem in Schritt 1 erstellten Ordner befindet.

  3. Geben Sie im Fenster Eigenschaften die URL der absoluten Adresse Ihrer Entwicklungs- oder Testwebsite an (beispielsweise http://meinwebesite/). Achten Sie darauf, den abschließenden Schrägstrich hinzuzufügen. Verwenden Sie diese URL als Wert der Variablen meineWebsite in der Datei ColleagueRating.aspx.cs.

  4. Falls diese noch nicht vorhanden sind, fügen Sie dem Projekt Verweise auf folgende Assemblies hinzu:

    • Microsoft.SharePoint.dll

    • Microsoft.SharePoint.Taxonomy.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.UserProfiles.dll

  5. Klicken Sie im Menü Erstellen auf Projektmappe bereitstellen. Nach Abschluss der Erstellung wird die Anwendungsseite auf der Entwicklungs- oder Textwebsite installiert.

Ausführen des Beispiels

  • Nachdem die Lösung erstellt und bereitgestellt wurde, wechseln Sie zu http://meinewebsite/_layouts/ColleagueRating.aspx. Die Namen der Benutzerkonten Ihrer Kollegen werden neben den Kontrollkästchen auf der Seite angezeigt.

Siehe auch

Konzepte

Erstellen und Verwenden von Daten für soziale Netzwerke mit dem Objektmodell

Weitere Ressourcen

Code Gallery