Erstellen eines SharePoint 2010-Steuerelements für die Personenauswahl für Silverlight
Veröffentlichung des Originalartikels: 10.08.2011
Eines der am meisten vermissten Elemente in der Silverlight-Toolbox für SharePoint-Entwickler ist ein Steuerelement zur Personenauswahl. SharePoint stellt ein Steuerelement zur Verfügung, das Sie in einem Webpart oder einer benutzerdefinierten Layoutseite verwenden können (die Klasse PeopleEditor). Silverlight-Code wird jedoch gänzlich auf Clientseite ausgeführt, sodass es für dieses Problem keine Standardlösung gibt. Ich benötigte diese Funktionalität unlängst für ein Projekt und fand schließlich eine relativ einfache Möglichkeit, das gewünschte Steuerelement zu erstellen. Hier sehen Sie ein Bildschirmfoto meines zugegebenermaßen nicht sehr elaborierten Auswahlsteuerelements, das als Popup in Silverlight implementiert wurde:
Der Schlüssel zu dieser Lösung ist ein netter kleiner Webdienst im Standardfunktionsumfang von SharePoint mit dem Namen Personen. In diesem Fall verwendete ich die Methode SearchPrincipals, um anhand des in das Suchfeld eingegebenen Texts eine Liste möglicher Entsprechungen zu finden. Im einfachsten Fall musste ich nur einen einzigen Benutzer finden. Ich hätte aber auch Gruppen, Verteilerlisten oder SharePoint-Sicherheitsgruppen abfragen können. Sie können auch eine eigene Version des Eingabesteuerelements implementieren, indem Sie einen Benutzer einen Namen eingeben lassen und anschließend die Methode ResolvePrincipals für den Webdienst aufrufen. Hier nun verschiedene Details zur Implementierung, die ggf. von Interessen für Sie sind:
- Die Methode gibt eine ObservableCollection-Auflistung von PrincipalInfo-Objekten zurück. Zur Steigerung der Benutzerfreundlichkeit habe ich die benutzerdefinierte Klasse PickerEntry erstellt, die eine DisplayName- und eine AccountName-Eigenschaft enthält. Die PrincipalInfo-Klasse enthält auch Eigenschaften für Department und Email, sodass dies auch für Sie ggf. nützlich ist. In diesem besonderen Fall habe ich die ToString() -Methode in meiner Klasse so überschrieben, dass die DisplayName-Eigenschaft zurückgegeben wird. Auf diese Weise werden die Namen wie gewünscht im Listenfeld angezeigt. Außer konnte ich so auch bestimmen, wie der Kontoname des ausgewählten Benutzers bei dessen Auswahl lautet.
- Ich wollte in der Lage sein, den Webdienst-Eingangspunkt in der aktuellen SharePoint-Website zu verwenden, auf der ich mich befand. Diese Aufgabe war etwas anspruchsvoller und in Silverlight nicht so ohne weitere zu bewerkstelligen. Zum Glück konnte ich mithilfe des folgenden Codes eine Lösung finden:
//Informationen zum aktuellen Host abrufen
string curUrl = HtmlPage.Document.DocumentUri.AbsoluteUri.ToString();
//den Hostnamen abrufen. Beachten Sie, dass dies voraussetzt, dass der Benutzer Rechte für die Websitesammlung
//der Stammwebsite hat (gilt ggf. nicht für Ihr Szenario)
Uri curUri = new Uri(curUrl);
HostName = curUri.Scheme + "://" + curUri.Host + ":" + curUri.Port.ToString();
//die Hostnameneigenschaft verwenden, um die Anforderung für die Website zu konfigurieren,
//in der das Steuerelement gehostet wird
PeopleWS.PeopleSoapClient ps = new PeopleWS.PeopleSoapClient();
ps.Endpoint.Address =
new System.ServiceModel.EndpointAddress(HostName + "/_vti_bin/People.asmx");
Eigentlich ist dies der einzige wirklich interessante Teil. Ich füge diesem Beitrag den Code für das Benutzersteuerelement hinzu. Aus verschiedenen Gründen kann ich leider nicht das ganze Projekt hinzufügen, doch hoffentlich reichen dieser Beitrag und der Steuerelementcode selbst aus, um Ihnen den Weg für eine ähnliche Lösung zu ebnen.
Es handelt sich hierbei um einen übersetzten Blogbeitrag. Sie finden den Originalartikel unter Writing A SharePoint 2010 People Picker Control for Silverlight