src/Solutions/Customization/Charts/Get-XrmCharts.ps1

<#
    .SYNOPSIS
    Retrieve chart records from Microsoft Dataverse.

    .DESCRIPTION
    Get savedqueryvisualization records (system charts) filtered by entity logical name.
    Use -Unpublished to also retrieve charts that are in draft state.

    .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)

    .PARAMETER Unpublished
    When specified, uses RetrieveUnpublishedMultiple to include charts in draft (unpublished) state.
    Without this switch only published charts are returned.

    .OUTPUTS
    PSCustomObject[]. Array of savedqueryvisualization records (XrmObject).

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

    .EXAMPLE
    # Include unpublished drafts
    $allCharts = Get-XrmCharts -EntityLogicalName "account" -Unpublished;
#>

function Get-XrmCharts {
    [CmdletBinding()]
    [OutputType([PSCustomObject[]])]
    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 = @("*"),

        [Parameter(Mandatory = $false)]
        [switch]
        $Unpublished
    )
    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;

        $XrmClient | Get-XrmMultipleComponents -Query $query -Unpublished:$Unpublished;
    }
    end {
        $StopWatch.Stop();
        Trace-XrmFunction -Name $MyInvocation.MyCommand.Name -Stage Stop -StopWatch $StopWatch;
    }
}

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