Die unendlichen Möglichkeiten des Client Object Models

Das Client Objekt Model von SharePoint 2010 ermöglicht die Entwicklung von SharePoint-Anwendungen die nicht im Kontext des SharePoint Servers laufen. Im wesentlichen bietet das COM (hatten wir diese Abkürzung nicht schon mal?) die Funktionalität des Server API, nur eben für Remote-Anwendungen. So ist es möglich Listen und Bibliotheken anzulegen, zu verändern, Daten zu schreiben und noch weitere Änderungen am SharePoint Server vorzunehmen…

Wie mir unlängst beim Durchstöbern der Funktionen aufgefallen ist, mit dem Client Objekt Model können auch die Menüs erweitert werden! Gut, einen konkreten Anwendungsfall habe ich nun hierfür nicht. Aber muss immer gleich auf den ersten Blick erkennbar sein wofür eine Funktion benötigt wird? Evtl. kann ich in ein paar Monaten von einer Anwendung berichten.

Menüeintrag für einen EditControlBlock erstellen

Normalerweise werden Erweiterungen der SharePoint Menüs über Feature-Dateien realisiert. Für die Erweiterung der Menüs kommt ein CustomAction-Feature zur Anwendung. Jedoch kann dieses auch per Client API erstellt werden. Die CustomActions werden im COM als UserCustomAction-Ojekte angesprochen.

erster Schritt: wir laden die UserCustomActions einer Liste in einen Client-Kontext.

   1: ClientContext ctx = new ClientContext("http://nbmag/Dev");
   2: List liste = ctx.Web.Lists.GetByTitle("Personen");
   3:  
   4: ctx.Load(liste.UserCustomActions);
   5: ctx.ExecuteQuery();

 

Danach empfiehlt es sich eine bereits angelegt UCA zu löschen. In diesem Fall wird die UCA anhand des Titels identifiziert.

   1: foreach (UserCustomAction uca in liste.UserCustomActions)
   2: {
   3:     if (uca.Title == "Brief schreiben")
   4:     {
   5:         uca.DeleteObject();
   6:         break;
   7:     }
   8: }

Der abschließende Schritt ist nun das Anlegen der neuen UserControlAction. Die Einstellungen entsprechen jenen, die in einer Feature Datei ebenfalls zu setzen sind. (Siehe MSDN)  Durch die Eigenschaften “Location” und “Group” wird das zu erweiternde Menü definiert. Eine Liste der möglichen Einträge und deren Bedeutung liefert das ebenfalls MSDN.

   1: UserCustomAction act = liste.UserCustomActions.Add();
   2: act.Location = "EditControlBlock";
   3: act.Sequence =100;
   4: act.Title ="Brief schreiben";
   5: act.Url = "/_layouts/WriteLetter.aspx";
   6: act.ImageUrl = "/_layouts/images/mail_add.png";
   7: act.Update();
   8: ctx.ExecuteQuery();

In diesem Beispiel wird eine Applikation-Page im Layouts Verzeichnis aufgerufen.

Und hier das Ergebnis der wenigen Zeilen Code:

image

Kommentar schreiben