2013-08-01 109 views
10

我有一个报告传递用于访问salesforce.com的ID。我想从URL超链接打开SFDC作为新页面。但是,我没有做任何事情似乎在工作!在新窗口中打开SSRS URL

= “JavaScript的:无效(window.open(”!https://na5.salesforce.com/&领域id.Value, '_空白'))”

域ID值是正在传递的SFDC ID!。我正在尝试这个表达无济于事!

我知道这是非常简单的,但我只是没有找到它。预先感谢您的帮助!

更新!

想通了!根据记录,语法是:

= “JavaScript的:无效(window.open( 'https://na5.salesforce.com/”!&字段id.Value & “'))”

回答

6

为了记录在案,与你原来的问题语法是你试图从引用一个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显示了在字符串中(即“'”)。

+1

Per Stefan Steiger关于PDF和Excel报告的观点,您可以轻松地将URL的JavaScript部分封装到IIF语句中,如果您使用内置的RenderFormat字段将其导出为PDF或Excel版本,则会删除JavaScript SSRS 2008 R2或更高版本。如果您使用的是2008年或之前版本,则可以使用布尔参数实现相同的结果。如果您对如何回复此评论有疑问。 –

0

我看过这个问题,并且多次回答,我想知道是否更容易编写C#函数来进行此调用以避免引用的复杂性。

1

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 
+0

@Timbo:当您打开浏览器并使用http:// machine-name/ReportServer访问http://your-domain.com/ReportServer或本地/ Intranet时,可以找到访问URL。您还可以读取reportserver数据库中的所有链接。如果您的reportserver具有非标准实例名称,例如MSSQL_2008_R2,即:http:// localhost/ReportServer_MSSQL_2008_R2。在RS 2005中,那是ReportServer $ MSSQL_2005,注意从$到_的变化。 –

1

如果你想链接到外部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,如果从浏览器的报告中查看,则使用JavaScript,否则使用标准链接。