Как поговорить с Sharepoint: если бы я только получил полное имя
-
03-07-2019 - |
Вопрос
Кажется, что при каждом общении с Sharepoint через его веб-сервисы требуется домен \ имя пользователя. Например:
UserProfileService.GetUserProfileByName(string 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;
}
Решение
Я полагаю, что вы можете попытаться запросить в активном каталоге имя и фамилию пользователя, чтобы определить имя его учетной записи. Р>
Другие советы
Вы можете использовать элемент управления 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);
Это немного громоздко и смешно, но это работает. Если вам нужно получить его программно, вы можете сделать, как сказал выше Джейсон, получить SPUserCollection
и выполнить цикл, ища SPUser
с соответствующим отображаемым именем.