Last active
October 5, 2022 22:57
-
-
Save darrenjrobinson/b9a7a26d0e3ffe1ed98685b474ff339b to your computer and use it in GitHub Desktop.
Update Email Addresses in SuccessFactors including the isPrimary Flag. Associated blogpost https://blog.darrenjrobinson.com/updating-and-setting-primary-attributes-in-successfactors-with-powershell/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$Global:headers = $null | |
$Global:SSFBaseURI = "https://api10preview.sapsf.com/odata/v2/" | |
$Global:SSFBusinessEmailType = "159139" | |
$Global:SSFPersonalEmailType = "159140" | |
Function Connect-SSF { | |
[cmdletbinding()] | |
param( | |
[Parameter(Mandatory = $true, ValueFromPipeline = $true)] | |
[string]$SSFBaseURI | |
) | |
$creds = Get-Credential -Message "Provide the SuccessFactors loginID 'USER@Tenant' and Password for an account with SuccessFactors OData API access." | |
if ($creds) { | |
$Bytes = [System.Text.Encoding]::utf8.GetBytes("$($creds.UserName):$($creds.GetNetworkCredential().Password)") | |
$EncodedAuth = [Convert]::ToBase64String($Bytes) | |
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls11 | |
$Global:headers = @{Authorization = "Basic $($EncodedAuth)"; 'content-type' = 'application/json' } | |
# Test Connection | |
try { | |
$ssfQuery = "$($SSFBaseURI)User?`$top=5" | |
$ssfResult = $null | |
$ssfResult = Invoke-RestMethod -Uri $ssfQuery -Method Get -Headers $headers | |
if ($ssfResult.d.results.count -gt 0) { | |
return Write-Host "Successfully connected to SuccessFactors." | |
} | |
} | |
catch { | |
Write-host $_ | |
} | |
} | |
} | |
Function Get-SSFUser { | |
[cmdletbinding()] | |
param( | |
[Parameter(Mandatory = $true, ValueFromPipeline = $true)] | |
[string]$employeeID, | |
[string]$SSFBaseURI, | |
[object]$headers | |
) | |
try { | |
$ssfUserURI = "format=JSON`&`$orderby=personIdExternal asc`&`$expand=emailNav`&`$filter=startswith(personIdExternal,`'$($employeeID)`')" | |
$ssfUserQuery = ($SSFBaseURI + "PerPerson?`$" + $ssfUserURI ) | |
$ssfResult = $null | |
$ssfResult = Invoke-RestMethod -Uri $ssfUserQuery -Method Get -Headers $headers | |
if ($ssfResult.d.results.count -gt 0) { | |
return $ssfResult.d.results | |
} | |
else { | |
Write-Host "User Record with employeeID '$($employeeID)' not found." | |
} | |
} | |
catch { | |
Write-host $_ | |
} | |
} | |
Function Update-SSFEmail { | |
[cmdletbinding()] | |
param( | |
[Parameter(Mandatory = $true, ValueFromPipeline = $true)] | |
[string]$employeeID, | |
[string]$SSFBaseURI, | |
[string]$SSFBusinessEmailType, | |
[string]$businessEmailAddress, | |
[string]$SSFPersonalEmailType, | |
[object]$headers, | |
[Parameter(Mandatory = $false, ValueFromPipeline = $true)] | |
[string]$personalEmailAddress | |
) | |
try { | |
if ($personalEmailAddress) { | |
$ssfEmailUpdate = "[{`"__metadata`": {`"uri`":`"$($SSFBaseURI)PerEmail`(personIdExternal='" + $employeeID + "'`,emailType='$SSFBusinessEmailType'`)`"},`"emailType`":`"" + $SSFBusinessEmailType + "`",`"emailAddress`":`"" + $businessEmailAddress + "`",`"isPrimary`":true},{`"__metadata`": {`"uri`":`"$($SSFBaseURI)/PerEmail`(personIdExternal='" + $employeeID + "'`,emailType='$SSFPersonalEmailType'`)`"},`"emailType`":`"" + $SSFPersonalEmailType + "`",`"emailAddress`":`"" + $personalEmailAddress + "`",`"isPrimary`":false}]" | |
$ssfUpdateResult = Invoke-RestMethod -Uri "$($SSFBaseURI)upsert?`$format=JSON`&purgeType=Full" -Method Post -Headers $headers -Body $ssfEmailUpdate | |
} | |
else { | |
$ssfEmailUpdate = "{`"__metadata`": {`"uri`":`"$($SSFBaseURI)PerEmail`(personIdExternal='" + $employeeID + "'`,emailType='$SSFBusinessEmailType'`)`"},`"emailType`":`"" + $SSFBusinessEmailType + "`",`"emailAddress`":`"" + $businessEmailAddress + "`",`"isPrimary`":true}" | |
$ssfUpdateResult = Invoke-RestMethod -Uri "$($SSFBaseURI)upsert?`$format=JSON`&purgeType=Full" -Method Post -Headers $headers -Body $ssfEmailUpdate | |
} | |
return $ssfUpdateResult.d | |
} | |
catch { | |
Write-host "SSF update failed" ($_.Exception.Response.GetResponseStream()) | |
} | |
} | |
Connect-SSF -SSFBaseURI $SSFBaseURI | |
$userDetails = Get-SSFUser -employeeID 10020618 -SSFBaseURI $SSFBaseURI -headers $headers | |
# New Business Address | |
$businessEmail = "[email protected]" | |
# Get personal email address from result (if exist) | |
# Update SSF with Personal and Business email addresses and Business as the Primary | |
if ($null -ne ($userDetails.emailNav.results | Where-Object { $_.EmailType -eq $SSFPersonalEmailType })) { | |
$personalEmail = ($userDetails.emailNav.results | Where-Object { $_.EmailType -eq $SSFPersonalEmailType }).emailAddress | |
Update-SSFEmail -employeeID 10020618 -SSFBaseURI $SSFBaseURI -SSFBusinessEmailType $SSFBusinessEmailType -businessEmailAddress $businessEmail -SSFPersonalEmailType $SSFPersonalEmailType -personalEmailAddress $personalEmail -headers $headers | |
} | |
else { | |
Update-SSFEmail -employeeID 10020618 -SSFBaseURI $SSFBaseURI -SSFBusinessEmailType $SSFBusinessEmailType -businessEmailAddress $businessEmail -headers $headers | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment