Перевести всех пользователей из активного каталога в sharepoint

Мне нужно заполнить свой элемент управления автозаполнением, подобный PeopleEditor, на основе блестящего ASPTokenInput всеми людьми из моего домена AD. Отражение PeopleEditor показывает настоящий беспорядок в их поисковой системе Active Directory, и все потенциально полезные классы являются внутренними.

Мой метод тестирования работает нормально, но мне нужно, чтобы ВСЕ пользователи из AD (не на сайтах sharepoint) заполняли мой список:   Как это выглядит

public string GetUsers(string filter)
    {
        var spWeb = SPContext.Current.Web;
        SPUserCollection allusers = spWeb.AllUsers;
        List<SPUser> users = allusers.Cast<SPUser>().ToList();
        var query = from spUser in users.Select(usr => new {id = usr.ID, name = usr.Name})
                        .Where(p => p.name.IndexOf(filter, StringComparison.InvariantCultureIgnoreCase) >= 0)
                    select new {id = spUser.id.ToString(), spUser.name};

        return new JavaScriptSerializer().Serialize(query);
    }

Как я могу запросить активный каталог таким образом? Можно ли получить все настройки подключения к AD из самого sharepoint? Мне нужен только идентификатор и имя пользователя, чтобы заполнить мой раскрывающийся список. Преобразование этого в SPUserCollection - еще одно важное дело.

Было бы здорово использовать некоторые встроенные методы SP, например:

 [SubsetCallableExcludeMember(SubsetCallableExcludeMemberType.UnsupportedSPType)]
public static IList<SPPrincipalInfo> SearchWindowsPrincipals(SPWebApplication webApp, string input, SPPrincipalType scopes, int maxCount, out bool reachMaxCount)

person Bassist    schedule 25.10.2011    source источник
comment
Почему вы не используете метод SPUtility.SearchWindowsPrincipals?   -  person Stefan    schedule 25.10.2011


Ответы (2)


Решение было простым, единственное, что мне было нужно, - это реализация поиска в группе SharePoint (если это указано в элементе управления редактора полей). В SP есть хороший встроенный метод, поэтому я им пользуюсь.

/// <summary>
/// Provides searching for AD or SharePoint group if specified in field setting
/// </summary>
public static class ActiveDirectorySearchProvider
{
    public static IList<SPPrincipalInfo> Search(string filter, string selectionGroup, string principalType)
    {
        var site = SPContext.Current.Site.WebApplication;
        bool reachmaxcount;
        var scope = SPUtils.GetSpPrincipalType(principalType);

        if (!String.IsNullOrEmpty(selectionGroup)) //search for users in SPGroup if present
        {
            var rawSPGroupList = SPUtility.GetPrincipalsInGroup(SPContext.Current.Web, selectionGroup, 100,
                                                           out reachmaxcount).ToList();

            string lowerFilter = filter.ToLowerInvariant();

            var filteredGroupList =
                rawSPGroupList.Where(
                    pInfo =>
                    pInfo.LoginName.Substring(pInfo.LoginName.IndexOf('\\') + 1).StartsWith(lowerFilter) ||
                    pInfo.DisplayName.ToLowerInvariant().StartsWith(lowerFilter) ||
                    pInfo.DisplayName.ToLowerInvariant().Substring(pInfo.DisplayName.IndexOf(' ') + 1).StartsWith(
                        lowerFilter)).ToList();

            return filteredGroupList;
        }

       return SPUtility.SearchWindowsPrincipals(site, filter, scope, 100, out reachmaxcount); //Search in AD instead

    }
person Bassist    schedule 01.11.2011

Я могу придумать здесь два варианта.

  1. Вы можете использовать System.DirectoryServices и запрашивать всех пользователей из вашего активного Каталог в вашем коде C #.

  2. Вы можете настроить синхронизацию профилей пользователей, чтобы ваша база данных пользователей SharePoint была актуальной. .

person Shoban    schedule 25.10.2011