src/Metadata/Set-XrmGlobalOptionSetOptions.ps1
|
<# .SYNOPSIS Synchronize the options of a global option set. .DESCRIPTION Update the list of options of an existing global option set from a typed OptionMetadata list. Existing values are updated with Set-XrmOptionSetValue, missing values are created with Add-XrmOptionSetValue, and extra values can optionally be removed. .PARAMETER XrmClient Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient) .PARAMETER Name Global option set name. .PARAMETER Options Desired option list. .PARAMETER DisplayName Optional updated display label for the global option set. .PARAMETER Description Optional updated description label for the global option set. .PARAMETER MergeLabels Whether to keep text defined for languages not included in the Label. Default: true. .PARAMETER RemoveAbsentOptions Remove existing option values that are not present in the desired option list. .PARAMETER SolutionUniqueName Solution unique name context for the update. .OUTPUTS Microsoft.Xrm.Sdk.Metadata.OptionSetMetadataBase. .EXAMPLE $options = @( (New-XrmOption -Value 100000000 -Label (New-XrmLabel -Text "Low") -Color "#CDDAFD"), (New-XrmOption -Value 100000001 -Label (New-XrmLabel -Text "High") -Color "#FCE1E4") ); Set-XrmGlobalOptionSetOptions -Name "new_priority" -Options $options -RemoveAbsentOptions; #> function Set-XrmGlobalOptionSetOptions { [CmdletBinding()] [OutputType([Microsoft.Xrm.Sdk.Metadata.OptionSetMetadataBase])] param ( [Parameter(Mandatory = $false, ValueFromPipeline)] [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient] $XrmClient = $Global:XrmClient, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $Name, [Parameter(Mandatory = $true)] [ValidateNotNull()] [Microsoft.Xrm.Sdk.Metadata.OptionMetadata[]] $Options, [Parameter(Mandatory = $false)] [Microsoft.Xrm.Sdk.Label] $DisplayName, [Parameter(Mandatory = $false)] [Microsoft.Xrm.Sdk.Label] $Description, [Parameter(Mandatory = $false)] [bool] $MergeLabels = $true, [Parameter(Mandatory = $false)] [switch] $RemoveAbsentOptions, [Parameter(Mandatory = $false)] [string] $SolutionUniqueName ) begin { $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters); } process { $optionSet = Get-XrmGlobalOptionSet -XrmClient $XrmClient -Name $Name; if ($PSBoundParameters.ContainsKey('DisplayName') -or $PSBoundParameters.ContainsKey('Description')) { if ($PSBoundParameters.ContainsKey('DisplayName')) { $optionSet.DisplayName = $DisplayName; } if ($PSBoundParameters.ContainsKey('Description')) { $optionSet.Description = $Description; } $setParams = @{ XrmClient = $XrmClient; OptionSetMetadata = $optionSet; MergeLabels = $MergeLabels; }; if ($PSBoundParameters.ContainsKey('SolutionUniqueName')) { $setParams['SolutionUniqueName'] = $SolutionUniqueName; } Set-XrmGlobalOptionSet @setParams | Out-Null; } $syncParams = @{ XrmClient = $XrmClient; OptionSetName = $Name; ExistingOptions = $optionSet.Options; Options = $Options; MergeLabels = $MergeLabels; RemoveAbsentOptions = $RemoveAbsentOptions; }; if ($PSBoundParameters.ContainsKey('SolutionUniqueName')) { $syncParams['SolutionUniqueName'] = $SolutionUniqueName; } Sync-XrmOptionSetOptionsInternal @syncParams; Get-XrmGlobalOptionSet -XrmClient $XrmClient -Name $Name; } end { $StopWatch.Stop(); Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch; } } Export-ModuleMember -Function Set-XrmGlobalOptionSetOptions -Alias *; |