2010-08-12 4 views
1

Я хочу изменить таксономическое свойство профиля пользователя в Sharepoint 2010. Как пример, допустим, я хотел изменить свойство «Интересы» (например, SPS-Interest или PropertyConstants.Interests). Я попытался установить значение свойства со строкой точки с запятой, например:Sharepoint 2010 - как мне изменить таксономическое свойство?

var property = profile[PropertyConstants.Interests]; 
if (property != null) 
{ 
    property.Value = "sharepoint; stackoverflow; scotch";      
} 

Но это бросает исключение.

ответ

2

Я не знаю, для SharePoint 2010, но в 2007 году profile [propertyName] является UserProfileValueCollection, поэтому он может содержать несколько значений.

Это может работать:

profile[PropertyConstants.Interests].Clear(); 
profile[PropertyConstants.Interests].Add("sharepoint"); 
profile[PropertyConstants.Interests].Add("stackoverflow"); 
profile[PropertyConstants.Interests].Add("scotch"); 

В 2007 году, также необходимо вызвать метод Commit на UserProfile, чтобы сохранить изменения в БД.

+0

Doh! Это хороший лоб. Спасибо, Том. –

1

Не знаю, является ли это отношение больше, но вот быстрый и грязный подход:

property.Value = new string[] {"sharepoint; stackoverflow; scotch"}; 

работает как шарм! Очищает предыдущее значение и заменяет ваш массив строк.

Хотя есть ограничения/преимущества: Таким образом, он не пропускает дубликаты. Если бы вы использовали метод Add для «Value1», «Value2», «Value1». Результатом сохранения будет «Value1; Value2». С помощью нового подхода [] он сохранит все три из них (мне действительно нужно было это поведение).

0

Это не полный ответ на ваш вопрос, но я искал что-то подобное, и выяснил, как сделать это, я думал, что это может быть интересно для других людей, а также:

Класса UserProfileValueCollection имеет различные новые таксономии конкретные методы в SharePoint 2010, которые стоит посмотреть в:

  • AddTaxonomyTerm
  • GetTaxonomyTerms
  • RemoveTaxonomyTerm

http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilevaluecollection_methods.aspx

Я предполагаю, что это «правильный» способ доступа таксономии на основе свойств профилей пользователей.

1
internal void updateUserProfileExperienceTags(string psLabelGuidValuePairs, string psDomainUser) 
    { 
     try 
     { 
      System.Security.PermissionSet ps = new System.Security.PermissionSet 
      (
       System.Security.Permissions.PermissionState.Unrestricted 
      ); 
      ps.Assert(); 
      SPSecurity.RunWithElevatedPrivileges(delegate() 
      { 
       SPServiceContext serviceContext = SPServiceContext.Current; 
       UserProfileManager upm = new UserProfileManager(serviceContext); 
       ProfileSubtypePropertyManager pspm = upm.DefaultProfileSubtypeProperties; 
       UserProfile profile = upm.GetUserProfile(psDomainUser); 
       TaxonomyFieldValueCollection _TaxonomyFieldValueCollection = new TaxonomyFieldValueCollection(String.Empty); 
       _TaxonomyFieldValueCollection.PopulateFromLabelGuidPairs(psLabelGuidValuePairs); 
       TaxonomySession session = new TaxonomySession(SPContext.Current.Site); 
       TermStore termStore = session.TermStores["Managed Metadata Service"]; 
       TermSetCollection termSets = termStore.GetTermSets("Technology", 1033); 
       TermSet sTerms = termSets[0]; 
       profile["Skills-Experience"].Clear(); 
       for (int ni = 0; ni < _TaxonomyFieldValueCollection.Count; ni++) 
       { 
        Guid guid = new Guid(_TaxonomyFieldValueCollection[ni].TermGuid); 
        Term sTerm = sTerms.GetTerm(guid); 
        profile["Skills-Experience"].AddTaxonomyTerm(sTerm); 
       } 
       profile.Commit(); 
      }); 
     } 
     catch (Exception ex) 
     { 
      this.Controls.Add(new Literal() { Text = "updateUserProfileExperienceTags: " + ex.ToString() }); 
     } 
     finally 
     { 
      System.Security.CodeAccessPermission.RevertAssert(); 
     } 
    } 

Это прекрасно работает для меня. Убедитесь, что пользователь «Разрешить пользователям изменять значения для этого свойства» включено> в ЦА -> Профиль пользователя Сервис -> Профиль пользователя Застройку -> Изменить настройки

+1

Когда я добираюсь до строки 'profile [" Skills-Experience "]. AddTaxonomyTerm (sTerm);' в моем коде появляется ошибка: 'Index был вне диапазона. Должен быть неотрицательным и меньше размера коллекции. «Моя собственность - одно значение. Что мне делать? –

+0

@MohemmadK У меня такое же исключение! Вы справились? – IDeveloper

+1

Сначала вы задали значение свойства, используя инструкцию в соответствии с моим кодом: 'profile [" Skills-Experience "]. Значение = sTerm.Label; 'Затем поместите инструкцию прямо под' profile ["Skills-Experience"]. AddTaxonomyTerm (sTerm); '. Сообщите мне, работает ли это или нет. @IDeveloper –

-4

Попробуйте это:

userprofile["propertyname"].Add(" "); 

userprofile["propertyname"].AddTaxonomyTerm(taxonomyterm); 

userprofile.Commit(); 
Смежные вопросы