2010-06-10 5 views
0

Je reçois une erreur lorsque j'essaie d'activer une partie WebPart. Il active bien dans une configuration, mais échoue dans un autre. Administrateur dans les deux. On dirait que cela échoue parce qu'il n'est pas capable de créer la liste. L'erreur est: Message: La valeur ne peut pas être nulle. Trace de la pile: à Microsoft.Sharepoint.SPRoleAssignment..ctor à ClientRequestHandler.CreateList (...Aide lors de la création d'une liste SharePoint (probablement en raison de problèmes de privilèges)

private static void CreateLists() 
{    
    try 
    { 
     SPSecurity.RunWithElevatedPrivileges(delegate() 
     { 
      using (SPSite site = SPContext.Current.Site) 
      { 
       using (SPWeb web = site.RootWeb) 
       { 
        string listName = LIST_NAME; 
        bool listExist = ContainList(web, listName); 

        if (!listExist) 
        { 
         AddFieldDelegate _delegate = new AddFieldDelegate(AddAttachmentFields); 
         SPList list = CreateList(web, listName, _delegate); 
         RegisterList(web, list, KEY); 

        }        
       } 
      } 
     }); 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(String.Format("Message: {0} Stack Trace: {1}", ex.Message, ex.StackTrace.ToString())); 
    } 

} private static SPList CreateList(SPWeb web, string listName, AddFieldDelegate _delegate) 
{ 
    web.AllowUnsafeUpdates = true; 

    SPListTemplateType genericList = new SPListTemplateType(); 
    genericList = SPListTemplateType.GenericList; 

    Guid listGuid = web.Lists.Add(listName, "List", genericList); 

    SPList list = web.Lists[listGuid]; 
    list.Hidden = true; 

    SPView view = _delegate(list); 

    view.Update(); 

    //Remove permissions from the list 
    list.BreakRoleInheritance(false); 

    //Make site owners the list administrators 
    SPPrincipal principal = web.AssociatedOwnerGroup as SPPrincipal; 
    SPRoleAssignment assignment = new SPRoleAssignment(principal); 
    assignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Administrator)); 
    list.RoleAssignments.Add(assignment); 

    //update list changes 
    list.Update(); 
    return list; 
} 

Répondre

2

Assurez-vous que le web en question a en fait un groupe propriétaire associé (/_layouts/groups.aspx -> Settings -> Set Up Groups)

+1

Selon l'erreur, le constructeur du 'SPRoleAssignment' est nul, ce qui signifie que le principal' SPPrincipal' est nul, ce qui signifie 'web .AssociatedOwnerGroup' est apparemment nul pour cette installation –

+0

Donc, est-il possible de contourner ce problème s'ils n'ont pas de groupe de propriétaires ou est-ce une condition préalable pour créer des listes? – Prabhu

+0

@Swam Non, dans une situation standard, un groupe de propriétaires n'est pas nécessaire pour créer une liste. Les groupes de sites sont nécessaires uniquement pour gérer les autorisations et une liste peut être créée sans avoir besoin d'attribuer des autorisations. La raison pour laquelle il bloque la création de la liste dans cet exemple est que le code n'atteint jamais l'instruction 'list.Update()' qui finalise la création. –

Questions connexes