63 lines
2.0 KiB
PowerShell
63 lines
2.0 KiB
PowerShell
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)
|
|
}
|
|
|