Рекурсивный поиск сайтов с использованием клиентской объектной модели с использованием идентификатора сайта (GUID)

Использование клиентской объектной модели Я ищу наиболее эффективный способ поиска на сервере 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;
    }

1 ответ

public bool SiteExists(ClientContext context, string myGuid) {
    Guid id = new Guid(myGuid);
    Site site = context.Site;
    Web foundWeb = site.OpenWebById(id);

    context.Load(foundWeb);
    context.ExecuteQuery();

    if(foundWeb != null) {
        return true;
    }
    return false;
}
Другие вопросы по тегам