Sharepoint 2010 - как изменить таксономическую собственность? - PullRequest
1 голос
/ 13 августа 2010

Я хочу изменить свойство профиля таксономического пользователя в Sharepoint 2010. Предположим, что в качестве примера я хотел изменить свойство Interests (иначе SPS-Interests или PropertyConstants.Interests).Я попытался установить значение свойства с помощью строки, разделенной точкой с запятой, например:

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

Но это вызывает исключение.

Ответы [ 5 ]

2 голосов
/ 13 августа 2010

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

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

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

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

1 голос
/ 19 августа 2012
    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();
        }
    }

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

1 голос
/ 19 октября 2011

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

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

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

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

0 голосов
/ 23 февраля 2015

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

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

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

userprofile.Commit();
0 голосов
/ 20 октября 2011

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

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

  • AddTaxonomyTerm
  • GetTaxonomyTerms
  • RemoveTaxonomyTerm

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...