11/25/2024 6:38:50 AM
|
|
slxdeveloper.com Community Forums |
|
|
|
The Forums on slxdeveloper.com are now retired. The forum archive will remain available for the time being. Thank you for your participation on slxdeveloper.com!
Forum to discuss writing script in Architect plugins for SalesLogix & general SalesLogix customization topics (for Windows client only). View the code of conduct for posting guidelines.
|
|
|
|
Crystal report runs fine once, then hangs for several minutes on subsequent runs.
Posted: 20 Jul 07 1:54 PM
|
I have a function that I use to print, preview, and/or attach a crystal report. (See below)
It works fine the first time I run it. Then any subsequent runs will hang on either the printOut or export (depending on what the function was asked to do)
objRDC.Export False -or- objRDC.PrintOut false,1,false,1,99
It may hang for up to 5 minutes. And when it's hanging it appears to be doing nothing. It's not locked up and there are no SQL locks. It just sits there.
Any ideas? Thanks in advance!
...Adam
Sub doCrystal (byval strReportName, byVal strEntityID, byVal strDescription, byVal strParam1, byVal strParam2, byVal strParam3, byVal strParam4, byVal boolPreview, byVal boolPrint, byVal boolAttach) dim objRDC, objFSO, objParam1, objParam2, objParam3, objParam4 dim strFullFileName, objWShell, x
set objRDC = Application.BasicFunctions.GetCrystalReport(strReportName) if isobject(objRDC) then if not isNull(strParam1) then set objParam1 = objRDC.ParameterFields.Item(1) objParam1.SetCurrentValue (strParam1) if not isNull(strParam2) then set objParam2 = objRDC.ParameterFields.Item(2) objParam2.SetcurrentValue (strParam2) if not isNull(strParam3) then set objParam3 = objRDC.ParameterFields.Item(3) objParam3.SetCurrentValue (strParam3) if not isNull(strParam4) then set objParam4 = objRDC.ParameterFields.Item(4) objParam4.SetcurrentValue (strParam4) end if end if end if end if
set objWShell = CreateObject("WScript.Shell") set objFSO = CreateObject("Scripting.FileSystemObject") if not objFSO.FolderExists(cDirectory) then objFSO.CreateFolder(cDirectory) end if
strFullFileName = cDirectory & "\" & cFileName
if boolPrint then objRDC.PrintOut false,1,false,1,99 end if if boolPreview or boolAttach then objRDC.ExportOptions.DestinationType = 1 'disk objRDC.ExportOptions.FormatType = 31 'PDF objRDC.ExportOptions.DiskFileName = strFullFileName objRDC.Export False end if
set objRDC = Nothing else msgbox "Error generating document" exit sub end if
if objFSO.FileExists(strFullFileName) then if boolPreview then x = objWShell.Run (strFullFileName,1,True) end if if boolAttach then if not addAttachment(strEntityID, strFullFileName, strDescription) then msgbox "Error attaching report" end if else objFSO.DeleteFile(strFullFileName) 'delete the temp file if we're not creating an attachment. Otherwise, addAttachment will cleanup. end if end if set objFSO = Nothing end sub
|
|
|
| |
|
Re: Crystal report runs fine once, then hangs for several minutes on subsequent runs.
Posted: 23 Jul 07 8:21 AM
|
There are a lot of conditional statements.
Are you making sure all objects are being set to Nothing before leaving the Sub?
You might want to change creating all objects at the beginning of the sub and destroying all of them at the end of the sub. This way they exist if needed and are destroyed when the sub is done.
John G.
|
|
|
| |
| |
|
Re: Crystal report runs fine once, then hangs for several minutes on subsequent runs.
Posted: 24 Jul 07 4:44 PM
|
oh yes, we are well aware that Crystal is tempermental when it comes to patches and updates, so we're running the out-of-the-box version that comes with SLX.
The problem appears to be with how Crystal is handing parameters which are used to filter the records returned by the report. So what I have done is removed all criteria from the "Select Expert" in crystal reports.
Instead I am using objRDC.SQLQueryString set the report SQL. So I am passing a "Where" clause to the sub which I append to the report's SQL statement. And now it works perfectly! Now I just need to modify my reports to remove the select criteria from the report and handle that instead through script.
strSQL = objRDC.SQLQueryString 'get report SQL strSQL = strSQL & " " & strWhere 'append where clause objRDC.SQLQueryString = strSQL |
|
|
|
Re: Crystal report runs fine once, then hangs for several minutes on subsequent runs.
Posted: 25 Jul 07 8:11 AM
|
Ah.. You hit on it..
The problem appears to be with how Crystal is handing parameters which are used to filter the records returned by the report.
I was just teaching someone about this yesterday. Apparently the data you are querying is a large dataset. When you have parameters in Crystal it does client side processing. So what happens is the client has to wait for ALL of the data to come down to it from the server. So you might have to wait for 100,000 records to be received by the client that then is filtered by the client.
When you changed the method by appending the WHERE condition to the SQL all the processing of the SQL is done on the server (server side processing). This takes a huge load off of the network and can speed up response time immensely. The result is only filtered data is returned from the server - not the 100,000 for example.
What I try to do for many of the customer reports done here is create a VIEW of the exact data I need for the report. By creating a VIEW you eliminate ALOT of the complexity of creating all of the necessary JOINs and conditions in Crystal. When the VIEW has the exact data needed for the report you are left with only having to specify ONE table to use in Crystal and can progress rather quickly through the process of formatting the report.
John G.
|
|
|
|
Re: Crystal report runs fine once, then hangs for several minutes on subsequent runs.
Posted: 26 Jul 07 2:46 PM
|
I see how using a VIEW would help, but using a VIEW wouldn't eleminate the need to pass a parameter like opportunityid to the report so that the records can be filtered. So a VIEW might improve performance related to JOINS, but wouldn't I still encounter the same problem since I'm still passing a parameter and it is the parameters that causes the main problem because they cause Crystal to do client side processing? |
|
|
| |
|
You can
subscribe to receive a daily forum digest in your
user profile. View the site code
of conduct for posting guidelines.
Forum RSS Feed - Subscribe to the forum RSS feed to keep on top of the latest forum activity!
|
|
|
|
|
|
|
|