8

पर प्राप्त करें मुझे अपने एडी डोमेन के सभी लोगों के साथ ब्रिलिलेंट ASPTokenInput पर आधारित अपने स्वत: पूर्ण लोगों को नियंत्रित करना है। PeopleEditor को प्रतिबिंबित करना उनके सक्रिय निर्देशिका खोज इंजन में एक वास्तविक गड़बड़ दिखाता है और सभी संभावित सहायक वर्ग आंतरिक हैं।सभी उपयोगकर्ताओं को सक्रिय निर्देशिका से शेयरपॉइंट

मेरे परीक्षा पद्धति ठीक काम करता है, लेकिन मैं अपने सूची को भरने के लिए ई (नहीं SharePoint साइट वाले) से सभी उपयोगकर्ताओं प्राप्त करने की आवश्यकता: 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); 
    } 

कैसे मैं इस तरह सक्रिय निर्देशिका क्वेरी कर सकते हैं? क्या शेयरपॉइंट से सभी एडी कनेक्शन सेटिंग्स को पुनः प्राप्त करना संभव है? मुझे अपनी ड्रॉपडाउन सूची भरने के लिए सिर्फ आईडी और उपयोगकर्ता नाम की आवश्यकता है इसे एसपीयूसर कोलेक्शन में कनवर्ट करना एक और बड़ा सौदा है।

यह इस तरह कुछ में निर्मित सपा तरीकों का उपयोग करने के लिए बहुत अच्छा होगा:

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

आप 'SPUtility.SearchWindowsPrincipals' विधि का उपयोग क्यों नहीं करते? – Stefan

उत्तर

1

समाधान आसान था, केवल एक चीज मैं जरूरत 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 

    } 
0

मैं यहाँ दो विकल्प के बारे में सोच सकते हैं।

  1. आप System.DirectoryServices का उपयोग कर सकते हैं और अपने सी # कोड में अपनी सक्रिय निर्देशिका से सभी उपयोगकर्ताओं को पूछ सकते हैं।

  2. आप User Profile Sync सेट कर सकते हैं ताकि आपका SharePoint उपयोगकर्ता डीबी अद्यतित हो।

संबंधित मुद्दे