Ok, here comes a LONG post...
reportviewer.csp:
[tt]
<%@ Language=VBScript %>
<!-- #METADATA type="typelib" file="C:\Program Files\Common Files\System\ADO\MSADO15.Dll" -->
<!-- #include file="helper.csp" -->
<!-- #include file="DropMenu.asp" -->
<!-- Reworking of reportviewer.csp done to handle more dynamic picklists and all others -->
<!-- BK Box 03/2003 -->
<%
'On Error Resume Next
DIM reportNumber
DIM reportName
DIM reportType
DIM ExportType
DIM vwr
DIM strViewer
DIM expo
DIM strUserID
DIM strMgrID
DIM tmpMgrID
DIM strSupID
DIM tmpSupID
DIM conn
DIM rs
DIM altLogon
DIM bSupDrop
DIM bMgrDrop
bSupDrop = False
bMgrDrop = False
reportNumber = Request.QueryString("reportNumber"

reportName = Request.QueryString("reportName"

reportType = Request.QueryString("reportType"

expo = Request.QueryString("expo"
'GET THE InfoStore
Dim iStore
Set iStore = Session("IStore"

If( Err.Number = 0 ) Then
strUserID = iStore.EnterpriseSession.UserInfo.UserName
Set altLogon = iStore.Query("Select * from CI_INFOOBJECTS Where SI_ID=" & ReportNumber).item(1).PluginInterface.ReportLogons.Item(1)
'get connection and query into recordset
Set conn = Server.CreateObject("ADODB.Connection"

conn.Open altLogon.ServerName,"username","password"
Set rs = Server.CreateObject("ADODB.Recordset"

Set rs = conn.Execute("SELECT DISTINCT Manager,Supervisor FROM Employee where EmpID = '" & strUserID & "'"
if NOT rs.EOF AND NOT rs.BOF Then
tmpMgrID = rs("Manager"

tmpSupID = rs("Supervisor"
If (tmpMgrID = "" OR isNull(tmpMgrID)) AND (tmpSupID = "" OR isNUll(tmpSupID)) Then
strMgrID = strUserID
strSupID = "All"
ElseIF (tmpMgrID = tmpSupID) Then
strMgrID = tmpMgrID
bSupDrop = True
Else
strMgrID = tmpMgrID
strSupID = tmpSupID
End IF
Else
bMgrDrop = True
bSupDrop = True
End If
' If NOT rs.EOF AND NOT rs.BOF Then
' strMgrID = Trim(rs("Manager"

)
' End If
' If strMgrID = "" or isNull(strMgrID)Then
' strMgrID = "No Manager"
' End If
Set conn = Nothing
Set rs = Nothing
If( needPicklist() OR plCheck() ) Then
Picklist()
Else
Dim url
url = "reportviewercall.csp?reportNumber=" & reportNumber & "&reportName=" & escape(reportName) & "&reportType=" & reportType & "&expo=" & expo
Response.Redirect(url)
End If
End If
'*****************************
'** FUNCTION: needPicklist() *
'*****************************
Function needPicklist()
needPicklist = False
' check that we need a dynamic picklist
If (bMgrDrop OR bSupDrop) Then
needPicklist = True
End If
End Function
'*****************************
'*** FUNCTION: plCheck() *****
'*****************************
Function plCheck()
DIM cReport
DIM cParams
DIM oParam
Set cReport = iStore.Query("Select * from CI_INFOOBJECTS Where SI_ID=" & ReportNumber).item(1)
Set cParams = cReport.PluginInterface.ReportParameters
plCheck = False
For Each oParam in cParams
If left(oParam.ParameterName,3) = "pl&" then
plCheck = True
End If
Next
End Function
'*****************************
'*** FUNCTION: Picklist() ****
'*****************************
Function Picklist()
Header()
DIM cReport
DIM cParams
DIM oParam
DIM cLogon
DIM tablename
DIM fieldname
DIM conn
DIM rs
DIM strParamName
DIM iLen
DIM regEx
DIM strTemp
DIM boolTemp
Set regEx = New RegExp
regEx.Pattern = "[\.\'\,\_\-\(\)]"
regEx.IgnoreCase = True
regEx.Global = True
Response.ExpiresAbsolute = Now() - 1
Set cReport = iStore.Query("Select * from CI_INFOOBJECTS Where SI_ID=" & ReportNumber).item(1)
Set cParams = cReport.PluginInterface.ReportParameters
Set cLogon = cReport.PluginInterface.ReportLogons.Item(1)
'loop through params to check for Picklist params
For Each oParam in cParams
If left(oParam.ParameterName,3) = "pl&" then
'set what table and field...
strParamName = right(oParam.ParameterName,len(oParam.parametername)-3)
iLen = InStr(strParamName,"&"

tablename = left(strParamName,iLen-1)
fieldname = right(strParamName,len(strParamName)-iLen)
'Display prompt if available
If oParam.Prompt <> "" Then
Response.Write "<b>" & oParam.Prompt & "</b><br><br>" & vbCRLF
Else
Response.Write "<b>" & oParam.ParameterName & "</b><br><br>" & vbCRLF
End If
'get connection and query into recordset
Set conn = Server.CreateObject("ADODB.Connection"

conn.Open cLogon.ServerName,"username","password"
Set rs = Server.CreateObject("ADODB.Recordset"

Set rs = conn.Execute("SELECT DISTINCT " & fieldname & " FROM " & tablename & " ORDER BY " & fieldname)
'If a multiple select enable the correct box
If oParam.EnableMultipleValues Then
Response.Write "<select size=16 multiple class=""menuFormElement"" name=""promptex-" & oParam.ParameterName & """>" & vbCRLF
Else
Response.Write "<select class=""menuFormElement"" name=""promptex-" & oParam.ParameterName & """>" & vbCRLF
End If
'Loop through selects
boolTemp = 1
Do While Not rs.EOF
strTemp = Trim(rs(fieldname))
If strTemp <> "" Then
Response.Write "<OPTION VALUE=""" & regEx.Replace(strTemp,"?"

& """"
If boolTemp Then
Response.Write " selected"
End If
boolTemp = 0
Response.Write ">" & Trim(rs(fieldname)) & "</OPTION>" & vbCRLF
End If
rs.MoveNext
Loop
Response.Write "</select><br>" & vbCRLF
If oParam.EnableMultipleValues Then
Response.Write "Hold down Ctrl and click to select more than one.<br>" & vbCRLF
End If
Response.Write "<br>" & vbCRLF
Set conn = Nothing
Set rs = Nothing
End If
Next
If bMgrDrop OR bSupDrop Then
MgrSupDrop()
End If
Footer()
End Function
'********************************
'****** Sub: MgrSupDrop() *******
'********************************
Sub MgrSupDrop()
DIM tablename
DIM fieldname
DIM conn
DIM rs
DIM regEx
DIM strTemp
DIM boolTemp
DIM altLogon
Set regEx = New RegExp
regEx.Pattern = "[\.\'\,\_\-\(\)]"
regEx.IgnoreCase = True
regEx.Global = True
'set what table and field...
tablename = "employee"
'If bMgrDrop Then
' fieldname = "Manager"
'Else
' fieldname = "Supervisor"
'End If
Set altLogon = iStore.Query("Select * from CI_INFOOBJECTS Where SI_ID=" & ReportNumber).item(1).PluginInterface.ReportLogons.Item(1)
If bMgrDrop Then
fieldname = "Manager"
'get connection and query into recordset
Set conn = Server.CreateObject("ADODB.Connection"

conn.Open altLogon.ServerName,"username","password"
Set rs = Server.CreateObject("ADODB.Recordset"

Set rs = conn.Execute("SELECT DISTINCT " & fieldname & " FROM " & tablename & " WHERE " & fieldname & " IS NOT NULL ORDER BY " & fieldname)
'Display prompt
Response.Write "<b>Please choose the " & fieldname & "</b><br><br>" & vbCRLF
Response.Write "<select class=""menuFormElement"" id=""mgrCode"" name=""promptex-mgrCode"""
IF bSupDrop Then
Response.Write " onchange=""javascript:Change_Users(document.viewForm.supCode.options,document.viewForm.mgrCode);"""
End IF
Response.Write ">" & vbCRLF
'Loop through selects
boolTemp = 1
Do While Not rs.EOF
strTemp = Trim(rs(fieldname))
If strTemp <> "" Then
Response.Write "<OPTION VALUE=""" & regEx.Replace(strTemp,"?"

& """"
If boolTemp Then
Response.Write " selected"
End If
boolTemp = 0
Response.Write ">" & Trim(rs(fieldname)) & "</OPTION>" & vbCRLF
End If
rs.MoveNext
Loop
Response.Write "</select><br>" & vbCRLF
Response.Write "<br>" & vbCRLF
Set conn = Nothing
Set rs = Nothing
End If
If bSupDrop Then
Response.Write "<b>Please choose the Supervisor</b><br><br>" & vbCRLF
Response.Write "<select class=""menuFormElement"" id=""supCode"" name=""promptex-supCode""></select><br><br>" & vbCRLF
End If
End Sub
'********************************
'******** Sub: Header() *********
'********************************
Sub Header()
DIM strHeader
strHeader = "<html>" &vbCRLF
strHeader = strHeader & " <head>" &vbCRLF
strHeader = strHeader & " <title>ePortfolio - View Report</title>" &vbCRLF
strHeader = strHeader & "<link rel='stylesheet' type='text/css' name='stylelink' href='" & GetLinkPath() & "css/default.css'>" &vbCRLF
strHeader = strHeader & " </head>" &vbCRLF
strHeader = strHeader & " <body>" &vbCRLF
strHeader = strHeader & "<!-- HEADER -->" &vbCRLF
strHeader = strHeader & "<table class='header' width='760' border='0' cellpadding='3' cellspacing='0'>" &vbCRLF
strHeader = strHeader & "<tr>" &vbCRLF
strHeader = strHeader & " <td class='header'>" &vbCRLF
strHeader = strHeader & " <a href='
&vbCRLF
strHeader = strHeader & " <img src='" & GetLinkPath() & "images/eportfolio.gif' border='0' alt='corporate logo'>" &vbCRLF
strHeader = strHeader & " </a>" &vbCRLF
strHeader = strHeader & " </td>" &vbCRLF
strHeader = strHeader & " <td class='header' align='right'>" &vbCRLF
strHeader = strHeader & " <span class='headerWelcome'>Welcome!</span><br>" &vbCRLF
strHeader = strHeader & " <a class='header' href='javascript:self.close();'>Cancel</a>" &vbCRLF
strHeader = strHeader & " </td>" &vbCRLF
strHeader = strHeader & " <tr class='menu'><td colspan=2> </td></tr>" &vbCRLF
strHeader = strHeader & " <tr cspan=2 class='category'><td colspan=2> </td></tr>" &vbCRLF
strHeader = strHeader & " <tr cspan=2 class='path'><td colspan=2> </td></tr>" &vbCRLF
strHeader = strHeader & "</tr>" &vbCRLF
strHeader = strHeader & "</table>" &vbCRLF
Response.Write strHeader
lastFive()
DIM strToken
DIM ltm
'GET LOGON TOKEN
SET ltm = iStore.EnterpriseSession.LogonTokenMgr
strToken = ltm.CreateLogonToken("", 1, 20)
If( iStore.EnterpriseSession.UserInfo.UserId <> 11 ) Then
If( Err.Number = 0 ) Then
GetViewer()
End If
End If
GetExportType()
'DISPLAY THE REPORT VIEWER
Dim url
If( vwr = "" And ExportType = "" ) Then
url = "viewreport_ia.csp?init=connect&id=" & reportNumber
ElseIf ( ExportType = "" ) Then
url = "viewreport.csp?init=connect&id=" & reportNumber
Else
url = "viewrpt.cwr?id=" & reportNumber
End If
Response.Write "<form name='viewForm' method='post' action='" & url & "'>" & vbCRLF
Response.Write "<input type='hidden' name='apstoken' value='" & strToken & "'>" & vbCRLF
Response.Write "<input type='hidden' name='promptex-vzcode' value='" & strUserID & "'>" & vbCRLF
If Not bMgrDrop Then
Response.Write "<input type='hidden' name='promptex-mgrcode' value='" & strMgrID & "'>" & vbCRLF
End If
If Not bSupDrop Then
Response.Write "<input type='hidden' name='promptex-supcode' value='" & strSupID & "'>" & vbCRLF
End If
End Sub
'********************************
'******** Sub: Footer() *********
'********************************
Sub Footer()
DIM strFooter
strFooter = "<INPUT class=""menuFormElement"" name=sa type=submit value=""View Report"">"
strFooter = strFooter & "</form>" & vbCRLF
strFooter = strFooter & " </body>" & vbCRLF
strFooter = strFooter & "</html>" & vbCRLF
Response.Write(strFooter)
End Sub
'*****************************
'*** FUNCTION: GetViewer() ***
'*****************************
Function GetViewer()
'GET VIEWER FROM COOKIES
vwr = Request.Cookies("ePortfolio_vwr"
Select Case vwr
Case 0
strViewer = "actx"
Case 1
strViewer = "html_frame"
Case 2
strViewer = "html_page"
Case 3
strViewer = "java"
Case 4
strViewer = "java_plugin"
Case 5
strViewer = "nav_plugin"
End Select
Dim s
s = Request.ServerVariables("HTTP_USER_AGENT"

If( ( strViewer = "nav_plugin" ) And ( Instr(s, "MSIE"

) )Then
strViewer = "actx"
ElseIf( ( strViewer = "actx" ) And ( Instr(s, "MSIE"

= 0 ) ) Then
strViewer = "nav_plugin"
End If
End Function
'*********************************
'*** FUNCTION: GetExportType() ***
'*********************************
Function GetExportType()
Dim defExpo
Dim expo
If( Request.Cookies("ePortfolio_expo"

<> "" ) Then
defExpo = Request.Cookies("ePortfolio_expo"

Else
defExpo = 0
End If
If( Request.QueryString("expo"

<> "undefined" And Request.QueryString("expo"

<> "" ) Then
expo = Request.QueryString("expo"

Else
expo = defExpo
End If
'If exporting to Word, Excel or rtf, append SessionID because older IE would send 2 GET request and lose all cookies in the 2nd req
Select Case expo
Case 0
ExportType = "" 'Crystal Report format is default so no command need be sent.
Case 1
ExportType = "&cmd=export&export_fmt=U2FXLS%3A5&" & Session.SessionID 'MS Excel 7 format
Case 2
ExportType = "&cmd=export&export_fmt=U2FWORDW%3A0&" & Session.SessionID 'MS Word format
Case 3
ExportType = "&cmd=export&export_fmt=U2FPDF%3A0" 'Adobe Acrobat format
Case 5
ExportType = "&cmd=export&export_fmt=U2FRTF%3A0" & Session.SessionID 'Rich Text Format
Case 6
ExportType = "&cmd=export&export_fmt=U2FTEXT%3A0" 'Text format
Case Else
ExportType = ""
End Select
End Function
'***************************
'****** SUB: lastFive() ****
'***************************
Sub lastFive()
'GET LAST FIVE REPORTS FROM SESSION OBJECT
Dim lastFiveRptName(4)
Dim lastFiveRptNum(4)
Dim i
Dim num
Dim match
Dim lastElement
If( IsArray(Session("lastFiveRptName"

) ) Then
'GET CURRENT LIST IN SESSION OBJECT
For i = 0 to 4
lastFiveRptName(i) = Session("lastFiveRptName"

(i)
lastFiveRptNum(i) = Session("lastFiveRptNum"

(i)
Next
match = false
'FIND MATCH IN LIST
For i = 0 to 4
num = Split(lastFiveRptNum(i), ":"

If num(0) = reportNumber Then
match = true
Exit For
End If
Next
If match = false Then
lastElement = 4
'SHIFT ELEMENTS IN LIST
For i = lastElement to 1 Step -1
lastFiveRptName(i) = lastFiveRptName(i-1)
lastFiveRptNum(i) = lastFiveRptNum(i-1)
Next
'ADD NEW REPORT TO TOP
lastFiveRptName(0) = reportName
lastFiveRptNum(0) = reportNumber & ":" & reportType
End If
Else
lastFiveRptName(0) = reportName
lastFiveRptNum(0) = reportNumber & ":" & reportType
For i = 1 to 4
lastFiveRptName(i) = "-"
lastFiveRptNum(i) = "0"
Next
End If
'SET LIST IN SESSION OBJECT
Session("lastFiveRptName"

= Array(lastFiveRptName(0), lastFiveRptName(1), lastFiveRptName(2), lastFiveRptName(3), lastFiveRptName(4))
Session("lastFiveRptNum"

= Array(lastFiveRptNum(0), lastFiveRptNum(1), lastFiveRptNum(2), lastFiveRptNum(3), lastFiveRptNum(4))
End Sub
[/tt]
viewreport.csp
[tt]
<%@ language=JavaScript codepage=65001%>
<!-- #include file="setcodepage.csp" -->
<!-- #include file="helper_js.csp" -->
<!-- #include file="checksession_js.csp" -->
<!-- #include file="handleerror_js.csp" -->
<%
SetPageExpiry();
try
{
// Get the current info store
var iStore = CheckSession(true);
var id = String( Request.QueryString.Item( "id" ) );
var initCommand = String(Request.QueryString.Item("init"

);
var viewer1;
var sf;
var rptSrc;
var cachedRptSrcID = GetSession("RptSrcID"

;
if ((cachedRptSrcID == id) && (initCommand != "connect"

)
{
// Use the cached report source
rptSrc = GetSession("RptSrc"

;
}
// If we didn't find a report source, just make a new one
if (typeof(rptSrc) != "object"

{
var rptSrcFactory = iStore.EnterpriseSession.Service ("", "PSReportFactory"

;
rptSrc = rptSrcFactory.OpenReportSource(Number(id));
SetSession("RptSrcID", id);
SetSession("RptSrc", rptSrc);
}
EnsureImageCleanerIsRunning();
viewer1 = Server.CreateObject( "CrystalReports.CrystalReportViewer" );
// set selection formula
sf = Request.QueryString.Item("sf"

;
if ( sf.Count != 0 )
viewer1.ViewTimeSelectionFormula = String(sf);
viewer1.ReportSource = rptSrc;
viewer1.IsOwnForm = true;
viewer1.IsOwnPage = true;
viewer1.IsDisplayGroupTree = true;
viewer1.PageToTreeRatio = 5.0;
viewer1.IsDisplayToolbar = true;
viewer1.IsDisplayPage = true;
viewer1.HasRefreshButton = true;
viewer1.URI = String(Request.ServerVariables.Item("SCRIPT_NAME"

) + String(Request.ServerVariables.Item("PATH_INFO"

) + "?";
if (initCommand == "connect"

{
//Response.Write(Request.ServerVariables.Item("QUERY_STRING"

);
var queryItemCount = Request.QueryString.Count;
var first = true;
//Response.Write("queryItemCount = " + queryItemCount);
for (var i = 1; i <= queryItemCount; i++)
{
//Response.Write("name=" + Request.QueryString.Key(i));
//Response.Write("value=" + Request.QueryString.Item(i));
if (Request.QueryString.Key(i) != "init"

{
if (first == false)
viewer1.URI += "&";
viewer1.URI = viewer1.URI + Request.QueryString.Key(i) + "=" + Request.QueryString.Item(i);
if (first == true)
first = false;
}
}
}
else
viewer1.URI = viewer1.URI + Request.ServerVariables.Item("QUERY_STRING"

;
//Response.Write(viewer1.URI);
viewer1.ProcessHttpRequest( Request, Response, Session );
}
catch(e)
{
WriteErrorRetrieve(e.description);
}
%>
[/tt]