ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 用asp发布水晶报表

用asp发布水晶报表

原创 Linux操作系统 作者:jarli 时间:2019-04-21 21:12:05 1 删除 编辑

Crystal Report Version:9.2.0.448

Database: Oracle 9i


文件1.ReportViewer_test.asp-------------------------------------

<%@LANGUAGE="VBSCRIPT" CODEPAGE="950"%>


<%
p_title=request.QueryString("p_title")
%>
<%=p_title%>

<%
ReportName=request.QueryString("rep")
server.ScriptTimeout=18000
pvalstr=request.QueryString("p_paras")
p_path=request.QueryString("p_path")
'response.Write("report_name="&ReportName&"
")
'response.Write("p_path="&p_path&"
")
'response.Write("pvalstr="&pvalstr&"
")
'response.end
paraval=split(pvalstr,",")
%>

<!--#include file="AlwaysRequiredSteps.asp"-->

<%
'cSel="{command.store_name}='BID' or {command.store_name}='HD'"
session("oRpt").ReportComments=cCom
set cr=session("oRpt").Database.tables.item(1).ConnectionProperties
cr.Item("Provider")="MSDAORA.1"
cr.Item("Data Source")="test"
cr.Item("User ID") = "scott"
cr.Item("Password") = "tiger"
for each oParam in session("oRpt").ParameterFields
select case oParam.ParameterFieldName
case "P_PATH"
oParam.setCurrentValue Cstr(p_path)
case "P_DEPTNO"
oParam.setCurrentValue Cstr(paraval(0))
case "P_EMPNO"
oParam.setCurrentValue Cstr(paraval(1))
end select
next
%>
<!--#include file="MoreRequiredSteps.asp"-->
<!--#include file="SmartViewerActiveX.asp"-->

文件2.AlwaysRequiredSteps.asp

