8

Tôi phải điền điều khiển giống như PeopleEditor tự động hoàn thành dựa trên brililant ASPTokenInput với tất cả mọi người từ miền AD của tôi. Phản ánh PeopleEditor cho thấy một mớ hỗn độn thực sự trong công cụ tìm kiếm Active Directory của họ và tất cả các lớp có khả năng hữu ích là nội bộ.Nhận tất cả người dùng từ thư mục hoạt động để chia sẻ

phương pháp thử nghiệm của tôi hoạt động tốt, nhưng tôi cần phải nhận được TẤT CẢ người dùng từ AD (không dùng thêm những chỗ) để cư trú danh sách của tôi: How it looks

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); 
    } 

Làm thế nào tôi có thể truy vấn hoạt động thư mục như thế này? Có thể truy xuất tất cả các cài đặt kết nối AD từ chính SharePoint không? Tôi chỉ cần id và tên người dùng để điền vào danh sách thả xuống của tôi Việc chuyển đổi thành SPUserCollection là một vấn đề lớn khác.

Nó sẽ là tuyệt vời để sử dụng một số được xây dựng trong phương pháp SP như thế này:

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

Tại sao bạn không sử dụng phương pháp 'SPUtility.SearchWindowsPrincipals'? – Stefan

Trả lời

1

Giải pháp rất đơn giản, điều duy nhất tôi cần là triển khai tìm kiếm nhóm SharePoint (Nếu được chỉ định trong Điều khiển trình chỉnh sửa trường). SP có một phương pháp tích hợp sẵn, vì vậy tôi sử dụng nó.

/// <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 

    } 
0

tôi có thể nghĩ đến hai lựa chọn ở đây.

  1. Bạn có thể sử dụng System.DirectoryServices và truy vấn tất cả người dùng từ Active Directory trong mã C# của bạn.

  2. Bạn có thể thiết lập User Profile Sync để DB người dùng SharePoint của bạn được cập nhật.

Các vấn đề liên quan