src/Metadata/New-XrmPolymorphicLookup.ps1
|
<# .SYNOPSIS Create a polymorphic lookup attribute in Microsoft Dataverse. .DESCRIPTION Create a polymorphic lookup column that can reference multiple table types using the CreatePolymorphicLookupAttribute SDK message. .PARAMETER XrmClient Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient) .PARAMETER Lookup The LookupAttributeMetadata defining the polymorphic lookup column. .PARAMETER OneToManyRelationships Array of OneToManyRelationshipMetadata objects defining each target entity relationship. .PARAMETER SolutionUniqueName Solution unique name to add the polymorphic lookup to. .OUTPUTS Microsoft.Xrm.Sdk.OrganizationResponse. The CreatePolymorphicLookupAttribute response. .EXAMPLE $lookup = [Microsoft.Xrm.Sdk.Metadata.LookupAttributeMetadata]::new(); $lookup.SchemaName = "new_RegardingId"; $lookup.DisplayName = New-XrmLabel -Text "Regarding"; $rel1 = [Microsoft.Xrm.Sdk.Metadata.OneToManyRelationshipMetadata]::new(); $rel1.SchemaName = "new_account_regarding"; $rel1.ReferencedEntity = "account"; $rel1.ReferencingEntity = "new_custom"; $rel2 = [Microsoft.Xrm.Sdk.Metadata.OneToManyRelationshipMetadata]::new(); $rel2.SchemaName = "new_contact_regarding"; $rel2.ReferencedEntity = "contact"; $rel2.ReferencingEntity = "new_custom"; New-XrmPolymorphicLookup -Lookup $lookup -OneToManyRelationships @($rel1, $rel2); .LINK https://learn.microsoft.com/en-us/power-apps/developer/data-platform/define-alternate-keys-entity#create-polymorphic-lookup #> function New-XrmPolymorphicLookup { [CmdletBinding()] [OutputType([Microsoft.Xrm.Sdk.OrganizationResponse])] param ( [Parameter(Mandatory = $false, ValueFromPipeline)] [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient] $XrmClient = $Global:XrmClient, [Parameter(Mandatory = $true)] [ValidateNotNull()] [Microsoft.Xrm.Sdk.Metadata.LookupAttributeMetadata] $Lookup, [Parameter(Mandatory = $true)] [ValidateNotNull()] [Microsoft.Xrm.Sdk.Metadata.OneToManyRelationshipMetadata[]] $OneToManyRelationships, [Parameter(Mandatory = $false)] [string] $SolutionUniqueName ) begin { $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters); } process { $request = New-XrmRequest -Name "CreatePolymorphicLookupAttribute"; $request = $request | Add-XrmRequestParameter -Name "Lookup" -Value $Lookup; $request = $request | Add-XrmRequestParameter -Name "OneToManyRelationships" -Value $OneToManyRelationships; if ($PSBoundParameters.ContainsKey('SolutionUniqueName')) { $request = $request | Add-XrmRequestParameter -Name "SolutionUniqueName" -Value $SolutionUniqueName; } $response = $XrmClient | Invoke-XrmRequest -Request $request; $response; } end { $StopWatch.Stop(); Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch; } } Export-ModuleMember -Function New-XrmPolymorphicLookup -Alias *; |