Используя клиентскую объектную модель, я ищу наиболее эффективный способ поиска на сервере SharePoint и определения существования определенного дочернего сайта с учетом его уникального идентификатора (GUID). Мы храним GUID во внешней системе, потому что нам нужно вернуться на сайт, а GUID — это единственное свойство, которое нельзя изменить. Я знаю, что CAML можно использовать для поиска данных на определенном сайте. Однако мне не удалось найти API, который будет делать это для дочерних сайтов. Я вынужден выполнять рекурсивный поиск и использовать цикл for. В моем случае у нас могут быть тысячи сайтов, вложенных в наш сервер.
Эта логика работает на одном уровне, но неэффективна, когда существуют тысячи дочерних сайтов.
public bool SiteExists(ClientContext context, string myGuid)
{
Web oWebsite = context.Web;
context.Load(oWebsite, website => website.Webs, website => website.Title, website => website.Description, website => website.Id);
context.ExecuteQuery();
for (int i = 0; i != oWebsite.Webs.Count; i++)
{
if (String.Compare(oWebsite.Webs[i].Id.ToString(), myGuid, true) == 0)
{
return true;
}
}
return false;
}