src/Metadata/New-XrmLookupColumn.ps1
|
<# .SYNOPSIS Build a LookupAttributeMetadata for a Dataverse column. .DESCRIPTION Creates a configured Microsoft.Xrm.Sdk.Metadata.LookupAttributeMetadata object for relationship-based creation requests such as Add-XrmOneToManyRelationship or Add-XrmPolymorphicLookup. This constructor does not create the lookup through Add-XrmColumn because Dataverse requires a relationship creation request for lookup attributes. .PARAMETER LogicalName Column logical name. .PARAMETER SchemaName Column schema name. .PARAMETER DisplayName Column display name. .PARAMETER Targets Referenced table logical names. .PARAMETER Description Column description label. .PARAMETER RequiredLevel Required level. Default: None. .PARAMETER LanguageCode Label language code. Default: 1033. .OUTPUTS Microsoft.Xrm.Sdk.Metadata.LookupAttributeMetadata. .EXAMPLE $attribute = New-XrmLookupColumn -LogicalName "new_accountid" -SchemaName "new_AccountId" -DisplayName "Account" -Targets @("account"); $relationship = [Microsoft.Xrm.Sdk.Metadata.OneToManyRelationshipMetadata]::new(); $relationship.SchemaName = "new_account_contact"; $relationship.ReferencedEntity = "account"; $relationship.ReferencingEntity = "contact"; $relationship.ReferencedAttribute = "accountid"; Add-XrmOneToManyRelationship -OneToManyRelationship $relationship -Lookup $attribute; .LINK https://learn.microsoft.com/power-apps/developer/data-platform/create-edit-entity-relationships #> function New-XrmLookupColumn { [CmdletBinding()] [OutputType([Microsoft.Xrm.Sdk.Metadata.LookupAttributeMetadata])] param ( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $LogicalName, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $SchemaName, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $DisplayName, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [string[]] $Targets, [Parameter(Mandatory = $false)] [string] $Description, [Parameter(Mandatory = $false)] [Microsoft.Xrm.Sdk.Metadata.AttributeRequiredLevel] $RequiredLevel = [Microsoft.Xrm.Sdk.Metadata.AttributeRequiredLevel]::None, [Parameter(Mandatory = $false)] [int] $LanguageCode = 1033 ) begin { $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters); } process { $attribute = [Microsoft.Xrm.Sdk.Metadata.LookupAttributeMetadata]::new(); $attribute.LogicalName = $LogicalName; $attribute.SchemaName = $SchemaName; $attribute.DisplayName = New-XrmLabel -Text $DisplayName -LanguageCode $LanguageCode; $attribute.Targets = $Targets; $attribute.RequiredLevel = [Microsoft.Xrm.Sdk.Metadata.AttributeRequiredLevelManagedProperty]::new($RequiredLevel); if (-not [string]::IsNullOrWhiteSpace($Description)) { $attribute.Description = New-XrmLabel -Text $Description -LanguageCode $LanguageCode; } $attribute; } end { $StopWatch.Stop(); Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch; } } Set-Alias -Name New-LookupColumn -Value New-XrmLookupColumn; Export-ModuleMember -Function New-XrmLookupColumn -Alias *; |