Получение всех пользователей из active directory в sharepoint
Я должен заполнить свой автозаполнение PeopleEditor-подобный контроль на основе brililant 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);
}
Как я могу запросить active directory, как это? Можно ли получить все параметры подключения AD из самого sharepoint? Мне нужен только id и имя пользователя, чтобы заполнить мой раскрывающийся список, преобразующий это в SPUserCollection-еще одно большое дело.
было бы здорово использовать некоторые встроенные методы SP, такие как:
[SubsetCallableExcludeMember(SubsetCallableExcludeMemberType.UnsupportedSPType)]
public static IList<SPPrincipalInfo> SearchWindowsPrincipals(SPWebApplication webApp, string input, SPPrincipalType scopes, int maxCount, out bool reachMaxCount)
2 ответов
решение было простым, единственное, что мне нужно, это реализация поиска группы SharePoint (если указано в элементе управления редактора полей). СП имеет хороший встроенный метод, поэтому я использую его.
/// <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
}