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
-
29-09-2020 - |
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
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.