Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5b52b13

Browse files
Merge pull request microsoft#186 from jzabroski/patch-4
Added support for passing in Report Parameters
2 parents 00f5a1b + 64384cd commit 5b52b13

File tree

1 file changed

+74
-14
lines changed

1 file changed

+74
-14
lines changed

‎ReportingServicesTools/Functions/CatalogItems/New-RsSubscription.ps1‎

Lines changed: 74 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2016 Microsoft Corporation. All Rights Reserved.
1+
# Copyright (c) 2016 Microsoft Corporation. All Rights Reserved.
22
# Licensed under the MIT License (MIT)
33

44
function New-RsSubscription
@@ -162,6 +162,11 @@ function New-RsSubscription
162162
[string]
163163
$Schedule,
164164

165+
[Parameter(Mandatory=$False)]
166+
[AllowNull()]
167+
[hashtable]
168+
$Parameters,
169+
165170
[Parameter(Mandatory=$True)]
166171
[ValidateSet('Email','FileShare')]
167172
[string]
@@ -254,7 +259,7 @@ function New-RsSubscription
254259
{
255260
'Email'
256261
{
257-
$Params = @{
262+
$ExtensionParams = @{
258263
TO = $To
259264
CC = $CC
260265
BCC = $BCC
@@ -269,7 +274,7 @@ function New-RsSubscription
269274
}
270275
'FileShare'
271276
{
272-
$Params = @{
277+
$ExtensionParams = @{
273278
PATH = $FileSharePath
274279
FILENAME = $Filename
275280
RENDER_FORMAT = $RenderFormat
@@ -278,31 +283,84 @@ function New-RsSubscription
278283

279284
if ($FileShareCredentials -ne $null)
280285
{
281-
$Params.USERNAME = $FileShareCredentials.UserName
282-
$Params.PASSWORD = $FileShareCredentials.GetNetworkCredential().Password
283-
$Params.DEFAULTCREDENTIALS = $false
286+
$ExtensionParams.USERNAME = $FileShareCredentials.UserName
287+
$ExtensionParams.PASSWORD = $FileShareCredentials.GetNetworkCredential().Password
288+
$ExtensionParams.DEFAULTCREDENTIALS = $false
284289
}
285290
else
286291
{
287-
$Params.DEFAULTCREDENTIALS = $true
292+
$ExtensionParams.DEFAULTCREDENTIALS = $true
288293
}
289294
}
290295
}
291296

292-
$ParameterValues = @()
293-
$Params.GetEnumerator() | ForEach-Object {
294-
$ParameterValues = $ParameterValues + (New-Object "$Namespace.ParameterValue" -Property @{ Name = $_.Name; Value = $_.Value })
297+
$ExtensionParameterValues = @()
298+
299+
$ExtensionParams.GetEnumerator() | ForEach-Object {
300+
$ExtensionParameterValues = $ExtensionParameterValues + (New-Object "$Namespace.ParameterValue" -Property @{ Name = $_.Name; Value = $_.Value })
295301
}
296302

297-
$ExtensionSettings = New-Object "$Namespace.ExtensionSettings" -Property @{ Extension = "Report Server $DeliveryMethod"; ParameterValues = $ParameterValues }
303+
$ExtensionSettings = New-Object "$Namespace.ExtensionSettings" -Property @{ Extension = "Report Server $DeliveryMethod"; ParameterValues = $ExtensionParameterValues }
298304

299305
$MatchData = $Schedule
300-
$ReportParameters = $Null
306+
307+
# Transform $Parameters to $ParameterValues
308+
if ($Parameters -ne $null)
309+
{
310+
$parametersCopy = @{};
311+
# First, remove null-valued keys - At some point between SQL Server 2005 and 2016 (probably 2012), null-valued keys are no longer stored in the database.
312+
# null-valued keys are now represented in the SOAP API by not passing in the null-valued parameter.
313+
foreach ($key in $Parameters.Keys)
314+
{
315+
if ($Parameters[$key] -ne $null)
316+
{
317+
$parametersCopy.Add($key, $Parameters[$key]);
318+
}
319+
}
320+
321+
$Parameters = $parametersCopy;
322+
323+
# Similarly, if we pass in an empty collection, the SOAP API will also be unhappy!
324+
# Empty collections must be mapped to $null
325+
if ($Parameters.Count -ne 0)
326+
{
327+
$ParameterValues = New-Object "$Namespace.ParameterValue[]" $Parameters.Count
328+
329+
$i = 0;
330+
foreach ($key in $Parameters.Keys)
331+
{
332+
$tmpValue = $Parameters[$key]
333+
334+
# If a key's value is $null or whitespace, skip it. SSRS SOAP API does not like it;
335+
# e.g., if a report parameter named 'date' was null,
336+
# it would throw an error message "Default value or value provided for the report parameter 'date' is not a valid value."
337+
if ([string]::IsNullOrWhiteSpace($tmpValue))
338+
{
339+
continue;
340+
}
341+
else
342+
{
343+
$tmpParameter = New-Object "$Namespace.ParameterValue" -Property @{ Name = $key; Value = $tmpValue }
344+
345+
$ParameterValues[$i] = $tmpParameter
346+
$i++;
347+
}
348+
}
349+
}
350+
else
351+
{
352+
$ParameterValues = $null;
353+
}
354+
}
355+
else
356+
{
357+
$ParameterValues = $null
358+
}
301359

302360
if ($PSCmdlet.ShouldProcess($RsItem, "Creating new subscription"))
303361
{
304362
Write-Verbose "Creating Subscription..."
305-
$subscriptionId = $Proxy.CreateSubscription($RsItem, $ExtensionSettings, $Description, $EventType, $MatchData, $ReportParameters)
363+
$subscriptionId = $Proxy.CreateSubscription($RsItem, $ExtensionSettings, $Description, $EventType, $MatchData, $ParameterValues)
306364

307365
[pscustomobject]@{
308366
NewSubscriptionId = $subscriptionId
@@ -313,7 +371,9 @@ function New-RsSubscription
313371
}
314372
catch
315373
{
316-
throw (New-Object System.Exception("Exception occurred while creating subscription! $($_.Exception.Message)", $_.Exception))
374+
$ex = $_.Exception;
375+
$ErrorMessage = $ex.Message;
376+
throw (New-Object System.Exception("Exception occurred while creating subscription! ErrorMessage: [$ErrorMessage]", $Exception))
317377
}
318378
}
319379
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /