2010-08-12 5 views
1

Je veux modifier une propriété de profil d'utilisateur taxonomique dans Sharepoint 2010. Juste à titre d'exemple, disons que je voulais modifier la propriété Interest (aka SPS-Interests, ou PropertyConstants.Interests). J'ai essayé de définir la valeur de la propriété avec la chaîne délimité par virgule, comme ceci:Sharepoint 2010 - comment modifier une propriété taxonomique?

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

Mais cela jette une exception.

Répondre

2

Je ne sais pas pour SharePoint 2010, mais en 2007, le profil [propertyName] est un UserProfileValueCollection, il peut donc contenir plusieurs valeurs.

Cela peut fonctionner:

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

En 2007, vous devez également appeler la méthode sur la userprofile Commit pour enregistrer les modifications apportées à la base de données.

+0

Doh! C'est un bon slapper sur le front. Merci, Tom. –

1

Je ne sais pas s'il est plus pertinent, mais voici une approche rapide et sale:

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

fonctionne comme un charme! Nettoie la valeur précédente et la remplace par votre tableau de chaînes.

Bien qu'il existe des limitations/avantages: De cette façon, il n'omit pas les doublons. Si vous souhaitez par conséquent utiliser la méthode Add pour "Value1", "Value2", "Value1". Le résultat de l'enregistrement serait "Value1; Value2". Avec la nouvelle approche [], cela les sauverait tous les trois (j'avais vraiment besoin de ce comportement).

0

Ce n'est pas une réponse complète à votre question, mais je cherchais quelque chose de similaire et trouvé comment faire, je pensais que ce serait peut-être intéressant pour d'autres personnes aussi:

La classe UserProfileValueCollection a diverses nouvelles méthodes spécifiques de la taxonomie dans SharePoint 2010 qui sont dignes d'intérêt:

  • AddTaxonomyTerm
  • GetTaxonomyTerms
  • RemoveTaxonomyTerm

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

Je suppose que cela est la manière « appropriée » pour accéder aux propriétés de profil d'utilisateur en fonction de taxonomie.

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(); 
     } 
    } 

Cela fonctionne très bien pour moi. Assurez-vous que l'utilisateur a « Autoriser les utilisateurs à modifier les valeurs de cette propriété » activée> dans CA -> Service Profil utilisateur -> Profil utilisateur propriété -> Modifier les paramètres

+1

Lorsque j'arrive à la ligne 'profile [" Skills-Experience "] AddTaxonomyTerm (sTerm);' dans mon code, je reçois une erreur: 'Index était hors de portée. Doit être non négatif et inférieur à la taille de la collection. »Ma propriété est à valeur unique. Que devrais-je faire? –

+0

@MohemmadK J'ai la même exception! Avez-vous travaillé? – IDeveloper

+1

D'abord, vous définissez la valeur de la propriété en utilisant l'instruction suivant mon code: 'profile [" Skills-Experience "]. Value = sTerm.Étiquette: 'Ensuite, placez l'instruction juste en dessous de' profile ["Skills-Experience"] .AddTaxonomyTerm (sTerm); '. Faites-moi savoir si cela fonctionne ou non. @IDeveloper –

-4

Essayez ceci:

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

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

userprofile.Commit(); 
Questions connexes