Posts mit dem Label 2007 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label 2007 werden angezeigt. Alle Posts anzeigen
Montag, 22. April 2013
Mittwoch, 1. Februar 2012
SPSecurity.RunWithElevatedPrivileges vs. SPUserToken.SystemAccount
Die Verwendung von RunWithElevatedPrivileges erzeugt komplexen Code der die einen oder anderen Probleme mitbringt. Auch erhält man dadurch SiteCollectionAdmin-Berechtigung auf allen SiteCollections der aktuellen WebApplication.
Einfacher und eleganter kommt man in den meisten Fällen mit dem SystemAccount Token zum Ziel, der sich nur auf eine SPSite bezieht.
Die Ausnahme:
Zum ermitteln des SystemAccount Tokens braucht der aktuelle User eine Berechtigung auf der entsprechenden SPSite. Ist dies nicht gegeben führt kein Weg an RunWithElevatedPrivileges vorbei.
Dabei sollte dann aber nur der SystemAccount Token ermittelt werden und dann der Bereich wieder verlassen werden. Da der UserToken lediglich ein ByteArray ist, kann man diesen aus dem elevated-Block heraus zurückgeben, ohne sich über mögliche Referenzen Gedanken zu machen.
Laut Microsoft ist SPUserToken.SystemAccount einem site.SystemAccount vorzuziehen.
Möchte man allerdings die AccessDeniedException selbst behandeln um z.B mit RunWithElevatedPrivileges darauf zu reagieren, kann man eine SPSite-Instanz verwenden, .CatchAccessDeniedException = false setzen und im catch Block entsprechend reagieren.
Eine schöne Lösung die mit einer Extension-Method umgesetzt hat Keith Dahlby zur Verfügung gestellt.
Einfacher und eleganter kommt man in den meisten Fällen mit dem SystemAccount Token zum Ziel, der sich nur auf eine SPSite bezieht.
Die Ausnahme:
Zum ermitteln des SystemAccount Tokens braucht der aktuelle User eine Berechtigung auf der entsprechenden SPSite. Ist dies nicht gegeben führt kein Weg an RunWithElevatedPrivileges vorbei.
Dabei sollte dann aber nur der SystemAccount Token ermittelt werden und dann der Bereich wieder verlassen werden. Da der UserToken lediglich ein ByteArray ist, kann man diesen aus dem elevated-Block heraus zurückgeben, ohne sich über mögliche Referenzen Gedanken zu machen.
Laut Microsoft ist SPUserToken.SystemAccount einem site.SystemAccount vorzuziehen.
Möchte man allerdings die AccessDeniedException selbst behandeln um z.B mit RunWithElevatedPrivileges darauf zu reagieren, kann man eine SPSite-Instanz verwenden, .CatchAccessDeniedException = false setzen und im catch Block entsprechend reagieren.
Eine schöne Lösung die mit einer Extension-Method umgesetzt hat Keith Dahlby zur Verfügung gestellt.
Labels:
2007,
2010,
RunWithElevatedPrivileges,
SystemAccount
Freitag, 25. November 2011
Custom WebPart zu einer WebPartpage hinzufügen
Um ein Custom WebPart zu einer Page hinzuzufügen benötigt man eine Instanz der spezifischen WebPart-Klasse. Steht einem In dem Moment keine Referenz zu entsprechenden Assembly zur Verfügung kann man sich mit Hilfe eines ObjectHandle eine Instanz erzeugen.
Dazu benötigt man den Klassennamen und den kompletten Assembly-Namen
Die Werte für typeName und Assembly können auch über eine Query auf die WebPartGallery ermittelt werden
Dazu benötigt man den Klassennamen und den kompletten Assembly-Namen
String typeName = "Klassenname";
String assemblyName = "Assembly Name");
ObjectHandle webPartHandle = Activator.CreateInstance(assemblyName, typeName);
WebPart webPart = (WebPart)webPartHandle.Unwrap();
webParts[0].GetFormattedValue("WebPartTypeName")
Die Werte für typeName und Assembly können auch über eine Query auf die WebPartGallery ermittelt werden
SPQuery query = new SPQuery();
query.Query = string.Format("{0}", webpartname);
SPList webPartGallery = this.site.RootWeb.GetCatalog(SPListTemplateType.WebPartCatalog);
SPListItemCollection webParts = webPartGallery.GetItems(query);
String typeName =webParts[0].GetFormattedValue("WebPartTypeName");
String assemblyName = webParts[0].GetFormattedValue("WebPartAssembly");
Mittwoch, 16. Februar 2011
Adding a ListViewWebPart to Page
[UPDATE 01.Feb.2012: wp.ViewGuid = string.Empty gilt nur für 2007]
Hier eine Erklärung für 2010
[ENDUPDATE]
[UPDATE: Set View to "Summary View"]
using Microsoft.SharePoint; using Microsoft.SharePoint.WebPartPages; // Get a reference to a web and a list SPSite site = new SPSite("http://localhost:8000"); SPWeb web = site.OpenWeb(); SPList list = web.Lists["Contacts"]; // Instantiate the web part ListViewWebPart wp = new ListViewWebPart(); wp.ZoneID = "Left"; wp.ListName = list.ID.ToString("B").ToUpper();
// wp.ViewGuid = list.DefaultView.ID.ToString("B").ToUpper();
// Set the ViewGuid to string.Empty to get the "Summery View"
// including the "Add New Item"-Button
// Thanks to sadomovalewp.ViewGuid = string.Empty;
// Get the web part collection SPWebPartManager mgr = new SPWebPartManager("default.aspx", Storage.Shared);
// Add the web part
coll.Add(wp);
Labels:
2007,
2010,
ListView,
ListViewWebPart,
Sharepoint
Abonnieren
Posts (Atom)