Last active
August 29, 2015 14:18
-
-
Save osya/6b8eea074efa24e48df1 to your computer and use it in GitHub Desktop.
Working with JavaScript in SSRS #BI #SSRS #MIS #JavaScript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'''____________________________________________________________ | |
''' Function #3/3 (Main): ver. 1.0 | |
''' <summary> | |
''' Создает новую с сылку для открытия отчета в новом окне - тег A и JavaScript...open | |
''' </summary> | |
''' <param name="LinkName">Название ссылки</param> | |
''' <param name="ReportServerPath">URL сервера отчетов</param> | |
''' <param name="ReportFolder">Директория отчета</param> | |
''' <param name="ReportName">Название отчета</param> | |
''' <param name="ParamParameters">Все праметры отчета (передается как Parameters)</param> | |
''' <param name="ParamNames">Список параметров, которые необходимо передать</param> | |
''' <returns>Готовая ссылка</returns> | |
Public Function NewWindowLink( _ | |
ByVal LinkName As String, _ | |
ByVal ReportServerPath As String, _ | |
ByVal ReportFolder As String, _ | |
ByVal ReportName As String, _ | |
ByVal ParamParameters As Parameters, _ | |
ByVal ParamArray ParamNames() As String _ | |
) As String | |
Const ieLinkLengt As Integer = 2083 | |
NewWindowLink = "javascript:void(window.open('" _ | |
& IIf(ReportServerPath.Contains("Pages/ReportViewer.aspx?"), ReportServerPath, ReportServerPath + "/Pages/ReportViewer.aspx?/") _ | |
& WrapParameter(ReportFolder.Replace("/","")) & "/" _ | |
& WrapParameter(ReportName) | |
Dim EndLink As String = "','_blank','resizable=yes,scrollbars=yes,top=70,left=70,height='+(window.screen.availHeight-140)+',width='+(window.screen.availWidth-140)))" | |
If ParamNames.Length > 0 Then | |
For i As Integer = 0 To UBound(ParamNames, 1) | |
If ParamNames(i).Contains("=") Then | |
NewWindowLink += ParamNames(i).Substring(0, ParamNames(i).IndexOf("=") + 1) + WrapParameter(ParamNames(i).Substring(ParamNames(i).IndexOf("=") + 1)) | |
ElseIf ParamNames(i).Equals("-") Then | |
Continue For | |
Else | |
If Not TryPrepareParameter(ParamParameters(ParamNames(i)), ParamNames(i), ieLinkLengt - System.Uri.EscapeUriString(NewWindowLink & EndLink).Length, NewWindowLink) Then | |
Exit For | |
End If | |
End If | |
Next i | |
End If | |
If LinkName = "-" Then | |
NewWindowLink = String.Format("{0}{1}", NewWindowLink, EndLink) | |
Else | |
NewWindowLink = String.Format("<a href=""{0}{1}"">{2}</a>", NewWindowLink, EndLink, LinkName) | |
End If | |
End Function | |
'''^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
'''============================================================ | |
''' <summary> | |
''' Функция подготавливает код javascript:void(windows.open с возможностью обернуть в тег A | |
''' </summary> | |
''' <param name="link">Ссылка в нормальном виде</param> | |
''' <param name="linkName">Название ссылки в теге A, если не указано, то ссылка не будет обернута в тег A</param> | |
''' <param name="extentedWindow">True - если необходимо отобразить меню, строку состояния и т.п. По умолчанию - False</param> | |
''' <returns>Строка с подготовленной ссылкой</returns> | |
''' <remarks></remarks> | |
Public Function GetJSLink(ByVal link As String, Optional ByVal linkName As String = "n\a", Optional extentedWindow As Boolean = True) As String | |
If IsNothing(link) Then Return "-" | |
Dim pattern As System.Text.StringBuilder | |
pattern = New System.Text.StringBuilder | |
pattern.Append("^(?<protocol>[\w\-]{1,5}:\/\/)?") | |
pattern.Append("(?<userpassword>([\wА-ЯЁа-яё\-]{1,}):([\wА-ЯЁа-яё\-]{1,})\@)?") | |
pattern.Append("(?<sdd>") | |
pattern.Append("(?<ip>[\d.]{8,})|") | |
pattern.Append("(?<domainRF>(www\.)?[А-ЯЁа-яё0-9_\-]{2,})") | |
pattern.Append("(?<domainendungRF>\.[А-ЯЁа-яё]{2,4})?|") | |
pattern.Append("(?<domain>([\w\-]{1,}(\.)?)+)?") | |
pattern.Append("(?<domainendung>[a-z]{2,6})?)") | |
pattern.Append("(?<port>:[0-9]{1,5})?") | |
pattern.Append("(?<encode>\/(%([a-f0-9]{2}[-_]?)){1,})?") | |
pattern.Append("(?<path>[\/\\]([~\wА-ЯЁа-яё \-]{1,}[\/\\])+)?") | |
pattern.Append("(?<file>(\/\\)?[^\x00-\x1f\\?*:\""|#]+)?") | |
pattern.Append("(?<param>(\/)?\?)?") | |
pattern.Append("(?<param1>\/[\wА-ЯЁа-яё\/\-\.,]{1,})?") | |
pattern.Append("(?<param2>(([\&\;])?[\wА-ЯЁа-яё\-]{1,}(\=[\@\wА-ЯЁа-яё \-:\.\/\%,+]{0,})?)+)?") | |
pattern.Append("(?<fragment>#[^\s]+)?") | |
Dim rgx As System.Text.RegularExpressions.Regex | |
rgx = New System.Text.RegularExpressions.Regex(pattern.ToString(), System.Text.RegularExpressions.RegexOptions.IgnoreCase) | |
Dim m As System.Text.RegularExpressions.Match | |
m = rgx.Match(link.Replace("\", "/")) | |
Dim result As System.Text.StringBuilder | |
result = New System.Text.StringBuilder | |
result.Append("javascript:void(window.open('") | |
Try | |
If m.Success Then | |
For Each groupName As String In rgx.GetGroupNames | |
If groupName.Length > 2 And m.Groups(groupName).Success Then | |
Select Case groupName | |
Case "protocol" | |
result.Append(m.Groups("protocol").ToString()) | |
Case "userpassword" | |
result.Append(m.Groups("userpassword").ToString()) | |
Case "ip" 'Do nothing | |
Case "domainRF" 'Do nothing | |
Case "domainendungRF" 'Do nothing | |
Case "subdomain" 'Do nothing | |
Case "domain" 'Do nothing | |
Case "domainendung" 'Do nothing | |
Case "sdd" | |
Dim idn As System.Globalization.IdnMapping | |
idn = New System.Globalization.IdnMapping | |
result.Append(idn.GetAscii(m.Groups("sdd").ToString())) | |
Case "port" | |
result.Append(m.Groups("port").ToString()) | |
Case "encode" | |
result.Append("'+escape('" + m.Groups("encode").ToString() + "')+'") | |
Case "path" | |
result.Append("'+escape('" + m.Groups("path").ToString() + "')+'") | |
Case "file" | |
result.Append("'+escape('" + m.Groups("file").ToString() + "')+'") | |
Case "param" | |
result.Append("'+encodeURI('" + m.Groups("param").ToString() + "')+'") | |
Case "param1" | |
result.Append("'+encodeURI('" + m.Groups("param1").ToString() + "')+'") | |
Case "param2" | |
result.Append("'+encodeURI('" + m.Groups("param2").ToString() + "')+'") | |
Case "fragment" | |
result.Append("'+encodeURI('" + m.Groups("fragment").ToString() + "')+'") | |
Case Else | |
End Select | |
'Console.WriteLine(String.Format("{0} : {1}", groupName, res)) | |
End If | |
Next | |
result.Append("','_blank','resizable=yes,scrollbars=yes") | |
If extentedWindow Then | |
result.Append(",location=yes,menubar=yes,toolbar=yes") | |
End If | |
result.Append(",top=70,left=70,height='+(window.screen.availHeight-170)+',width='+(window.screen.availWidth-170)))") | |
Else | |
result = New System.Text.StringBuilder(link) | |
End If | |
Catch | |
result = New System.Text.StringBuilder(link) | |
End Try | |
If linkName.Equals("n\a") Then | |
Return result.ToString().Replace("+''", "") | |
Else | |
Return String.Format("<a href=""{0}"">{1}</a>", result.ToString().Replace("+''", ""), linkName) | |
End If | |
End Function | |
'''^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment