ps/Modules/Alkami.DevOps.SqlReports/Public/Set-ReportParameters.ps1

63 lines
2.0 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
function Set-ReportParameters {
<#
.SYNOPSIS
Set SSRS report parameters from local RDL file on remote SSRS report
#>
[CmdletBinding()]
Param(
[Parameter(Position = 0, Mandatory = $true)]
[System.Web.Services.Protocols.SoapHttpClientProtocol]$Proxy,
[CmdletBinding()]
[Parameter(Position = 1, Mandatory = $true)]
[System.Web.Services.Protocols.SoapHttpClientProtocol]$SSRSExecutionProxy,
[Parameter(Position = 2, Mandatory = $true)]
[string]$ReportPath,
[Parameter(Position = 3, Mandatory = $true)]
[string]$RdlPath
)
$logLead = Get-LogLeadName
Write-Verbose ("$logLead : Getting RDL Content from {0}" -f $RdlPath)
[xml]$reportContent = Get-Content $RdlPath
$reportParameters = @()
$namespace = $Proxy.GetType().Namespace
Write-Verbose "$logLead : Calling Remove-DataSources"
$reportData = Remove-Datasources $reportContent
Write-Verbose "$logLead : Loading Report Execution Definition"
$warnings = $null
try {
$reportInfo = $SSRSExecutionProxy.LoadReportDefinition($reportData, [ref]$warnings)
} catch {
Write-Warning "$logLead : --- An error occurred reading the report parameters. Let the reports developer know and manually validate the report parameters."
return
}
Write-Verbose "$logLead : Cloning Report Parameters"
foreach ($parameter in $reportInfo.Parameters) {
$itemParameter = New-Object $Proxy.GetType().Assembly.GetType("$namespace.ItemParameter")
$itemParameter = Copy-ObjectProperties $parameter $itemParameter @("ValidValues")
foreach ($value in $parameter.ValidValues) {
$validValue = New-Object $Proxy.GetType().Assembly.GetType("$namespace.ValidValue")
Copy-ObjectProperties $value $validValue
$itemParameter.ValidValues += $validValue
}
$reportParameters += $itemParameter
}
Write-Verbose "$logLead : Using Proxy to Set Report Parameters"
$Proxy.SetItemParameters($ReportPath, $reportParameters)
}