"" And Len(Path) 0) iLen = Len(Path) - 1 Path = Left(Path, iLen) Wend 'This "While/Wend" loop is used to determine the physical path (eg: C:) to the 'Crystal Report file by translating the URL virtual path (eg: http://Domain/Dir) 'OPEN THE REPORT (but destroy any previous one first) If IsObject(session("oRpt")) then Set session("oRpt") = nothing End if Set session("oRpt") = session("oApp").OpenReport(path & ReportName, 1) If Err.Number 0 Then Response.Write "Error Occurred creating Report Object: " & Err.Description Set Session("oRpt") = nothing Set Session("oApp") = nothing Session.Abandon Response.End End If 'This line uses the "PATH" and "reportname" variables to reference the Crystal 'Report file, and open it up for processing. ' 'Notice that we do not create the report object only once. This is because 'within an ASP session, you may want to process more than one report. The 'rptserver.asp component will only process a report object named session("oRpt"). 'Therefor, if you wish to process more than one report in an ASP session, you 'must open that report by creating a new session("oRpt") object. session("oRpt").MorePrintEngineErrorMessages = False session("oRpt").EnableParameterPrompting = False 'These lines disable the Error reporting mechanism included the built into the 'Crystal Report Design Component automation server (craxdrt.dll). 'This is done for two reasons: ' '1. The print engine is executed on the Web Server, so any error messages ' will be displayed there. If an error is reported on the web server, the ' print engine will stop processing and you application will "hang". ' '2. This ASP page and rptserver.asp have some error handling logic desinged ' to trap any non-fatal errors (such as failed database connectivity) and ' display them to the client browser. ' '**IMPORTANT** Even though we disable the extended error messaging of the engine 'fatal errors can cause an error dialog to be displayed on the Web Server machine. 'For this reason we reccomend that you set the "Allow Service to Interact with Desktop" 'option on the "World Wide Web Publishing" service (IIS service). That way if your ASP 'application freezes you will be able to view the error dialog (if one is displayed). --> <%
'=================================================================
' This file the ALWAYS REQUIRED STEPS for using the Autmation
' Server
'

'===================================================================================
'Create the Crystal Reports Objects
'===================================================================================
'
'You will notice that the Crystal Reports objects are scoped as session variables.
'This is because the page on demand processing is performed by a prewritten
'ASP page called "rptserver.asp". In order to allow rptserver.asp easy access
'to the Crystal Report objects, we scope them as session variables. That way
'any ASP page running in this session, including rptserver.asp, can use them.


' - 1 - Line :18
' CREATE THE APPLICATION OBJECT
If Not IsObject (session("oApp")) Then
Set session("oApp") = Server.CreateObject("CrystalRuntime.Application")
End If

'This "if/end if" structure is used to create the Crystal Reports Application
'object only once per session. Creating the application object - session("oApp")
'loads the Crystal Report Design Component automation server (craxdrt.dll) into memory.
'
'We create it as a session variable in order to use it for the duration of the
'ASP session. This is to elimainate the overhead of loading and unloading the
'craxdrt.dll in and out of memory. Once the application object is created in
'memory for this session, you can run many reports without having to recreate it.


' - 2 - Line:34
' CREATE THE REPORT OBJECT
'
'The Report object is created by calling the Application object's OpenReport method.
Path=Request.ServerVariables("APPL_PHYSICAL_PATH") & "reports"
'Path = Request.ServerVariables("PATH_TRANSLATED") & "reports"



While (Right(Path, 1) <> "" And Len(Path) <> 0)
iLen = Len(Path) - 1
Path = Left(Path, iLen)
Wend

'This "While/Wend" loop is used to determine the physical path (eg: C:) to the
'Crystal Report file by translating the URL virtual path (eg: http://Domain/Dir)

'OPEN THE REPORT (but destroy any previous one first)

If IsObject(session("oRpt")) then
Set session("oRpt") = nothing
End if


Set session("oRpt") = session("oApp").OpenReport(path & ReportName, 1)

If Err.Number <> 0 Then
Response.Write "Error Occurred creating Report Object: " & Err.Description
Set Session("oRpt") = nothing
Set Session("oApp") = nothing
Session.Abandon
Response.End
End If

'This line uses the "PATH" and "reportname" variables to reference the Crystal
'Report file, and open it up for processing.
'
'Notice that we do not create the report object only once. This is because
'within an ASP session, you may want to process more than one report. The
'rptserver.asp component will only process a report object named session("oRpt").
'Therefor, if you wish to process more than one report in an ASP session, you
'must open that report by creating a new session("oRpt") object.

session("oRpt").MorePrintEngineErrorMessages = False
session("oRpt").EnableParameterPrompting = False

'These lines disable the Error reporting mechanism included the built into the
'Crystal Report Design Component automation server (craxdrt.dll).
'This is done for two reasons:
'
'1. The print engine is executed on the Web Server, so any error messages
' will be displayed there. If an error is reported on the web server, the
' print engine will stop processing and you application will "hang".
'
'2. This ASP page and rptserver.asp have some error handling logic desinged
' to trap any non-fatal errors (such as failed database connectivity) and
' display them to the client browser.
'
'**IMPORTANT** Even though we disable the extended error messaging of the engine
'fatal errors can cause an error dialog to be displayed on the Web Server machine.
'For this reason we reccomend that you set the "Allow Service to Interact with Desktop"
'option on the "World Wide Web Publishing" service (IIS service). That way if your ASP
'application freezes you will be able to view the error dialog (if one is displayed).

%>

文件3.MoreRequiredSteps.asp

<%

'====================================================================================
' Retrieve the Records and Create the "Page on Demand" Engine Object
'====================================================================================

'On Error Resume Next
session("oRpt").ReadRecords
If Err.Number <> 0 Then
Response.Write "An Error has occured on the server in attempting to access the data source"
Else

If IsObject(session("oPageEngine")) Then
set session("oPageEngine") = nothing
End If
set session("oPageEngine") = session("oRpt").PageEngine
End If

%>

文件4.SmartViewerActiveX.asp

<%
'This file contains the HTML code to instantiate the Smart Viewer ActiveX.
'
'You will notice that the Report Name parameter references the rptserver.asp file.
'This is because the report pages are actually created by rptserver.asp.
'Rptserver.asp accesses session("oApp"), session("oRpt") and session("oPageEngine")
'to create the report pages that will be rendered by the ActiveX Smart Viewer.
'
%>


Crystal Reports ActiveX Viewer

CLASSID="CLSID:2DEF4530-8CE6-41c9-84B6-A54536C90213"
WIDTH=100% HEIGHT=100%
CODEBASE="/viewer9/activeXViewer/activexviewer.cab#Version=9,2,0,448" VIEWASTEXT>










文件6. rptserver.asp---------------------

<%

' This script assumes that the Session contains the following Crystal Report Engine
' Objects:
'
' "oApp" - Crystal Report Engine Application Object
' "oRpt" - Crystal Report Engine Report Object
' "oPageEngine - Crystal Report Engine Page Engine Object
' HTML_FRAME viewer only
' "tabArray" - Array used to keep drilldown tab information
' "CurrentPageNumber" - Current Page Number requested.
' "lastknownpage" - Previous page number requested.
' "LastPageNumber" - Last known page number requested.
' Note: Before creating the PageEngine object, call ReadRecords on the
' report object to that all the database records have been read.
'
' Modifications
' 05/02/98
' Added the following features:
' Tab Query String Parameter
' - This is the selected HTML_FRAME viewer tab's tabArray index value.
' Page Expiry Time
' - The page will expire when downloaded by browser so that user is insured that all data
' will be current.
' DrillDown Tabs
' - Added in the session("tabArray") object to keep track of the HTML_FRAME drill down tabs.
' RFSH Query String Parameter
' - Database is refreshed and ErrorValue 0 is sent to Java and active X viewers on success.
'This causes viewers to NOT refresh browser window.
' SRCH Query String Parameter and HTML_FRAME Viewer
' - Added javascript window.alert function call to indicate when text is not found in rpt view.

' 09/08/98
' Added the following features:
' - cmd handling for map_dd(Map Drill Down) and export(Exporting reports from viewers).
' - PageGenerator object creation for Out of Place Subreports. Modification was made to RetrieveObjects procedure.
' - Modified the get_ttl handling to call the PageGenerator object's RenderTotallerETF method
' instead of the PageEngine's method. This was done to support the group by feature.
' 08/03/99
' Added the following features
' - cmd/rfsh handling for pages with and without place holders.
' - cmd/rfsh handling for pages requiring and not requiring total page count.
' 08/08/00
' Added the following features
' - Export to excel 7.0 and portable document format(.pdf).
' - Removal of WCS dependency. We are now using emfgen to send images to browser.


On Error Resume Next

' The oEMF object is a helper object to create EMFs (Ecapsulated Messages) for the viewers.
' The viewers use EMFs to display errors and navigate to specific pages of the report.

If Not IsObject(session("oEMF")) then
Set session("oEMF") = Server.CreateObject("CREmfgen.CREmfgen.2")
Call CheckForError
End if

' Initialize all Global variables
' These will contain the page generator and page collection

Dim goPageGenerator ' page generator object
Dim goPageCollection ' page collection object
Dim goPageGeneratorDrill' page generator object in Drill Down Context
Dim goPage ' the page object
Dim gvGroupPathDD ' drill down group path, this is an array.
Dim gvGroupPath ' this is branch, aka Group Path converted from string passed on the QS, it is an Array
Dim gvGroupLevel ' this is the Group level, converted from the string passed on the QS, it is an Array
Dim gvMaxNode ' this represents the number of nodes to retrieve for the totaller, it is set to an empty array
Dim gvTotallerInfo ' this represents the group path of the requested totaller.
Dim glX ' this is the X Coordinate for a drill down on a graph or Map
Dim glY ' this is the Y Coordinate for a drill down on a graph or Map
Dim gvPageNumber ' holds the requested page number
Dim gvURL ' URL to redirect to
Dim gsErrorText ' holds the error text to be sent to the viewer.
Dim ExportOptions ' Export Options Object
Dim slX ' this is the X Coordinate for a selection of Out of Place subreport
Dim slY ' this is the Y Coordinate for a selection of Out of Place subreport
Dim sessionError ' this is the variable that will contain the error text sent to the viewer when the session has expired.

' Vaiables that represent what was passed on the Query String
Dim CMD ' This determines the main function to perform
Dim PAGE ' the page to return
Dim BRCH ' the branch is a mechanism to determine the drill down level.
' A drill down level is like a view of the report, a new tab
' is created to indicate that it is a new view
Dim VIEWER ' This is the viewer that is calling the server
Dim VFMT ' the format that the viewer understands
Dim NODE ' Currently not used??
Dim GRP ' this is a way of specifing the actual group
Dim COORD ' these are the coordinates on the graph to process
Dim DIR ' this is the search direction
Dim CSE ' indicates if the search is case sensitive
Dim TEXT ' this is the text to search for.
Dim INIT ' used to build the frames for the html viewer
Dim NEWBRCH ' used to keep track of when a new branch is to be viewed.
Dim EXPORT_FMT ' used to hold the export format and type
Dim SUBRPT ' used to hold the Out Of Place Subreport page, number,
' and coordinates on the main report.
Dim INCOMPLETE_PAGE ' used to indicate whether the page generated should contain placeholders.
Dim INCOMPLETE_PAGE_COUNT ' used to indicate whether the page should contain the total page count if not yet generated.
Dim PVERSION ' used to indicate the protocol version of the viewer.
Dim TTL_INFO ' used to indicate the group path of the totaller request.
Dim IMAGE ' used to specify the name of the image file for html viewers.
Dim DEL ' used to specify whether to delete image file after it has been sent to client.

' Constant Values
Dim CREFTWORDFORWINDOWS
Dim CREFTRICHTEXT
Dim CREFTEXCEL21
Dim CREFTEXCEL70
Dim CREFTCRYSTALREPORT
Dim CREFTPORTABLEDOCFORMAT
Dim CREDTDISKFILE
Dim EMFMIMETYPE
CREFTWORDFORWINDOWS = 14
CREFTRICHTEXT = 4
CREFTEXCEL21 = 18
CREFTEXCEL70 = 27
CREFTCRYSTALREPORT = 1
CREFTCRYSTALREPORT7 = 33
CREFTPORTABLEDOCFORMAT = 31
CREDTDISKFILE = 1
crAllowPlaceHolders = 2
crDelayTotalPageCountCalc = 1
EMFMIMETYPe = "application/x-emf"
EPFMIMETYPE = "application/x-epf"
ETFMIMETYPE = "application/x-etf"
' Initialize Arrays
gvGroupPath = Array()
gvGroupLevel = Array()
gvMaxNode = Array() ' reteive all nodes
gvTotallerInfo = Array()
NEWBRCH = "0"
sessionError = "The oPageEngine object was not created or is not in scope. Please check that the Viewer is referencing rptserver.asp in the correct virtual directory. It is also possible that the ReadRecords method failed. Ensure that you are logging on to the datasource correctly and have provided values for Parameter Fields."

' To ensure that the browser does not cache the html pages for the group trees.
Response.Expires = 0
' Parse Query String for paramaters
Call ParseQS()


' If the request is for a image, we do not process the remainder of the page. Rather, we simply return
' the image file.
if IMAGE <> "" then
Call session("oEMF").StreamImage(IMAGE, DEL)
Response.End
end if

' INIT is a special QS case, we only care about HTML viewer, if it is then save send page and branch info
' to the frame page

if INIT = "HTML_FRAME" then
' build URL and send the QS
if BRCH <> "" and NEWBRCH = "1" then
' htmstart is the base page that creates the frames for the HTML viewer
' if there is branch information it needs to be passed along.
tmpArray = session("tabArray")
if tmpArray(0) <> "EMPTY" then
val = UBound(tmpArray, 1) + 1
redim preserve tmpArray(val + 4)
else
val = 0
end if
tmpArray(val) = CStr(val)
tmpArray(val + 1) = session("lastBrch")
session("lastBrch") = BRCH
tmpArray(val + 2) = session("CurrentPageNumber")
tmpArray(val + 3) = session("lastknownpage")
tmpArray(val + 4) = session("LastPageNumber")
session("tabArray") = tmpArray
gvURL = "htmstart.asp?brch=" & BRCH & "&"
else
if BRCH <> "" then
gvURL = "htmstart.asp?brch=" & BRCH
else
gvURL = "htmstart.asp"
end if
end if
response.redirect gvURL
end if



' If there is a BRCH then create the gvGroupPath array that represents it.

if BRCH <> "" then
gvGroupPath = CreateArray(BRCH)
end if

' If there is a GRP then create the gvGroupLevel array that represents it.

if GRP <> "" then
gvGroupLevel = CreateArray(GRP)
end if

' If there is a TTL_INFO then create the gvTotallerInfo array that represents it.

if TTL_INFO <> "" then
gvTotallerInfo = CreateArray(TTL_INFO)
end if

' If there are COORDs, then get them
if COORD <> "" then
Call GetDrillDownCoordinates(COORD, glX, glY)
end if

' This case statement determines what action to perform based on CMD
' there are sub cases for each viewer type



Select Case CMD

Case "GET_PG"

Call RetrieveObjects

' create the actual page
Set goPage = goPageCollection(PAGE)
' check for an exception on the page number
Call ValidatePageNumber

' 0 is for epf, 8209 is a SafeArray
Select Case VFMT

Case "ENCP"
session("oPageEngine").PlaceHolderOptions = 0
if(PVERSION > 2)then
if INCOMPLETE_PAGE > 0 then
session("oPageEngine").PlaceHolderOptions = crAllowPlaceHolders
end if
if INCOMPLETE_PAGE_COUNT > 0 then
session("oPageEngine").PlaceHolderOptions = session("oPageEngine").PlaceHolderOptions + crDelayTotalPageCountCalc
end if
end if
session("oPageEngine").ImageOptions = 1
temp = goPage.Renderepf(8209)
Response.AddHeader "CONTENT-LENGTH", lenb(temp)
Response.ContentType = EPFMIMETYPE
response.binarywrite temp

Case "HTML_FRAME"
session("oPageEngine").ImageOptions = 1
response.binarywrite goPage.Renderhtml(1,2,1,request.ServerVariables("SCRIPT_NAME"),8209)
' Need to know if it is the last page to construct the toolbar correctly
if goPage.IsLastPage then
session("LastPageNumber") = goPage.pagenumber
session("CurrentPageNumber") = session("LastPageNumber")
end if
Case "HTML_PAGE"
session("oPageEngine").ImageOptions = 1
response.binarywrite goPage.Renderhtml(1,3,3,request.ServerVariables("SCRIPT_NAME"),8209)

end select

Case "GET_TTL"

Call RetrieveObjects

Select Case VFMT

Case "ENCP"
Response.ContentType = ETFMIMETYPE
if(PVERSION > 2)then
temp = goPageGenerator.RenderTotallerETF(gvTotallerInfo, 0, 1, gvMaxNode, 8209)
else
temp = goPageGenerator.RenderTotallerETF(gvGroupPath, 0, 0, gvMaxNode, 8209)
end if
Response.AddHeader "CONTENT-LENGTH", lenb(temp)
response.binarywrite temp

Case "HTML_FRAME"
response.binarywrite goPageGenerator.RenderTotallerHTML(gvGroupPath, 1, 0, gvMaxNode, gvGroupLevel, 1, request.ServerVariables("SCRIPT_NAME"), 8209)

end select


Case "RFSH"

' This command forces the database to be read again.
session("oRpt").DiscardSavedData
If Err.Number <> 0 Then
Call CheckForError
Else
session("oRpt").EnableParameterPrompting = False
session("oRpt").ReadRecords
Set session("oPageEngine") = session("oRpt").PageEngine
End If
Call RetrieveObjects
Set goPage = goPageCollection(PAGE)
Call ValidatePageNumber
session("oPageEngine").ImageOptions = 1
Select Case VFMT
Case "ENCP"
' Java and Active X Viewers will make a get page command when receiving 0 error msg value
if VIEWER = "JAVA" then
session("oPageEngine").PlaceHolderOptions = 0
if(PVERSION > 2)then
if INCOMPLETE_PAGE > 0 then
session("oPageEngine").PlaceHolderOptions = crAllowPlaceHolders
end if
if INCOMPLETE_PAGE_COUNT > 0 then
session("oPageEngine").PlaceHolderOptions = session("oPageEngine").PlaceHolderOptions + crDelayTotalPageCountCalc
end if
end if
temp = goPage.Renderepf(8209)
Response.AddHeader "CONTENT-LENGTH", lenb(temp)
Response.ContentType = EPFMIMETYPE
response.binarywrite temp
else
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 0,""
end if

Case "HTML_FRAME"
InitializeFrameArray()
gvURL = "htmstart.asp"
response.redirect gvURL

Case "HTML_PAGE"
session("oPageEngine").ImageOptions = 1
response.binarywrite goPage.Renderhtml(1,3,1,request.ServerVariables("SCRIPT_NAME"),8209)

end select


Case "NAV"
Call RetrieveObjects
Call CheckForError
' Get the page number that the group in on, for this particular branch
gvPageNumber = goPageGenerator.GetPageNumberForGroup(gvGroupLevel)

Select Case VFMT
' 0 is for epf, 8209 is a SafeArray, 8 is a BSTR
Case "ENCP"
' Create a byte array for the EMF, which will contain the page number
Response.ContentType = EMFMIMETYPE
session("oEMF").sendpagenumberrecord(gvPageNumber)

Case "HTML_FRAME"
' for html browser send back the page
dim appendQuery
appendQuery = "?"
session("CurrentPageNumber") = gvPageNumber
if BRCH <> "" then
appendQuery = appendQuery & "BRCH=" & BRCH & "&"
end if
if GRP <> "" then
appendQuery = appendQuery & "GRP=" & GRP
end if
response.redirect "framepage.asp" & appendQuery

end select


Case "CHRT_DD"
' only supported in java and active X smart viewers
Select Case VFMT

Case "ENCP"

' Get page collection
Call RetrieveObjects
Call CheckForError
' Pass the coordinates to the report engine to determine what
' branch the drill down goes to.
Set goPageGeneratorDrill = goPageGenerator.DrillOnGraph(PAGE, glX, glY)
' Check for an exception because of coordinates
if err.number <> 0 then
gsErrorText = "Not part of the Graph "
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 40, gsErrorText
err.clear
response.end
end if
' pass the group level and group path to helper function to create
' the EMF message, this tells the viewer where to get the page.

gvGroupPathDD = goPageGeneratorDrill.grouppath
gvGroupNameDD = goPageGeneratorDrill.groupname
Response.ContentType = EMFMIMETYPE
session("oEMF").GroupName = gvGroupNameDD
session("oEMF").sendbranchesemf(gvGroupPathDD)

end select

Case "GET_LPG"

' only support in smart viewers
Select Case VFMT

Case "ENCP"
' this command returns the page number of the last page
' Get page collection
Call RetrieveObjects
Call CheckForError
' Get the count from the Pages collection
gvPageNumber = goPageCollection.Count

' Send the EMF representing the page number
Response.ContentType = EMFMIMETYPE
session("oEMF").sendpagenumberrecord(gvPageNumber)
end select

Case "SRCH"
Call RetrieveObjects
Call CheckForError
' create page variable
gvPageNumber = CInt(PAGE)

Select Case VFMT
Case "ENCP"
if goPageGenerator.FindText(TEXT, 0, gvPageNumber) then
Response.ContentType = EMFMIMETYPE
session("oEMF").sendpagenumberrecord(gvPageNumber)
else
gsErrorText = "The specified text, '" & TEXT & "' was not found in the report"
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 33, gsErrorText
end if

Case "HTML_FRAME"
' We are being called by HTML viewer
' need to get the text from the form post
dim searchFound
TEXT = request.form("text")
' Now find out what page the text is on
tempNumber = gvPageNumber + 1
If(CBool(goPageGenerator.FindText(TEXT, 0, tempNumber))) then
session("CurrentPageNumber") = tempNumber
searchFound = 1
else
session("CurrentPageNumber") = gvPageNumber
searchFound = 0
End If
if BRCH <> "" then
gvURL = "framepage.asp?brch=" & BRCH & "&SEARCHFOUND=" & searchFound
else
gvURL = "framepage.asp?SEARCHFOUND=" & searchFound
end if
response.redirect gvURL

Case "HTML_PAGE"
' We are being called by HTML viewer
' need to get the text from the form post
TEXT = request.form("text")
' Now find out what page the text is on
tempNumber = gvPageNumber
If(CBool(goPageGenerator.FindText(TEXT, 0, tempNumber))) then
gvPageNumber = tempNumber
Set goPage = goPageCollection(gvPageNumber)
session("oPageEngine").ImageOptions = 1
response.binarywrite goPage.Renderhtml(1,3,3,request.ServerVariables("SCRIPT_NAME"),8209)
else
' Send back an html page indicating the text was not found.
Response.Write "Seagate ASP Reports Server

The text cannot be found in this report.

"
End If

end select


Case "TOOLBAR_PAGE"

' Redirect to the framepage, need to know if we are
' on the last page.

if session("LastPageNumber") <> "" then
if CInt(PAGE) > CInt(session("LastPageNumber")) then
session("CurrentPageNumber") = session("LastPageNumber")
else
session("CurrentPageNumber") = PAGE
end if
else
Call RetrieveObjects
Call CheckForError
' create the actual page
Set goPage = goPageCollection(PAGE)
' check for an exception on the page number
Call ValidatePageNumber
if goPage.IsLastPage then
session("LastPageNumber") = goPage.pagenumber
session("CurrentPageNumber") = session("LastPageNumber")
else
session("CurrentPageNumber") = PAGE
end if
end if
if BRCH <> "" then
gvURL = "framepage.asp?brch=" & BRCH
else
gvURL = "framepage.asp"
end if

response.redirect gvURL

Case "EXPORT"
Set ExportOptions = Session("oRpt").ExportOptions
Session("oRpt").DisplayProgressDialog = FALSE
if(FillExportOptionsObject( EXPORT_FMT)) Then
Call RetrieveObjects
response.binarywrite goPageGenerator.Export(8209)
Call CheckForError
else
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 1, "Invalid Export Type Specified"
end if

Case "MAP_DD"
' only supported in java and active X smart viewers
Select Case VFMT

Case "ENCP"

' Get page collection
Call RetrieveObjects
Call CheckForError
' Pass the coordinates to the report engine to determine what
' branch the drill down goes to.
Set goPageGeneratorDrillonMap = goPageGenerator.DrillOnMap(PAGE, glX, glY)
' Check for an exception because of coordinates
if err.number <> 0 then
gsErrorText = "No Values Exist for Selected Region of Map"
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 40, gsErrorText
err.clear
response.end
end if
' pass the group level and group path to helper function to create
' the EMF message, this tells the viewer where to get the page.

gvGroupPathDD = goPageGeneratorDrillonMap.grouppath
gvGroupNameDD = goPageGeneratorDrillonMap.groupname
session("oEMF").GroupName = gvGroupNameDD
Response.ContentType = EMFMIMETYPE
session("oEMF").sendbranchesemf(gvGroupPathDD)

end select

end select

SUB RetrieveObjects()
' This procedure simply retrieves the session objects into global variables.
' In the case of Out of Place Subreports, the SUBRPT parameter must be parsed and the
' Subreport page generator object must be created.
Dim oRptOptions 'Report Options
Dim charIndexVal,tmpCharIndexVal
Dim tmpStr
Dim tmpPageGenerator
Dim subPageGenerator
Dim OOPSSeqNo 'holds the page's OOPS sequence number
Dim OOPSSubName 'holds the OOPS's name
Dim subCoords 'holds the coordinates of the OOPS in the main report
Dim subgvGroupPath 'holds the group path for the main report in subrpt parameter
Dim mainRptPageNumber 'holds the page number for the main report in the subrpt parameter

subgvGroupPath = Array()
if IsObject(session("oPageEngine")) then
' make sure dialogs have been disabled
if SUBRPT <> "" Then
' Obtain the subreport sequence number
charIndexVal = findChar(SUBRPT, ":")
if charIndexVal > 1 then
OOPSSeqNo = Mid(SUBRPT,1,charIndexVal - 1)
end if
' Obtain the subreport's name
tmpStr = Mid(SUBRPT,charIndexVal + 1)
charIndexVal = findChar(tmpStr, ":")
if charIndexVal > 1 then
OOPSSubName = Mid(tmpStr,1,charIndexVal - 1)
end if
tmpStr = Mid(tmpStr,charIndexVal + 1)
charIndexVal = findChar(tmpStr, ":")
' Obtain the group path for the Out of Place Subreport
if charIndexVal > 1 then
subgvGroupPath = CreateArray(Mid(tmpStr, 1, charIndexVal - 1))
end if
'Obtain the main report page number after the fourth : character
tmpStr = Mid(tmpStr,charIndexVal + 1)
'Get the location of the fourth : seperator
charIndexVal = findChar(tmpStr, ":")
mainRptPageNumber = Mid(tmpStr, 1, charIndexVal - 1)
'Get the coordinates portion of the SUBRPT parameter
subCoords = Mid(tmpStr, charIndexVal + 1)
Call GetDrillDownCoordinates(subCoords, slX, slY)
' Get the main reports page generator for the view
Set tmpPageGenerator = session("oPageEngine").CreatePageGenerator(subgvGroupPath)
Set subPageGenerator = tmpPageGenerator.DrillOnSubreport(mainRptPageNumber, slX, slY)
Set goPageGenerator = subPageGenerator.CreateSubreportPageGenerator(gvGroupPath)
else
Set goPageGenerator = session("oPageEngine").CreatePageGenerator(gvGroupPath)
end if
Set goPageCollection = goPageGenerator.Pages
else
' must have timed out return an error, you may wan to Append to the
' IIS log here.
if VFMT = "ENCP" then
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 1, sessionError
else
response.write sessionError

end if
response.end
end if

END SUB

SUB ParseQS()
DIM UTF8STR ' this is the string in UTF-8 format returned from the viewer
' Parse the Query String
CMD = UCase(request.querystring("cmd")) ' This determines the main function to perform
PAGE = UCase(request.querystring("page")) ' the page to return
BRCH = UCase(request.querystring("BRCH")) ' the branch is a mechanism to determine the drill down level.
' A drill down level is like a view of the report, a new tab
' is created to indicate that it is a new view
VIEWER = UCase(request.querystring("VIEWER")) ' This is the viewer that is calling the server
VFMT = UCase(request.querystring("VFMT")) ' the format that the viewer understands
NODE = UCase(request.querystring("NODE"))
GRP = UCase(request.querystring("GRP")) ' this is a way of specifing the actual group
COORD = UCase(request.querystring("COORD")) ' these are the coordinates on the graph to process
DIR = UCase(request.querystring("DIR")) ' this is the search direction
CSE = UCase(request.querystring("CASE")) ' indicates if the search is case sensitive
UTF8STR = request.querystring("TEXT") ' this is the text to search for.
TEXT = session("oEMF").DecodeUTF8String(UTF8STR) ' Convert to Unicode.
INIT = UCase(request.querystring("INIT")) ' used to build the frames for the html viewer
TAB = UCase(request.querystring("TAB")) ' used to keep track of TABS on drill down.
EXPORT_FMT = UCase(request.querystring("EXPORT_FMT")) ' Used to specify export format and type.
UTF8STR = request.querystring("SUBRPT") ' The Out of Place Subreport coordinates.
SUBRPT = UCase(session("oEMF").DecodeUTF8String(UTF8STR)) ' Convert to Unicode.
INCOMPLETE_PAGE = CInt(request.querystring("INCOMPLETE_PAGE"))' Used to specify whether the page is to contain placeholders.
INCOMPLETE_PAGE_COUNT = CInt(request.querystring("INCOMPLETE_PAGE_COUNT"))' Used to specify whether the page has to contain a total page count.
PVERSION = CInt(request.querystring("PVERSION"))' Used to indicate the protocol version the viewer is utilizing.
TTL_INFO = UCase(request.querystring("TTL_INFO"))'Used to indicate the group path of the totaller request.
IMAGE = UCase(request.querystring("IMAGE"))
DEL = Cint(request.querystring("DEL"))
' Initialize variables to a default if they are not provided on the query string.
' Check for Parameter Values that are passed by the HTTP Post Command.
if CMD = "" then
CMD = UCase(request.form("cmd"))
if CMD = "" then
CMD = "GET_PG"
end if
end if

if INIT = "" then
INIT = UCase(request.form("INIT"))
end if

if BRCH = "" then
BRCH = UCase(request.form("BRCH"))
end if

if BRCH = "" and INIT = "HTML_FRAME" then
Call InitializeFrameArray
end if


if BRCH <> "" and INIT = "HTML_FRAME" then
if session("lastBrch") <> BRCH then
NEWBRCH = "1"
end if
end if

if VIEWER = "" then
VIEWER = UCase(request.form("VIEWER"))
if VIEWER = "" then
VIEWER = "HTML"
end if
end if

if VFMT = "" then
VFMT = UCase(request.form("VFMT"))
if VFMT = "" then
VFMT = "HTML_PAGE"
end if
end if

if GRP = "" then
GRP = UCase(request.form("GRP"))
end if

if TTL_INFO = "" then
TTL_INFO = UCase(request.form("TTL_INFO"))
end if

if COORD = "" then
COORD = UCase(request.form("COORD"))
end if

if NODE = "" then
NODE = UCase(request.form("NODE"))
end if

if DIR = "" then
DIR = UCase(request.form("DIR"))
if DIR = "" then
DIR = "FOR" ' forward
end if
End if

if CSE = "" then
CSE = UCase(request.form("CASE"))
if CSE = "" then
CSE = "0" ' case insensitive
end if
end if

if TEXT = "" then
UTF8STR = request.form("TEXT")
TEXT = session("oEMF").DecodeUTF8String(UTF8STR) ' Convert to Unicode.
end if

if EXPORT_FMT = "" then
EXPORT_FMT = UCase(request.form("EXPORT_FMT"))
end if

if SUBRPT = "" then
UTF8STR = request.form("SUBRPT")
SUBRPT = UCase(session("oEMF").DecodeUTF8String(UTF8STR)) ' Convert to Unicode.
end if

if request.form("INCOMPLETE_PAGE") <> "" then
INCOMPLETE_PAGE = CInt(request.form("INCOMPLETE_PAGE"))
end if

if request.form("INCOMPLETE_PAGE_COUNT") <> "" then
INCOMPLETE_PAGE_COUNT = CInt(request.form("INCOMPLETE_PAGE_COUNT"))
end if

if PVERSION = 0 then
PVERSION = CInt(request.form("PVERSION"))
end if

if IMAGE = "" then
IMAGE = request.form("IMAGE")
end if

if DEL = 0 then
DEL = Cint(request.form("DEL"))
end if

' Check to make sure there is a page requested, if not use 1 as a default
if PAGE = "" then
PAGE = UCase(request.form("page"))
if PAGE = "" then
PAGE = "1"
end if
end if

if PAGE <> "" and NOT IsNumeric(PAGE) then
PAGE = "1"
end if

END SUB

Function CreateArray(ByVal vsStringArray)
' this function takes an string like 0-1-1-0 and converts
' it into an array of integers

Dim lvArray
Dim lvNewArray
Dim liCount
Dim liCurrentPos
Dim lsBuf
lvArray = Array()
lvNewArray = Array()
ReDim lvArray(256)

liStringLength = Len(vsStringArray)
liCount = 0
liCurrentPos = 1
lsBuf = ""

While liCurrentPos <= liStringLength

'ignore this character
If Mid(vsStringArray, liCurrentPos, 1) <> "-" Then
lsBuf = lsBuf & Mid(vsStringArray, liCurrentPos, 1)
If liCurrentPos = liStringLength Then
lvArray(liCount) = CInt(lsBuf)
lsBuf = ""
liCount = liCount + 1
End If

Else
lvArray(liCount) = CInt(lsBuf)
lsBuf = ""
liCount = liCount + 1
End If
liCurrentPos = liCurrentPos + 1
Wend

ReDim lvNewArray(liCount - 1)

For x = 0 To (liCount - 1)
lvNewArray(x) = lvArray(x)
Next


CreateArray = lvNewArray

End Function

' Helper function to parse coordinates passed by viewers and place into independent variables.
SUB GetDrillDownCoordinates(ByVal strParam, ByRef xCoord, ByRef yCoord)
Dim liStringLength
Dim lbDone
Dim lsBuf

liStringLength = Len(strParam)
lbDone = FALSE
lsBuf = ""
xCoord = ""
yCoord = ""
For x = 1 To liStringLength
lsBuf = Mid(strParam, x, 1)

'ignore this character
If lsBuf = "-" Then
lsBuf = ""
lbDone = TRUE
End if

if lbDone then
yCoord = yCoord + lsBuf
else
xCoord = xCoord + lsBuf
end if

Next

END SUB

' This helper procedure will check if the requested page number exists.
' If it does not, it will set it to the last available page.
SUB ValidatePageNumber()
if err.number <> 0 then
if err.number = 9 then
' just return the last page
PAGE = goPageCollection.count
Set goPage = goPageCollection(PAGE)
' these session variables are used for the HTML Frame viewer
session("LastPageNumber") = PAGE
session("CurrentPageNumber") = PAGE
err.clear
else
' A more serious error has occurred. Error message sent to browser.
Call CheckForError
end if
end if
END SUB

' This helper procedure will send an error msg to the browser based on what viewer is being used.
SUB CheckForError()
If Err.Number <> 0 Then
if VFMT = "ENCP" then
Response.ContentType = EMFMIMETYPE
session("oEMF").SendErrorMsg 1, "CRAXDRT Error Occured on Server. " & Err.Number & " : " & Err.Description
else
Response.Write "CRAXDRT Error Occured on Server. Error Number: " & Err.Number & " Error Description: " & Err.Description
end if
Response.end
End if
END SUB

SUB InitializeFrameArray()
'initialize the html_frame array
set session("tabArray") = Nothing
session("lastBrch") = ""
dim tmpArray
tmpArray = Array(4)
redim tmpArray(4)
'Initialize the sequence number
tmpArray(0) = "EMPTY"
session("tabArray") = tmpArray
END SUB

' Helper function to parse the EXPORT_FMT parameter and fill in the properties of the
' Export object.
FUNCTION FillExportOptionsObject(export_fmt_options)
dim charIndex
dim exportType
dim exportDLLName
charIndex = findChar(export_fmt_options,":")
'Set session("ExportOptions") = Session("oRpt").ExportOptions
if(charIndex > 0) Then
'Get the export format type value
exportType = Mid(export_fmt_options, charIndex + 1)
exportDLLName = UCase(Mid(export_fmt_options, 1, charIndex - 1))
Select Case exportDLLName
Case "CRXF_WORDW"
ExportOptions.FormatType = CREFTWORDFORWINDOWS + CInt(exportType)
Response.ContentType = "application/msword"
Case "U2FWORDW"
ExportOptions.FormatType = CREFTWORDFORWINDOWS + CInt(exportType)
Response.ContentType = "application/msword"
Case "CRXF_RTF"
ExportOptions.FormatType = CREFTRICHTEXT + CInt(exportType)
Response.ContentType = "application/rtf"
Case "U2FRTF"
ExportOptions.FormatType = CREFTRICHTEXT + CInt(exportType)
Response.ContentType = "application/rtf"
Case "CRXF_XLS"
ExportOptions.FormatType = 29 'Excel 8.0
Response.ContentType = "application/vnd.ms-excel"
Case "U2FXLS"
if ((CREFTEXCEL21 + CInt(exportType)) <= 22 ) then
ExportOptions.FormatType = CREFTEXCEL21 + CInt(exportType)
else
ExportOptions.FormatType = CREFTEXCEL70 + (CInt(exportType) - 5)
end if
Response.ContentType = "application/vnd.ms-excel"
Case "U2FCR"
ExportOptions.FormatType = CREFTCRYSTALREPORT
Response.ContentType = "application/x-rpt"
Case "CRXF_PDF"
ExportOptions.FormatType = CREFTPORTABLEDOCFORMAT
ExportOptions.PDFExportAllPages = TRUE
Response.ContentType = "application/pdf"
Case "U2FPDF"
ExportOptions.FormatType = CREFTPORTABLEDOCFORMAT
ExportOptions.PDFExportAllPages = TRUE
Response.ContentType = "application/pdf"
Case Else
FillExportOptionsObject = False
Exit Function
End Select
ExportOptions.DestinationType = CREDTDISKFILE
FillExportOptionsObject = True
else
FillExportOptionsObject = False
end if

end FUNCTION

' Helper function that returns the index of the character in the given string.
Function findChar(findStr, charToFind)
dim lenStr
dim result
lenStr = len(findStr)
result = -1
if(lenStr > 0) Then
charCounter = 1
do While(charCounter <= lenStr)
tmpChar = Mid(findStr,charCounter,1)
if(tmpChar = charToFind) Then
result = charCounter
Exit Do
end if
charCounter = charCounter + 1
loop
end if

findChar = result
End Function

%>
文件7.Cleanup.asp---------------------------



Session Cleanup


<%
'This page is used to clean up any Crystal Reports RDC Runtime objects remaining in a
'a user's session. This page is called by a new browser window that is launched when
'a user closes a browser window containing a Crystal Reports viewer.
'
'You want to make sure that you clean up any instances of the oApp, oRpt and oPageEngine
'objects for 2 reasons:
'1) Licensing
'2) Resources
'When you create an instance of the Application and Report objects you are using
'an RDC Runtime license. Once you hit your maximum concurrent users (all licenses in use)
'you will no longer be able to create an instance of the report object (session("oRpt")
'Thus, when a user closes his/her browser you want to make sure that user's session is
'terminated as quickly as possible so that their license can be reclaimed.
'By destroying the session objects you are also reclaiming memory.


Function DestroyObjects(ByRef ObjectToDestroy)
If isobject(ObjectToDestroy) then
set ObjectToDestroy = nothing
DestroyObjects = true
Else
DestroyObjects = false
End if
End Function

'This function takes an object (by reference rather than by value) and destroys it.
'If the object was destroyed we return true otherwise we return false.

DestroyObjects session("oPageEngine")
DestroyObjects session("oRpt")
DestroyObjects session("oApp")

Response.Write("You may close this window")

%>



<%
'The javascript code is used to close the newly opened browser window once the page has run
Session.Abandon
Response.End
'These last two lines terminate that user's active session and flushes html to the browser.
%>


文件8.HandleRequest.asp-------用来控制报表显示层级

<%@LANGUAGE="VBSCRIPT" CODEPAGE="CP_ACP"%>


Untitled Document

<%
lay=request.QueryString("p_lay")
'response.Write("LAY="&lay)
'rep=request.QueryString("rep")
p_paras=request.QueryString("p_paras")
p_title=request.QueryString("p_title")
'response.Write(p_title)
' p_rep="EMP.rpt"
shost="http://"+request.ServerVariables("LOCAL_ADDR")

select case lay
case "DEPT"
'p_rep="reports/DEPT.rpt"
p_rep="DEPT.rpt"
p_path=shost+"/test/demo/reports/HandleRequest.asp"

case "EMP"
'p_rep="reports/DEPT.rpt"
p_rep="EMP.rpt"
p_path=shost+"/test/demo/reports/HandleRequest.asp"

case "EMPD"
p_rep="EMPD.rpt"
p_path=shost+"/test/demo/reports/HandleRequest.asp"

end select

urlstr=shost+"/test/demo/ReportViewer_TEST.asp?rep=" + p_rep
urlstr=urlstr+"&p_path=" + p_path
urlstr=urlstr+"&p_paras=" + p_paras
urlstr=urlstr+"&p_title="+p_title
'response.Write(urlstr)
'response.End
Response.Redirect(urlstr)
'str = "

上一篇: 积极的心态
下一篇: Discover资料 网址
请登录后发表评论 登录
全部评论

注册时间:2003-03-27

  • 博文量
    123
  • 访问量
    91470