Public/PerformanceTest.ps1
|
### Performance Tests ### function Test-CrmViewPerformance{ # .ExternalHelp Campgemini.Xrm.Data.PowerShell.Help.xml [CmdletBinding()] PARAM( [parameter(Mandatory=$false)] [Microsoft.Xrm.Sdk.IOrganizationService]$conn, [parameter(Mandatory=$true, Position=1, ParameterSetName="CrmRecord")][Alias("CrmRecord")] [PSObject]$View, [parameter(Mandatory=$true, Position=1, ParameterSetName="Id")][Alias("Id")] [guid]$ViewId, [parameter(Mandatory=$true, Position=1, ParameterSetName="Name")] [string]$ViewName, [parameter(Mandatory=$false)] [switch]$RunAsViewOwner, [parameter(Mandatory=$false)] [guid]$RunAs, [parameter(Mandatory=$false)] [switch]$IsUserView ) $conn = VerifyCrmConnectionParam -conn $conn -pipelineValue ($PSBoundParameters.ContainsKey('conn')) if($IsUserView) { Write-Verbose "querying userquery" $logicalName = "userquery" $fields = "name,fetchxml,layoutxml,returnedtypecode,ownerid".Split(","); } else { Write-Verbose "querying savedquery" $logicalName = "savedquery" $fields = "name,fetchxml,layoutxml,returnedtypecode".Split(","); } try { if(-not $View) { if($ViewId -ne $null) { $View = Get-CrmRecord -conn $conn -EntityLogicalName $logicalName -Id $viewId -Fields $fields } elseif($viewName -ne "") { $views = Get-CrmRecords -conn $conn -EntityLogicalName $logicalName -FilterAttribute name -FilterOperator eq -FilterValue $viewName -Fields $fields if($views.CrmRecords.Count -eq 0) { return } else { $view = $views.CrmRecords[0] } } else{ throw "ViewID or ViewName is null, input a valid view name or View ID." } } # if the view has ownerid, then its User Defined View if($View.ownerid -ne $null) { if($RunAsViewOwner) { Set-CrmConnectionCallerId -conn $conn -CallerId $view.ownerid_property.Value.Id } elseif($RunAs -ne $null) { Set-CrmConnectionCallerId -conn $conn -CallerId $RunAs } # Get all records by using Fetch CrmTimerStart $records = Get-CrmRecordsByFetch -conn $conn -Fetch $View.fetchxml -AllRows -ErrorAction SilentlyContinue -WarningAction SilentlyContinue $perf = CrmTimerStop $owner = $View.ownerid $totalCount = $records.Count } else { if($RunAs -ne $null) { Set-CrmConnectionCallerId -conn $conn -CallerId $RunAs } # Get all records by using Fetch CrmTimerStart $records = Get-CrmRecordsByFetch -conn $conn -Fetch $View.fetchxml -AllRows -ErrorAction SilentlyContinue -WarningAction SilentlyContinue $perf = CrmTimerStop $owner = "System" $totalCount = $records.Count } # Create result set $psobj = New-Object -TypeName System.Management.Automation.PSObject Add-Member -InputObject $psobj -MemberType NoteProperty -Name "ViewName" -Value $View.name Add-Member -InputObject $psobj -MemberType NoteProperty -Name "FetchXml" -Value $View.fetchxml Add-Member -InputObject $psobj -MemberType NoteProperty -Name "Entity" -Value $View.returnedtypecode Add-Member -InputObject $psobj -MemberType NoteProperty -Name "Columns" -Value ([xml]$view.layoutxml).grid.row.cell.Count Add-Member -InputObject $psobj -MemberType NoteProperty -Name "LayoutXml" -Value $view.layoutxml Add-Member -InputObject $psobj -MemberType NoteProperty -Name "TotalRecords" -Value $totalCount Add-Member -InputObject $psobj -MemberType NoteProperty -Name "Owner" -Value $owner Add-Member -InputObject $psobj -MemberType NoteProperty -Name "Performance" -Value $perf #before returning always set connection caller id back to ourself: if($RunAs -or $RunAsViewOwner){ Write-Verbose "Setting connection caller id back to current user" Set-CrmConnectionCallerId -conn $conn -CallerId $RunAs } $psobj #implicitly write to the output stream return #return control } catch { throw } } |