ASP Call Crystal Report with Store Procedure(5)

发表于:2007-06-30来源:作者:点击数: 标签:
%@ LANGUAGE= VB SCRIPT % % 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
<%@ LANGUAGE="VBSCRIPT" %>
<%
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.1")
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

‘’ 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.
‘’ Constant Values
Dim CREFTWORDFORWINDOWS
Dim CREFTRICHTEXT
Dim CREFTEXCEL21
Dim CREFTCRYSTALREPORT
Dim CREDTDISKFILE
Dim EMFMIMETYPE
CREFTWORDFORWINDOWS = 14
CREFTRICHTEXT = 4
CREFTEXCEL21 = 18
CREFTCRYSTALREPORT = 1
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"
‘’ 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()

‘’ 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
session("oRpt").ReadRecords
If Err.Number <> 0 Then
Call CheckForError
Else
session("oRpt").EnableParameterPrompting = False
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

原文转自:http://www.ltesting.net