Поиск профиля пользователя SharePoint - PullRequest
1 голос
/ 09 января 2010

Есть ли способ поиска профилей в MOSS по модели объекта? Мне нужно найти профили, для которых определено определенное значение, а затем выполнить для них какое-то действие.

Мне нужно написать некоторый код на c #, который может выполнять поиск в базе данных профилей и возвращать соответствующие профили. В основном,

Список профилей = Выбрать профили из хранилища профилей, где значение свойства профиля = SomeValue

Я стараюсь избегать следующего:

 private IEnumerable<UserProfile> SearchProfiles(string value) {
        ServerContext serverContext = ServerContext.GetContext(SPContext.Current.Site);
        UserProfileManager profileManager = new UserProfileManager(serverContext);
        foreach (UserProfile profile in profileManager) {
            if ((string)profile["MyProp"].Value == value) {
                yield return profile;
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 09 января 2010

Это возможно с использованием класса FullTextSqlQuery:

FullTextSqlQuery q = new FullTextSqlQuery(ServerContext.Current);
q.ResultTypes = ResultType.RelevantResults;
q.QueryText = "SELECT UserName, Email, PreferredName FROM SCOPE() WHERE \"scope\" = 'People' AND Department = 'IT'";

ResultTableCollection tables = q.Execute();
ResultTable results = tables[ResultType.RelevantResults];

Этот класс позволяет вам запрашивать определенную область (то есть людей) и фильтровать их на основе свойств, используя предложение WHERE, которое выглядит в основном так же, как обычный запрос Sql.

Чтобы иметь возможность поиска и фильтрации (пользовательских) свойств профиля пользователя, свойство профиля должно иметь сопоставление в настройках метаданных поставщика общих служб. Большинство стандартных свойств профиля пользователя уже имеют эти пользовательские свойства, которые вы должны добавить самостоятельно.

Подробнее об управляемых свойствах здесь .

0 голосов
/ 03 мая 2010

Две вещи:

  1. при работе с повышенными привилегиями нам нужно создать новый объект SPSite в вызове и загрузить оттуда контекст безопасности. НЕ используйте контекст, полученный с помощью SPContext.Current.Site.

    Таким образом:

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
     using (SPSite site = new SPSite("<your site url>"))
     {
      ServerContext context = ServerContext.GetContext(site);
    
      UserProfileManager profileManager = new
    
      UserProfileManager(context);
    
      foreach (UserProfile profile in profileManager)
      {
       // your code
      }
     }
    }
    
  2. убедитесь, что учетная запись пула приложений имеет соответствующие разрешения пользователя в SSP. т.е. (использовать личные функции, управлять профилями пользователей)

...