Montag, 28. November 2011

BreakRoleInheritance und AllowUnsafeUpdates

Wird auf einem SPWeb-Objekt die Methode BreakRoleInheritance aufgerufen wird der Wert der Property AllowUnsafeUpdates auf false gesetzt.



web.AllowUnsafeUpdates = true;
web.BreakRoleInheritance(false);
web.AllowUnsafeUpdates = true;


Weitere Infos zu AllowUnsafeUpdates unter:
http://hristopavlov.wordpress.com/2008/05/16/what-you-need-to-know-about-allowunsafeupdates/

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

     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");

   

Montag, 21. November 2011

WebPart Audience


Der string für WebPart.AuthorizationFilter setzt sich wie folgt zusammen:


string[] globalAudienceIDs = new string[] {"e4687e64-c9d8-4860-bbc3-ec036bf9915d"};
string[] dlDistinguishedNames = new string[] {"cn=group1,cn=users,dc=spdev,dc=com", "cn=group2,cn=users,dc=spdev,dc=com"};  
string[] sharePointGroupNames = new string[] {"Demo Members", "Demo Owners"};  
               
string result = string.Format("{0};;{1};;{2}",  
                                    string.Join(",", globalAudienceIDs),  
                                    string.Join("\n", dlDistinguishedNames),  
                                    string.Join(",", sharePointGroupNames));

d.h. soll eine Sharepoint Gruppe hinzugefügt werden sieht der string wie folgt aus :
";;;;Gruppenname" bzw.
";;;;Gruppenname1, Gruppenname2" 



von
Lapointe Blog -Eintrag

Montag, 7. November 2011

Thmxtheme.ApplyTo und SPContext

Sharepoint 2010 Themes können über das ObjectModel nur innerhalb der SiteCollection aktiviert werden, auf die sich der aktuelle SPContext bezieht.


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

http://msdn.microsoft.com/en-us/library/ms244737(v=vs.80).aspx


    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

Setzt man das Feld WorkspaceLink eines Kalenders auf hidden kann auch für diesen Kalender kein Meetingworkspace angelegt werden.

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

TermStore termStore = session.DefaultKeywordsTermStore;
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

Wird beim Versuch den SiteCollecttion Termstore zu aktivieren die Fehlermeldung
"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/