获取报告参数作为URL字符串

时间:2018-02-22 00:27:37

标签: javascript jquery asp.net vb.net reporting-services

我有一个提供SSRS报告的应用程序。可通过以下方式访问给定报告:

https://reportserver.com/reportname

点击查看报告后,会使用用户定义的参数向报表服务器提交回发。我需要获取这些用户定义的参数并将它们解析为URL字符串。

期望的结果: https://reportserver.com/reportname?param1=foo&param2=bar

我发现this doc让我接近我需要的东西。这个方法应该允许我抓住所有可见参数并自己解析它们,但我也需要隐藏参数

如何构建此参数字符串?我们在前端使用JavaScript / jQuery,因此可以在POST之前抓住这个客户端,但我还没有找到一种方法。

1 个答案:

答案 0 :(得分:2)

我使用参数3种不同的方式为报告创建了URL。前两者的组合可以让您更接近解决问题。

在报告属性中使用自定义代码。

Public Function ShowParameterValues(ByVal parameter as Parameter)  
 as String  
   Dim s as String   
   If parameter.IsMultiValue then  
      s = "Multivalue: "   
      For i as integer = 0 to parameter.Count-1  
         s = s + CStr(parameter.Value(i)) + " "   
      Next  
   Else  
      s = "Single value: " + CStr(parameter.Value)  
   End If  
   Return s  
End Function  

OR

在报告中使用超链接。

=Globals!ReportServerUrl + "/ReportServer?" 
+ Replace(Globals!ReportFolder, " ", "+") + "%2f" 
+ Replace(Globals!ReportName, " ", "+") + "&rs:Command=Render"
+ "&single_value_parameter=" + Parameters!single_value_parameter.Value 
+ "&multi_value_parameter=" + Join(Parameters!multi_value_parameter.Value, "&multi_value_parameter=") 
+ IIf(IsNothing(Parameters!week_date_start.Value), "&week_date_start:isnull=True", "&week_date_start=" & Format(Parameters!week_date_start.Value, Variables!FormatDate.Value))
+ IIf(IsNothing(Parameters!week_date_end.Value), "&week_date_end:isnull=True", "&week_date_end=" & Format(Parameters!week_date_end.Value, Variables!FormatDate.Value))

另外,我通常将其添加为报表变量,然后您可以为页脚添加标准文本框,而不必更改。

=Variables!UrlReportWithParameters.Value

OR

使用执行日志。查看专栏URL_Report_Filtered

/*'---------------------------------------------------------------------------------------
' Purpose:  to search the reporting services execution log
'-----------------------------------------------------------------------------------------

DECLARE @all_value AS VARCHAR(10)
DECLARE @LogStatus AS VARCHAR(50)
DECLARE @ReportFolder AS VARCHAR(450)
DECLARE @ReportName AS VARCHAR(450)
DECLARE @UserName AS VARCHAR(260)
DECLARE @GroupByColumn AS VARCHAR(50)
DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME

SET @all_value = '<ALL>'
SET @LogStatus = '<ALL>'
SET @ReportFolder = 'Testing'
SET @ReportName = '<ALL>' 
SET @UserName = '<ALL>'
SET @GroupByColumn = 'Report Folder'
SET @StartDate = NULL
SET @EndDate = NULL

*/


;WITH
report_users 
AS
(
    SELECT [UserID], [UserName], [SimpleUserName] = UPPER(RIGHT([UserName], (LEN([UserName])-CHARINDEX('\',[UserName])))) FROM dbo.[Users]
)
,
report_catalog
AS
(
    SELECT    
          rpt.[ItemID]
        , rpt.[CreatedById]
        , rpt.[ModifiedById]
        , rpt.[Type]
        , rpt.[Name] 
        , [ReportName] = rpt.[Name] 
        , rpt.[Description]
        , rpt.[Parameter]
        , [CreationDate] = CONVERT(DATETIME, CONVERT(VARCHAR(11), rpt.[CreationDate], 13))
        , [ModifiedDate] = CONVERT(DATETIME, CONVERT(VARCHAR(11), rpt.[ModifiedDate], 13))
        , [ReportFolder] = SUBSTRING(rpt.[Path], 2, Len(rpt.[Path])-Len(rpt.[Name])-2) 
        , rpt.[Path]
        , [URL_ReportFolder] = 'http://' + Host_Name() + '/Reports/Pages/Report.aspx?ItemPath=%2f'  + SUBSTRING(rpt.[Path], 2, Len(rpt.[Path])-Len(rpt.[Name])-2)  + '&ViewMode=List'
        , [URL_Report] = 'http://' + Host_Name() + '/Reports/Pages/Report.aspx?ItemPath=%2f'  + SUBSTRING(rpt.[Path], 2, Len(rpt.[Path])-Len(rpt.[Name])-2)  + '%2f' + rpt.[Name]
        , [ReportDefinition] = CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), rpt.[Content]))  
        , [HostName] = Host_Name()
    FROM 
        dbo.[Catalog] AS rpt
    WHERE 
        1=1
        AND rpt.[Type] = 2
)
SELECT 
    [GroupBy1] = 
        CASE  
            WHEN @GroupByColumn = 'Report Name' THEN rpt.[ReportName]
            WHEN @GroupByColumn = 'Report Folder' THEN rpt.[ReportFolder]
            WHEN @GroupByColumn = 'User Id' THEN usr.[SimpleUserName]
            ELSE '<N/A>' 
        END
    , rpt.[Path]
    , rpt.[ReportFolder]
    , rpt.[Name]
    , rpt.[URL_ReportFolder]
    , rpt.[URL_Report] 
    , [URL_Report_Filtered] = rpt.[URL_Report] + '&rs:Command=Render&' + CONVERT(VARCHAR(max), el.[Parameters])
    , [UserName] = usr.[SimpleUserName]
    , el.[Status]
    , el.[TimeStart]
    , el.[RowCount]
    , el.[ByteCount]
    , el.[Format]
    , el.[Parameters]
    , [TotalSeconds] = CONVERT(CHAR(8),DATEADD(ms,(el.[TimeDataRetrieval] + el.[TimeProcessing] + el.[TimeRendering]),0),108)
    , [TimeDataRetrieval] = CONVERT(CHAR(8),DATEADD(ms,el.[TimeDataRetrieval],0),108) 
    , [TimeProcessing] = CONVERT(CHAR(8),DATEADD(ms,el.[TimeProcessing],0),108)  
    , [TimeRendering] = CONVERT(CHAR(8),DATEADD(ms,el.[TimeRendering],0),108) 
    , [OrderbyDate] = CAST([TimeStart] AS DATETIME) 
FROM 
    report_catalog AS rpt 
    LEFT JOIN dbo.[ExecutionLog] AS el ON el.[ReportID] = rpt.[ItemID]
    LEFT JOIN report_users AS usr ON el.[UserName] = usr.[UserName]
WHERE 
    1=1
    AND (@all_value IN(@LogStatus) OR el.[Status] IN(@LogStatus))
    AND (@all_value IN (@ReportFolder) OR rpt.[ReportFolder] IN(@ReportFolder))
    AND (@all_value IN(@ReportName) OR rpt.[ReportName] IN(@ReportName))
    AND (@all_value IN(@UserName) OR usr.[SimpleUserName] IN(@UserName))
    AND (@StartDate IS NULL OR CONVERT(DATETIME, CONVERT(VARCHAR(11), el.[TimeStart], 13)) >= @StartDate)
    AND (@EndDate IS NULL OR CONVERT(DATETIME, CONVERT(VARCHAR(11), el.[TimeStart], 13)) <= @EndDate)