src/Customization/Get-XrmCharts.ps1

<#
    .SYNOPSIS
    Retrieve chart records from Microsoft Dataverse.

    .DESCRIPTION
    Get savedqueryvisualization records (system charts) filtered by entity logical name.

    .PARAMETER XrmClient
    Xrm connector initialized to target instance. Use latest one by default. (Dataverse ServiceClient)

    .PARAMETER EntityLogicalName
    Table / Entity logical name to filter charts.

    .PARAMETER Columns
    Specify expected columns to retrieve. (Default : all columns)

    .OUTPUTS
    Microsoft.Xrm.Sdk.Entity[]. Array of savedqueryvisualization records.

    .EXAMPLE
    $charts = Get-XrmCharts -EntityLogicalName "account";
#>

function Get-XrmCharts {
    [CmdletBinding()]
    [OutputType([Microsoft.Xrm.Sdk.Entity[]])]
    param
    (
        [Parameter(Mandatory = $false, ValueFromPipeline)]
        [Microsoft.PowerPlatform.Dataverse.Client.ServiceClient]
        $XrmClient = $Global:XrmClient,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]
        $EntityLogicalName,

        [Parameter(Mandatory = $false)]
        [ValidateNotNullOrEmpty()]
        [string[]]
        $Columns = @("*")
    )
    begin {
        $StopWatch = [System.Diagnostics.Stopwatch]::StartNew();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Start -Parameters ($MyInvocation.MyCommand.Parameters);
    }
    process {
        $query = New-XrmQueryExpression -LogicalName "savedqueryvisualization" -Columns $Columns;
        $query = $query | Add-XrmQueryCondition -Field "primaryentitytypecode" -Condition Equal -Values $EntityLogicalName;

        $charts = $XrmClient | Get-XrmMultipleRecords -Query $query;
        $charts;
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }
}

Export-ModuleMember -Function Get-XrmCharts -Alias *;