2009-03-06 50 views
1

似乎每个与Sharepoint通过其Web服务交流的努力都需要一个域\用户名。例如:如何与Sharepoint交谈:如果我只有全名

UserProfileService.GetUserProfileByName(string accountName) 

accountName应该是域\用户名。

如果我只有全名(FirstName LastName),是否可以与SharePoint通信? 有什么办法将全名转换为域名\用户名? 域\用户名是唯一的方法吗?

预先感谢您。 :)


谢谢你的答案。 :)

的代码看起来是这样的:

using System.DirectoryServices; 



const string ADPATH = "LDAP://myLDAPserver,validUserforAD"; 
const string USERNAME = "myDomain\\myUserName"; 
const string PASSWORD = "myPassword"; 
const string DOMAIN = "myDomain\\"; 

public static DirectoryEntry GetDirectoryObject() 
{ 
     DirectoryEntry directoryObject = new DirectoryEntry(ADPATH, USERNAME, PASSWORD, AuthenticationTypes.Secure); 
     return directoryObject; 
} 


public string GetUserNameByCompleteName(string completeName) 
{ 
      DirectoryEntry adObject = GetDirectoryObject(); 

      //filter based on complete name 
      DirectorySearcher searcher = new DirectorySearcher(adObject); 
      searcher.Filter = "displayname=" + completeName; 
      SearchResult result = searcher.FindOne(); 

      DirectoryEntry userInfo = result.GetDirectoryEntry(); 

      //getting user name 
      string userName = (string)userInfo.Properties["samaccountname"].Value ?? string.Empty; 
      userInfo.Close(); 
      adObject.Close(); 

      return DOMAIN + userName; 
} 

回答

1

我想你可以尝试Active Directory中查询用户的名字和姓氏,以确定他们的帐户名。

+0

谢谢。它运作良好。 – ira 2009-03-10 00:41:10

1

尝试使用UserGroup.GetAllUserCollectionsFromWeb(),可迭代结果以获取给定显示名称的登录名。

+0

在阅读您的答案之前,已经实现了对AD的查询。谢谢你的替代答案,杰森! – ira 2009-03-10 00:42:56

1

您可以使用PeopleEditor控件,如果您键入姓氏,名字组合或者您可以浏览目录,则该控件将抓取用户。

people = new PeopleEditor(); 
people.MultiSelect = false; 

this.Controls.Add(people); 

... 

int userID = Int32.Parse((((PickerEntity)people.ResolvedEntities[0]).EntityData["SPUserID"]).ToString()); 

SPUser user = SPContext.Current.Site.RootWeb.SiteUsers.GetByID(userID); 

这有点繁琐和荒谬,但它的工作原理。如果您需要以编程方式获取它,您可以按照上面的Jason所述完成并获取SPUserCollection并循环查找,并以适当的显示名称查找SPUser

+0

谢谢你的贡献,安迪! :) – ira 2009-03-10 00:52:45