Obtenir un arbre entier avec des toiles, des sous-toibes et des listes échoue s'il n'y a pas d'accès à au moins une équipe

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/115588

Question

J'ai donc une collection de quelques équipes et de certaines équipes avec leurs listes.Et si je par exemple comme un utilisateur n'a pas d'autorisation pour une sous-liste, j'ai une exception après avoir envoyé une demande:

        var rootWeb = ClientContext.Site.RootWeb;

        ClientContext.Load(
            rootWeb,
            w => w.Title,
            w => w.Url,
            w => w.Lists,
            w => w.Lists.Include(
                list => list.RootFolder.Name,
                list => list.RootFolder.ServerRelativeUrl,
                list => list.ParentWeb.Url
            ),
            w => w.Id,
            w => w.Webs.Include(
                subWeb => subWeb.Title,
                subWeb => subWeb.Url,
                subWeb => subWeb.Lists,
                subWeb => subWeb.Lists.Include(
                    list => list.RootFolder.Name,
                    list => list.RootFolder.ServerRelativeUrl,
                    list => list.ParentWeb.Url
                ),
                subWeb => subWeb.Id
            )
        );
        ClientContext.ExecuteQuery();

À cause de cela, je ne peux pas obtenir une structure entière.

Comment puis-je obtenir une structure complète si je n'ai pas les autorisations pour un sous-nom? Merci

Était-ce utile?

La solution

Je recommanderais d'utiliser web.getsubwebwebsforCurrentUser de méthode à la place web.webs propriété car il renvoie la Security Topmed (les utilisateurs actuels ont accès) Liste des sous-sites.

Exemple modifié

var objectsToInclude = new Expression<Func<Web, object>>[]
     {
           w => w.Title,
           w => w.Url,
           w => w.Lists,
           w => w.Lists.Include(
           list => list.RootFolder.Name,
           list => list.RootFolder.ServerRelativeUrl,
           list => list.ParentWeb.Url)
     };

//1.Load root web
ctx.Load(ctx.Site.RootWeb, objectsToInclude);
var subWebs = ctx.Site.RootWeb.GetSubwebsForCurrentUser(null);
//2.Load sub webs
ctx.Load(subWebs, wcol => wcol.Include(objectsToInclude));
ctx.ExecuteQuery();

Remarque: Web.getsubwebsforcurrentRenther méthode et web.webs Propriété ne renvoie que un niveau sous sites Web, rien Suite. Donc, si vous êtes intéressé à retourner l'ensemble de l'arbre Web Structure, l'exemple sera différent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top