Private/ConvertTo-SFSortValue.ps1
|
function ConvertTo-SFSortValue { [CmdletBinding()] param ( [Parameter(Mandatory)] $Value, [Parameter(Mandatory)] [ValidateSet('String', 'Integer', 'Decimal', 'DateTime', 'Boolean')] [string]$Type, [Parameter(Mandatory)] [string]$Field ) if ($null -eq $Value -or ($Value -is [string] -and [string]::IsNullOrWhiteSpace($Value))) { throw "LatestByGroup sort field '$Field' has no value." } switch ($Type) { 'String' { if ($Value -is [System.Collections.IEnumerable] -and $Value -isnot [string]) { throw "LatestByGroup sort field '$Field' must contain a scalar value." } return [string]$Value } 'Integer' { $parsed = 0L if (-not [long]::TryParse([string]$Value, [Globalization.NumberStyles]::Integer, [Globalization.CultureInfo]::InvariantCulture, [ref]$parsed)) { throw "LatestByGroup sort field '$Field' value '$Value' is not a valid integer." } return $parsed } 'Decimal' { $parsed = [decimal]::Zero if (-not [decimal]::TryParse([string]$Value, [Globalization.NumberStyles]::Number, [Globalization.CultureInfo]::InvariantCulture, [ref]$parsed)) { throw "LatestByGroup sort field '$Field' value '$Value' is not a valid decimal." } return $parsed } 'DateTime' { return ConvertTo-SFDateTimeOffset -Value $Value } 'Boolean' { $parsed = $false if (-not [bool]::TryParse([string]$Value, [ref]$parsed)) { throw "LatestByGroup sort field '$Field' value '$Value' is not a valid boolean." } return $parsed } } } |