Public/EAI/Build-EAIQueryFilter.ps1
|
<# .SYNOPSIS Builds a filter expression for Edwin record queries. .DESCRIPTION Build-EAIQueryFilter interactively creates a filterCondition schema version 4 object for use with Invoke-EAIRecordsQuery and other Edwin UI Query cmdlets. The completed filter is saved to the global `$EAIQueryFilter` variable. The same filter DSL is used for SDT schedules and record queries. .PARAMETER PassThru Returns the filter object instead of only saving it to `$EAIQueryFilter`. .PARAMETER ExistingFilter Optional current filter to keep or replace when refining a query. .EXAMPLE Build-EAIQueryFilter .EXAMPLE $filter = Build-EAIQueryFilter -PassThru Invoke-EAIRecordsQuery -RecordType events -Field '_id','cf.eventName' -Filter $filter .EXAMPLE Build-EAIQueryFilter -ExistingFilter $filter .NOTES Use Connect-EAIAccount before running Edwin query cmdlets. Requires query_records scope on the credentials used for Invoke-EAIRecordsQuery. .INPUTS None. You cannot pipe objects to this command. .OUTPUTS Returns an Edwin filter object when using -PassThru. #> function Build-EAIQueryFilter { [CmdletBinding()] [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWriteHost', '', Justification = 'Required for the interactive wizard')] param ( [Switch]$PassThru, $ExistingFilter ) try { Write-Host '' Write-Host 'Welcome to the Edwin Query Filter Builder!' Write-Host 'Build a filter to choose which records match your search.' Write-Host 'Filters use schemaName filterCondition, schemaVersion 4, and a JSON expression tree.' Write-Host '' $filter = $null if ($ExistingFilter) { Write-Host '--- Current Filter ---' -ForegroundColor Cyan Write-EAISdtFilterPreview -Filter $ExistingFilter Write-Host '----------------------' if (Get-LMUserConfirmation -Prompt 'Keep the current filter?' -DefaultAnswer 'y') { $filter = ConvertTo-EAISdtFilterObject -Filter $ExistingFilter } } if (-not $filter) { $expression = Read-EAISdtFilterExpressionInteractive $filter = New-EAISdtFilterObject -Expression $expression } Test-EAISdtFilterObject -Filter $filter | Out-Null Write-Host '' Write-Host '--- Filter Preview ---' -ForegroundColor Cyan Write-EAISdtFilterPreview -Filter $filter Write-Host '----------------------' if (-not (Get-LMUserConfirmation -Prompt 'Use this filter?' -DefaultAnswer 'y')) { Write-Host 'Filter builder cancelled.' -ForegroundColor Yellow return $null } Set-Variable -Name 'EAIQueryFilter' -Value $filter -Scope Global if (-not $PassThru) { Write-Host 'Filter has been saved to the `$EAIQueryFilter variable.' -ForegroundColor Green return } Write-Host 'Filter has been saved to the `$EAIQueryFilter variable.' -ForegroundColor Green return $filter } catch [LMSDTWizardCancelledException] { Write-Host $_.Exception.Message -ForegroundColor Yellow return $null } } |