Ein neuer Tag, ein neuer Blog… oder irgendwie so xD
Heute über das Auslesen und Setzen der UserProfile Properties - in SharePoint On Premise und Cloud.
Der Hintergrund dieses Posts ist eine spezielle Anforderung, bei der wir zielgerichtete Newsbeiträge für die Mitarbeiter im Web ausspielen sollen. Hierfür aber zusätzliche Gruppen zu erzeugen und dies berechtigungsgesteuert durchzuführen, ist in diesem Fall keine Option.
Darum entschieden wir uns für einen anderen Ansatz über die UserProfile Properties. Diese greifen beispielsweise auf einen Standort und eine Organisation als Taxonomiewerte zu.
Dadurch wird der Mitarbeiter über seine Organisationseinheit im Profil identifiziert. Somit werden standort- oder organisationsspezifische Inhalte individuell für ihn angezeigt.
Dies läuft ähnlich dem Audience Targeting (zu Deutsch Zielgruppenadressierung). Jedoch hat dieses Feature eine Restriktion. Es wird wieder nur in der Cloud über eine Office 365 Berechtigungsgruppe bzw. beim Anlegen eines Teams über eine eben solche aufgelöst.
Eventuell ändert sich dies in Zukunft noch mit Erweiterungen, denn die Anforderungen an SharePoint Online mit der Tendenz alles in die Cloud zu verlagern, steigen stetig. Mit diesem Gedanken im Hinterkopf wählten wir diese Methode.
Wie liest man diese Properties aber nun aus oder setzt sie?
Serverseitig On Premise via SSOM:
$serviceContext = Get-SPServiceContext "http://contoso.com" $userProfileManager = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($serviceContext) $newProfile = $userProfileManager.GetUserProfile("contoso\user") //Via Konstanten $newProfile[[Microsoft.Office.Server.UserProfiles.PropertyConstants]::Office].Value = "Bad Erlach, Hochfeldgasse 5" //oder direkt über das Label $newProfile["SPS-Department"].Value = "Smarterbusiness" //und Taxonomiewerte $newProfile["SBS-Standort"].Value = $valueStandort.Name $newProfile["SBS-Standort"].AddTaxonomyTerm($valueStandort) | Out-Null $newProfile.Commit()
Oder auch via CSOM (mit der Restriktion nur lesend auf SP2013):
$peopleManager = New-Object Microsoft.SharePoint.Client.UserProfiles.PeopleManager($context) $personProperties = $peopleManager.GetPropertiesFor($targetUser) $context.Load($personProperties) $context.ExecuteQuery() $profileProperties = $personProperties.UserProfileProperties foreach ($key in $profileProperties.Keys) { Write-Host $key "-->" $profileProperties[$key] }
Lt. Aussage von Microsoft schreibend nur auf SP2016&19:
*clicky* Link zum Original Statement 🙂
Wie können diese Properties aber nun Online in der Cloud bearbeitet werden?
Hierzu benötigt man die aktuelle SharePoint Online Client Components SDK.
Mit der letzten Version der *Microsoft.SharePoint.Client.UserProfiles.dll*
Damit erhält man schließlich auch zwei weitere Methoden am PeopleManager:
- SetSingleValueProfileProperty()
- SetMultiValuedProfileProperty()
$peopleManager.SetSingleValueProfileProperty(personProperties.AccountName,"AboutMe", "Ich bin der Beste!") $ctx.Load($peopleManager) $ctx.ExecuteQuery() $propertyValues = New-Object "System.Collections.Generic.List``1[System.string]" $propertyValues.Add("SharePoint") $propertyValues.Add("Blogbeiträge") $peopleManager.SetMultiValuedProfileProperty(personProperties.AccountName, "SPS-Responsibility", $propertyValues) $ctx.Load($peopleManager) $ctx.ExecuteQuery()
Na das war ja einfach \o/
…wenn man weiß wie 😮
Nächstes mal mehr zu den Profil Newsfeedeinstellungen und das Serverseitige Setzen dieser – stay tuned 😉