private static Entity LookupFileByUrlPath(OrganizationServiceContext context, Entity website, string urlPath, Func <Entity, bool> predicate) { website.AssertEntityName("adx_website"); if (website.Id == Guid.Empty) { throw new NullReferenceException("Unable to retrieve the Id of the website. Lookup failed."); } var urlWithoutWebsitePath = WebsitePathUtility.ToRelative(website, urlPath); string parentPath; string thisPath; if (ParseParentPath(urlWithoutWebsitePath, out parentPath, out thisPath)) { var parentPage = LookupPageByUrlPath(context, website, parentPath); if (parentPage != null) { var file = context.GetChildFiles(parentPage).Where(f => predicate(f) && string.Equals(f.GetAttributeValue <string>("adx_partialurl"), thisPath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (file != null) { return(file); } } } return(null); }
private static Entity LookupPageByUrlPath(OrganizationServiceContext context, Entity website, string urlPath, Func <Entity, bool> predicate) { website.AssertEntityName("adx_website"); if (website.Id == Guid.Empty) { throw new NullReferenceException("Unable to retrieve the Id of the website. Lookup failed."); } var urlWithoutWebsitePath = WebsitePathUtility.ToRelative(website, urlPath); var webPages = website.GetRelatedEntities(context, "adx_website_webpage").Where(predicate); // Check if we can find a page with the exact URL. var page = webPages.Where(wp => string.Compare(wp.GetAttributeValue <string>("adx_partialurl"), urlWithoutWebsitePath, StringComparison.InvariantCultureIgnoreCase) == 0).FirstOrDefault(); if (page != null) { // We found the page (probably root). return(page); } string parentPath; string thisPath; if (ParseParentPath(urlWithoutWebsitePath, out parentPath, out thisPath)) { var parentPage = LookupPageByUrlPath(context, website, parentPath, predicate); if (parentPage != null) { page = context.GetChildPages(parentPage).Where(p => predicate(p) && string.Equals(p.GetAttributeValue <string>("adx_partialurl"), thisPath, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); if (page != null) { return(page); } } } return(null); }