Functions/Client/Get-CdsRecord.ps1
<#
.SYNOPSIS Search for record with simple query. #> function Get-CdsRecord { [CmdletBinding()] [OutputType([Microsoft.Xrm.Sdk.Entity])] param ( [Parameter(Mandatory=$false, ValueFromPipeline)] [Microsoft.Xrm.Tooling.Connector.CrmServiceClient] $XrmClient = $Global:XrmClient, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [String] $LogicalName, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String] $Key, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String] $AttributeName, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [Alias("Id")] [Object] $Value, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String[]] $Columns ) begin { $StopWatch = [System.Diagnostics.Stopwatch]::StartNew(); Trace-CdsFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters); } process { $columnSet = New-Object -TypeName Microsoft.Xrm.Sdk.Query.ColumnSet; if($Columns) { if ($Columns.Contains("*")) { $columnSet.AllColumns = $true; } else { $Columns | ForEach-Object { $columnSet.AddColumn($_); } } } if($Key) { $request = New-Object -TypeName Microsoft.Xrm.Sdk.Messages.RetrieveRequest; $request.Target = New-CdsEntityReference -LogicalName $LogicalName -Key $Key -Value $Value; $request.ColumnSet = $columnSet; $response = $XrmClient.Execute($request); $response.Entity; } if($AttributeName) { $query = New-CdsQueryExpression -LogicalName $LogicalName -TopCount 1; $query.ColumnSet = $columnSet; $query | Add-CdsQueryCondition -Field $AttributeName -Condition Equal -Values $Value | Out-Null; $result = $XrmClient | Get-CdsMultipleRecords -Query $query; $result | Select-Object -First 1; } else { $result = Protect-CdsCommand -ScriptBlock { $XrmClient.Retrieve($LogicalName, $Value, $columnSet) }; $result; } } end { $StopWatch.Stop(); Trace-CdsFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch; } } Export-ModuleMember -Function Get-CdsRecord -Alias *; Register-ArgumentCompleter -CommandName Get-CdsRecord -ParameterName "LogicalName" -ScriptBlock { param($CommandName, $ParameterName, $WordToComplete, $CommandAst, $FakeBoundParameters) $validLogicalNames = Get-CdsEntitiesLogicalName; return $validLogicalNames | Where-Object { $_ -like "*$wordToComplete*"}; } Register-ArgumentCompleter -CommandName Get-CdsRecord -ParameterName "AttributeName" -ScriptBlock { param($CommandName, $ParameterName, $WordToComplete, $CommandAst, $FakeBoundParameters) if (-not ($fakeBoundParameters.ContainsKey("LogicalName"))) { return @(); } $validAttributeNames = Get-CdsAttributesLogicalName -EntityLogicalName $fakeBoundParameters.LogicalName; return $validAttributeNames | Where-Object { $_ -like "*$wordToComplete*"}; } Register-ArgumentCompleter -CommandName Get-CdsRecord -ParameterName "Columns" -ScriptBlock { param($CommandName, $ParameterName, $WordToComplete, $CommandAst, $FakeBoundParameters) if (-not ($fakeBoundParameters.ContainsKey("LogicalName"))) { return @(); } $validAttributeNames = Get-CdsAttributesLogicalName -EntityLogicalName $fakeBoundParameters.LogicalName; return $validAttributeNames | Where-Object { $_ -like "*$wordToComplete*"}; } |