Używam Powershell do uruchamiania kilku raportów o usługach Microsoft SQL Report Services i zapisywania wyników w dokumencie Word. Mam skrypt z funkcjami, które obsługują komunikację z serwerem raportu:SSRS i powershell: Parametr nie zaakceptowany
## File "qrap-functions.ps1"
function GetRSConnection($server, $instance)
{
$User = "xxxx"
$PWord = ConvertTo-SecureString -String "yyyy" -AsPlainText -Force
$c = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
$reportServerURI = "http://" + $server + "/" + $instance + "/ReportExecution2005.asmx?WSDL"
$RS = New-WebServiceProxy -Class 'RS' -NameSpace 'RS' -Uri $reportServerURI -Credential $c
$RS.Url = $reportServerURI
return $RS
}
function GetReport($RS, $reportPath)
{
$reportPath = "/" + $reportPath
#$reportPath
$Report = $RS.GetType().GetMethod("LoadReport").Invoke($RS, @($reportPath, $null))
$parameters = @()
$RS.SetExecutionParameters($parameters, "nl-nl") > $null
return $report
}
function AddParameter($params, $name, $val)
{
$par = New-Object RS.ParameterValue
$par.Name = $name
$par.Value = $val
$params += $par
return ,$params
}
function GetReportInFormat($RS, $report, $params, $format, $saveas)
{
$deviceInfo = "<DeviceInfo><NoHeader>True</NoHeader></DeviceInfo>"
$extension = ""
$mimeType = ""
$encoding = ""
$warnings = $null
$streamIDs = $null
$RS.SetExecutionParameters($params, "nl-nl") > $null
$RenderOutput = $RS.Render($format,
$deviceInfo,
[ref] $extension,
[ref] $mimeType,
[ref] $encoding,
[ref] $warnings,
[ref] $streamIDs
)
$Stream = New-Object System.IO.FileStream($saveas), Create, Write
$Stream.Write($RenderOutput, 0, $RenderOutput.Length)
$Stream.Close()
}
Następnie Mam skrypt, który wykonuje raport zawierający dane finansowe kwartalnych. Ten skrypt działa poprawnie:
## File "qrap-financieel.ps1"
. "./qrap-functions.ps1"
$saveas = "e:\test\financieel.doc"
$RS = GetRSConnection -server "MSZRDWH" -instance "reportserver_acc"
$report = GetReport -RS $RS -reportPath "kwartaalrapportage/kwartaalrapportage financieel"
$params = @()
$kwartaal = "[Periode Maand].[Jaar Kwartaal].&[2015-2]"
$kptc = "[Kostenplaats].[Team code].&[2003]"
$params = AddParameter -params $params -name "PeriodeMaandJaarKwartaal" -val $kwartaal
$params = AddParameter -params $params -name "KostenplaatsTeamcode" -val $kptc
GetReportInformat -RS $RS -report $report -params $params -format "WORD" -saveas $saveas
Wartości $kwartaal
i $kptc
są zakodowane tutaj, ale są parametry w aktualnej wersji tego skryptu. Oprócz kwartału finansowego dysponujemy trzema innymi raportami kwartalnymi, które muszą być wyprowadzane przez ten skrypt. Dwa z nich działają dobrze, w czwartym nie mogę uzyskać jednego z parametrów poprawnie. Skrypt dla że jeden jest:
## File "qrap-zorglog.ps1"
. "./qrap-functions.ps1"
$RS = GetRSConnection -server "MSZRDWH" -instance "reportserver_acc"
$report = GetReport -RS $RS -reportPath "kwartaalrapportage/kwartaalrapportage zorglogistiek"
$s = "Urologie"
$saveas = "e:\test\ZL Urologie.doc"
$params = @()
$kwartaal = "[Periode Maand].[Jaar Kwartaal].&[2015-2]"
$params = AddParameter -params $params -name "HoofdspecialismeSpecialismeOms" -val "[Hoofdspecialisme].[Specialisme Oms].&[$s]"
$params = AddParameter -params $params -name "PeriodeMaandJaarKwartaal" -val $kwartaal
$params = AddParameter -params $params -name "WachttijdenSpecialismeSpecialisme" -val "[Wachttijden Specialisme].[Specialisme].&[$s]"
$params = AddParameter -params $params -name "SpecialisatieGroeperingSpecialisatieGroeperingOms" -val "[Specialistie Groepering].[Specialistie Groepering Oms].&[$s]"
$params = AddParameter -params $params -name "AanvragendSpecialismeSpecialismeOms" -val "[AanvragendSpecialisme].[Specialisme Oms].&[$s]"
GetReportInformat -RS $RS -report $report -params $params -format "WORD" -saveas $saveas
Kiedy wykonać ten skrypt, dostaję ten błąd:
Exception calling "Render" with "7" argument(s): "System.Web.Services.Protocols.SoapException: This report requires a
default or user-defined value for the report parameter 'HoofdspecialismeSpecialismeOms'. To run or subscribe to this
report, you must provide a parameter value. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ReportParameterValueNot
SetException: This report requires a default or user-defined value for the report parameter
'HoofdspecialismeSpecialismeOms'. To run or subscribe to this report, you must provide a parameter value.
wyraźnie podasz wartość „HoofdspecialismeSpecialismeOms”; Wcześniej zauważyłem, że ten błąd jest również zgłaszany, gdy parametr nie jest w oczekiwanym formacie. Ten format, ponieważ filtr raportu opiera się na hierarchii w kostce SSAS, wygląda następująco: [hierarchy].[sub-level].&[member]
. Upewniłem się, że [Hoofdspecialisme].[Specialisme Oms].&[$s]
jest prawidłowym formatem przez szukając go w zapytaniu, które wypełnia monit w SSRS. Raport wyświetla dane po uruchomieniu przez SSRS - i biorąc parametr z monitu.
Zauważyłem, że ten parametr umożliwia wielokrotny wybór. Jednak nie uważam, że prowadzi to do błędu, ponieważ jest to również prawdą w przypadku AanvragendSpecialismeSpecialismeOms
.
Każdy pomysł, dlaczego ten jeden parametr nie zostanie wprowadzony do raportu po wywołaniu GetReportInformat
?
Nie pracuję dużo z PowerShell ale próbowałeś bez spacji między parametrami? Jest on ograniczony przestrzenią. –
@HannoverFist Właśnie próbowałem uruchomić skrypt bez dodatkowych spacji i kart między parametrami "-name" i "-val", ale bez powodzenia. Wciąż dostaję ten sam błąd. Przenoszenie 'HoofdspecialismeSpecialismeOms' w kolejności parametrów nic nie zmienia. – steenbergh
@Matt Masz rację co do '$ q'. W moim skrypcie jest to parametr. Write-Host mówi mi, że to rozwiązuje się dokładnie tak, jak tego chcę. Zmodyfikowałem pytanie, by naprawić tę wartość. Skrypt ma definicję '$ s', ale jest to" Urologie ". – steenbergh