Montag, 22. April 2013
Donnerstag, 7. März 2013
Unterschied zw. Empty-Element und Module in VS2012
Bei EmptyElement ist es "Web, Site, WebApplication, Farm, Package"
bei Module ist es lediglich "Web, Site".
D.h im DesignModus eines Features sind Elemente die als "Module" angelegt wurde nur sichtbar wenn als Scope "Web" oder "Site" ausgewählt ist.
VORSICHT: Ist ein "Module" bereits einem Feature zugeordnet ( was z.B. automatisch passiert, wenn ein neues Feature hinzugefügt wird) und wird der Scope des Features auf "Farm" oder "WebApplication" umgestellt bleibt das Module dem Feature zugeordnet. Beim Deployment läuft das dann aber auf einen Fehler.
Donnerstag, 2. Februar 2012
SPItemEventPropertiesBase.Cancel is deprecated
This is a deprecated property and should not be used. Instead, use the Status property to cancel an event. A truevalue is equivalent to setting Status to CancelWithError. A false value is equivalent to setting Status to Continue.
Mittwoch, 1. Februar 2012
SPSecurity.RunWithElevatedPrivileges vs. SPUserToken.SystemAccount
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.
ListViewWebPart 2010 naechster Versuch
Dank Mohamed M Malek und Bryan Napier hab auch ich jetzt endlich verstanden was beim hinzufügen eines ListViewWebParts passiert. Der Schlüssel ist die versteckte View die durch den LimitedWebPartManger in der zugehörigen Liste angelegt wird und durch einen list.Update() persistiert werden muss.
Das erklärt auch die Probleme die ich nach dem Hinzufügen eines WebParts hatte, die allerdings nur solange bestanden, bis der Edit-Dialog des WebParts aufgerufen wurde und mit [OK] wieder geschlossen wurde.
Zum einen fehlte im WebPart der "Add New Atem"-Link und zum anderen wurde ein Feld das auf einem Custom Fieldtype basiert, nicht richtig gerändert.
Möchte man die View anpassen muss man das WebPart zum LimitedWebPartManager hinzufügen die Liste Updaten und sich danach das Listen- und das Webart-Object neu erzeugen.
Das View-Objekt erhält man in dem man mit der Webart.ViewGuid die versteckte View aus der Liste holt. Dieses Object kann dann beliebig verändert werden.
Mohamed Malek zeigt darüberhinaus wie das die Toolbox der WebParts verändert werden kann.
Freitag, 16. Dezember 2011
Liste aller Sharepoint Features
Freitag, 25. November 2011
Custom WebPart zu einer WebPartpage hinzufügen
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
Montag, 7. November 2011
Thmxtheme.ApplyTo und SPContext
Die sicherste Methode ist das Theme über einen Web-EventReciever der auf WebProvisioned reagiert zu setzen. Alle anderen Versuche haben immer wieder zu Problemen geführt.
Siehe auch
http://sadomovalex.blogspot.com/2010/08/fix-security-validation-for-this-page.html
Implement IDisposable Correctly
public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } // NOTE: Leave out the finalizer altogether if this class doesn't // own unmanaged resources itself, but leave the other methods // exactly as they are. ~Resource() { // Finalizer calls Dispose(false) Dispose(false); } // The bulk of the clean-up code is implemented in Dispose(bool) protected virtual void Dispose(bool disposing) { if (disposing) { // free managed resources if (managedResource != null) { managedResource.Dispose(); managedResource = null; } } }
MeetingWorkspace in Calendar verstecken
var list = web.Lists["Events"];
var field = list.Fields[SPBuiltInFieldId.WorkspaceLink];
field.Hidden = true;
field.Update();
Gefunden auf
http://www.sharepointblues.com/2010/04/26/how-to-remove-workspace-link-from-a-calendar/
Adding a Taxonomy Field
Group group = termStore.GetSiteCollectionGroup(this.site);
TermSet termset = group.TermSets[0];
TaxonomyField field = (TaxonomyField)list.Fields.CreateNewField("TaxonomyFieldType", name);
field.Required = required;
field.Description = description;
field.SspId = termStore.Id;
field.TermSetId = termSet.Id;
field.AllowMultipleValues = allowsMultiple;
field.EnforceUniqueValues = enforceUniqueValues;
field.IsPathRendered = renderpath;
// field must be indexed to enfoce unique values!
field.Indexed = enforceUniqueValues;
Term anchor = termSet.GetTermByPath(anchorPath);
field.AnchorId = anchor.Id;
field.NoCrawl = noCrawl;
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.taxonomy.taxonomysession.aspx
http://www.communardo.de/home/techblog/2011/10/18/sharepoint-2010-der-termstore-und-der-priviligierte-nutzer/
Was wird durch die folgende Methode veranlasst?
Möglicher Fix für Probleme nach Content Deployment
// Resync the taxonomy hidden list to make sure it is update-to-date
TaxonomySession.SyncHiddenList(site);
DisplaceOnUpgrade
Optional Boolean. If a field definition already exists for the field, TRUE to force updates to field properties with the values that are specified in this field definition.
http://www.sharepointconfig.com/2011/03/the-complete-guide-to-provisioning-sharepoint-2010-managed-metadata-fields/
the default termstore for site cannot be identified
"the default termstore for site cannot be identified" angezeigt, muss in der Central Administration für die Managed Meta Data Service Application die entsprechende Property gesetzt warden.
Wird unter den folgenden URLs genauer beschrieben
http://www.sharepointfabian.com/blog/Lists/Posts/Post.aspx?ID=186
http://www.bfcnetworks.com/the-default-termstore-for-this-site-cannot-be-identified/
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
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);
Dienstag, 26. Oktober 2010
How to Add a ListViewWebPart to a Publishing Page
[UPDATE: see adding-listviewwebpart-to-page]