Last active
October 5, 2022 22:57
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 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 = "darren@identirati.com" | |
# 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