【问题标题】:Open SSRS URL in New Window在新窗口中打开 SSRS URL
【发布时间】:2013-08-01 19:36:56
【问题描述】:

我有一份报告传递了用于访问 salesforce.com 的 id。我想从 URL 超链接将 SFDC 作为新页面打开。但是,我所做的一切似乎都不起作用!

="javascript:void(window.open('https://na5.salesforce.com/& Fields!id.Value,'_blank'))"

Fields!id!Value 是正在传递的 SFDC id。我在表达式中尝试这个无济于事!

我知道这很简单,但我只是没有找到它。提前感谢您的帮助!

更新!!!

想通了!!!为了记录,语法是:

="javascript:void(window.open('https://na5.salesforce.com/" & Fields!id.Value & "'))"

【问题讨论】:

    标签: javascript reporting-services


    【解决方案1】:

    为了记录,您的原始语法的问题是您试图从引用 SSRS 字段到输入字符串而没有正确分隔两者。如果您希望以前的语法正常工作(不删除目标窗口的名称(即“_blank”),您可以这样做:

    ="javascript:void(window.open('https://na5.salesforce.com/" & Fields!id.Value & "','_blank'))"
    

    我为此苦苦挣扎了很长时间,但是只要您小心地将所有内容正确组合在一起,就可以使这些变得非常复杂。您还可以在同一个操作表达式中添加多个 javascript 命令(但不能添加函数)。以下是我最复杂的 SSRS Go-to-URL Action 命令之一:

    ="Javascript:" 
        & IIF(left(Fields!Name.Value,11)="RESTRICTED-", 
            "alert('Restricted!'); ","") & IIF(Fields!Name_Alert.Value = 1, "alert('Alternate Alert!'); ","") 
        & "void(window.open('" 
        & Globals!ReportServerUrl 
        & "/Pages/ReportViewer.aspx?%2fJPD%2fPO_Dashboard%2fJuvenile_Profile&rs:Command=Render" 
        & "&rc:Parameters=true" 
        & "&Emp_Number=" 
        & Parameters!Param1.Value 
        & “&ID=" & Fields!ID.Value & "'));"
    

    关键是要确保 javascript 所需的任何和所有必要的单引号都显示在字符串中(即“'”)。

    【讨论】:

    • 根据 Stefan Steiger 关于 PDF 和 Excel 报告的观点,您可以轻松地将 URL 的 JavaScript 部分封装到 IIF 语句中,如果使用内置 RenderFormat 字段导出到 PDF 或 Excel 版本,则删除 JavaScript如果您使用的是 SSRS 2008 R2 或更高版本。如果您使用的是 2008 或更早版本,则可以使用布尔参数获得相同的结果。如果您对如何操作有任何疑问,请回复此评论。
    【解决方案2】:

    Nonono,不要使用="javascript:void(window.open(
    首先,它会破坏 PDF 和 Excel 报告,
    其次,它在 IE11 中不起作用,也可能在 经过测试,我只在 Chrome 中工作。
    第三,把它放在一起是一团糟。

    有一个更简单、更好的解决方案:
    &rc:LinkTarget=_blank 添加到您的报告访问 URL,例如:

    https://your-domain.com/ReportServer/Pages/ReportViewer.aspx?%2fJPD%2fPO_Dashboard%2fJuvenile_Profile&rs:Command=Render&rc:LinkTarget=_blank 
    

    它将在新的窗口选项卡中打开。

    编辑:
    如果你想制作自己的展示页面:

    这是您获取所有报告的方式:

    USE [ReportServer$MSSQL_2008_R2]
    
    SELECT 
         [ItemID]
        ,[Path]
        ,[Name]
        ,[ParentID]
    FROM [Catalog]
    WHERE Type = 2
    

    这就是您可以在 x 级别显示所有文件夹/报告的方式

    ;WITH CTE AS 
    (
        SELECT 
             [ItemID]
            ,[Path]
            ,[Name]
            ,[ParentID]
            ,0 AS lvl
            ,CAST([Name] AS nvarchar(MAX)) AS RecursivePath 
         FROM [Catalog] 
         WHERE [ParentID] IS NULL 
    
    
         UNION ALL 
    
         SELECT 
             [Catalog].[ItemID]
            ,[Catalog].[Path]
            ,[Catalog].[Name]
            ,[Catalog].[ParentID] 
            ,cte.lvl +1 AS lvl
            ,CAST(cte.RecursivePath + '/' + [Catalog].[Name] AS nvarchar(MAX)) AS RecursivePath 
         FROM CTE 
         INNER JOIN [Catalog]
            ON [Catalog].ParentID = CTE.ItemID 
    
    
    
    ) 
    
    SELECT * FROM CTE 
    WHERE lvl = 1 
    ORDER BY lvl, Path 
    

    如果你只想要文件夹:

    WHERE Type = 1
    

    如果你只想要数据源:

    WHERE Type = 5
    

    【讨论】:

    【解决方案3】:

    如果您想要链接到外部 URL,并且希望链接在报表查看器中和导出到 Excel 中都有效,我使用以下表达式。

    =IIF(
      Globals!RenderFormat.Name = "RPL",
     "javascript:void(window.open('http://www.domain.com/page/" & Fields!Page_ID.Value & "','_blank'))",
      "http://www.domain.com/page/" & Fields!Page_ID.Value
    )
    

    如果从浏览器中的报告中查看,它将使用 JavaScript,否则将使用标准链接。

    【讨论】:

      【解决方案4】:

      这是我用过的;它将在新选项卡中打开 ChildReport,并带有参数凭证_id 及其从数据集传递的值。

      ="javascript:void window.open(" &"'"& Globals!ReportServerUrl &"/Pages/ReportViewer.aspx?"&Globals!ReportFolder &"/JournalVoucher&voucher_id="&Fields!account_voucher_id.Value &" ','_blank')"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-11
        • 2013-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多