Seiten

Herzlich willkommen im technischen Blog der MindBusiness GmbH
In diesem Blog veröffentlichen wir praxisnahes Know-how, neue Erkenntnisse und Erfahrungen zu Microsoft SharePoint- und Office-Themen direkt aus unserer Berater-, Trainer- und Entwickler-Praxis. Hier finden Sie interessante Lösungen und neue Ideen zu den verschiedensten Anforderungen und Problemen. Unseren News-Blog finden Sie unter newsblog.mindbusiness.de/newsblog. Wir wünschen Ihnen viel Spaß beim Lesen und Stöbern und freuen uns auf den Austausch mit Ihnen.

SharePoint - Mit Silverlight die Userliste einer SiteCollection auslesen und in eine ComboBox schreiben

Dieser Blog beschreibt wie sie in einer Silverlight Maske eine ComboBox mit den aktuellen Usern einer SiteCollection füllen können. Der konkrete Projekthintergrund war die Vorgabe, in einer Silverlight Maske mehrere Tabellen über eine Maske zu befüllen und dabei auch User Objekte zu schreiben. Dazu muss der Benutzer clientseitig User auswählen können, um diese dann zu schreiben. Die Liste musste also dynamisch zur Laufzeit abgefragt werden.

Vorgehensweise

Als erste muss bekannt sein und dynamisch jederzeit ermittelt werden können, welche User es gibt. Dazu muss die SharePoint Liste Benutzerinformationsliste (people) ausgelesen werden. Zudem müssen die Feldbezeichnungen bekannt sein, aus denen der Name des Users und seine ID hervorgehen. Name und ID werden benötigt, wenn ein neuer Datensatz mit einem User Objekt als Metadatum angelegt werden soll.

Als erstes habe ich die GUID ermitteln und in eine Variable geschrieben.Dazu habe ich über Benutzer und Gruppen die Liste Alle Personen anzeigen lassen. Über Einstellungen erhalte ich in der Adressezeile die GUID dargestellt und kann diese in einer Variablen speichern.

image

String userGUID = “{776af73a-fdcc-46e7-8337-7ff385a17cde}”;

Als nächste habe ich eine Klasse User definiert und eine Liste, die als Cache für alle eingelesenen User dient. Der Cache ist eine generische Liste.

List<User> ListUser = new List<User>();

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace ItergoDos
{
    public class User
    {
        public string UserSelection { set; get; }
        public string ImnName { set; get; }

        public string getSPValue()
        {

            return UserSelection + “,#” + ImnName;
        }

    }
}

Hier sehen Sie die Properties UserSelection und ImnName, die der Web Service liefert, wenn die Liste abgefragt wird. Die Methode

getSPValue() liefert mir einen String. mit dessen Hilfe ich einen User “schreiben” kann.

Jetzt muss ich die Liste asynchron abrufen und dann in den Cache und in die ComboBox schreiben.

Zunächst der Request:

 

statusFlag = StatusFlags.USER_AUSLESEN;  (das statusFlag wird über eine Enumeration gesetzt.)
GUID = userGUID;
proxy.GetListItemsAsync(GUID, null, null, null, null, null, null);

Im Callback steht die folgende Zeile 

void proxy_GetListItemsCompleted(object sender, GetListItemsCompletedEventArgs e)
        {
            switch (statusFlag)
            {
                case StatusFlags.START: this.writeGUIDSToCache(e); break;
               case StatusFlags.USER_AUSLESEN: populateComboUser(e); break;
            }
        }

Und so sieht die Methode populateComboUser(e) aus.

private void populateComboUser(GetListItemsCompletedEventArgs e)
   {
       this.comboUser.Items.Clear();
       var dieListe = (from x in e.Result.Elements().First().Elements()
                       select new User
                       {
                           UserSelection = x.Attribute(“ows_UserSelection”).Value,
                           ImnName = x.Attribute(“ows_ImnName”).Value
                       }).ToList();

       foreach (User u in dieListe)
       {
               ListUser.Add(u);
               this.comboUser.Items.Add(u.ImnName);
       }
   }

Über Linq lese ich den Result des Request aus schreibe eine Userliste, die in der anschließenden Schleife in den Cache, also die Liste,  und in die ComboBox geschrieben wird. In ows_UserSelection steht die ID und in ows_ImnName der Username. 

Welche Felder der Web Service liefert habe ich über Fiddler ermittelt indem ich in einem ersten Schritt einfach nur die Liste abgefragt und mir dann das Protokoll angeschaut habe.  

Das Ergebnis sieht dann so aus:

 

image

Hinterlasse eine Antwort

 

 

 

Du kannst diese HTML-Tags benutzen

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">