Problem with Crystal Reports when no parameters are passed - c#

We recently upgraded our software to a new version of Crystal reports (13.0.10 > 13.0.21). During testing everything worked fine, but once we deployed an end user brought up an issue.
All of our crystal reports are backed by stored procedures. The end users were given the ability to create custom reports. They were told that they would need to use stored procs to get any data back. Somewhere along the way one user found out that they could bypass creating a stored proc.
In that scenario they would click the button to generate the report from inside of our software. After our software rendered the report Crystal would prompt them for a database login and then ask them for the parameters. It was slow but it worked, and the end user didn't have to learn how to write a proc.
Fast forward to the new version of Crystal we are using. The user is still prompted to login to the database and provide parameter information, but when the report comes back none of the parameters are being enforced.
This seems like a change with in Crystal, which I would understand. Unfortunately my boss is worried about blow back from end users because 'your new version of the application broke all of my custom reports (even though I didn't add them in correctly)'
It is worth noting that when the end users run these reports from inside of the report designer it works just fine. When a report with a proper stored proc is run, it displays fine.
We would like to see Crystal take the late parameters and apply them before displaying the report, as it used to do. I just have no idea where to start looking

Related

SSRS - link to a survey works, but if I change it to another survey I get rsItemsNotFound

I'm looking at a VS project which stores report records in a database table (here it holds things like the report url, name, etc.). We have a link that when you click it, it opens a report as a PDF. This one works fine.
I duplicated this report, made appropriate changes for a new report, and also copied the exact same format when adding a new row for it in the database (just with its own name and different url, etc.).
When I change the link in the code to grab the new report (nothing in the code has changed aside from which report ID it grabs from the database), it gives me 'folder/reportname' cannot be found (rsitemsnotfound).
Both reports are under the same folder location, and in the code it definitely grabs all the information from the database, and it uses the same data source credentials for the reports. No spelling errors either. Both reports work in the survey designer preview btw.
It seems like there is an issue with connecting to the data source for the new report, but again all the credentials and everything are the same so I am a bit stumped as to why this error is happening.
I am using Visual Studio 2019, I am not sure if it matters but the previous reports likely were made using earlier versions
Figured out the issue, very silly of me to not realize. In the DB I saved the report name in the path as something different than the name of the rdl

Publish report to Shared folder from C# or through SP(SQL Server 2008)

At high level, this is my requirement.
We have a windows application, which hosts several report(built using SSRS 2008). Now, we have got a requirement like, whenever the user generates a specific report from the application, the same should be saved in csv format in a shared location.
Of couse, once the report is generated, the users have the provision to save the report in any location they want and in all possible formats as allowed in SSRS 2008,but they feel it is becoming an over head for them. So, they just would like to give necessary inputs to the report through the parameter screen(basically nothing but the small dialog which accepts users input and generate the report) from the windows application and once they click on 'Generate Report' or 'OK' button, they want the report to be stored in a shared location in CSV format with a unique name(format:OrderNumber_DDMMYY, here the order number is unique always. the order number is provided as input through report parameter screen).
We have developed the windows application in VS 2008, now migrated to VS2012 and the backend is SQL Server 2008. We also have a dedicated sharepoint.
Can anyone throw light on the best way to achieve this?
Here's something that might be able to help you.
http://www.codeproject.com/Articles/699869/Accessing-SSRS-Reports-from-SharePoint-Site-using

save a user's report parameter choices so that it can be used again?

Is it possible to save a user's report parameter choices so that it can be used again, let's say a week later when the user wants to run the report again?
I am using SSRS reporting services in my asp.net(C#) application and using report viewer to display report in website. I want to make some personilization to reports interface. I want users to save his report parameters and give it any name, so that he can generate report any time in future.
There is a solution on Codeplex for a way of building reports to store the users last used parameters as the default choice next time they run the reports.
However it sounds like you actually want to store the report itself for future reference, including a history of different report results. If so, then you may want to look at Report Snapshots.
If your case (report) is not too complicated, try follow this document and see if it helps. I have applied to a couple reports with this and work well. iParameter SSRS - Report Parameter Saving

Crystal 2008 - Can I access the SQL statement programatically at runtime?

We've created a Crystal Report viewer application to house all of our company reports. It's built in such a way that any time we add, modify or delete a report, the viewer application itself does not need to change. The viewer app is completely driven by an XML configure file that tells it what reports are available, where they are, connection information etc. We want to keep it this way too. When we add a new report, we don't want to have to update everyone's viewer application.
The problem is that Crystal talks to our DB directly and we would prefer it didn't. Therefore, for each report, the viewer needs to query the database to retrieve the data each report needs. The problem is that many of our reports allow the user to enter a large number of filter criteria. Ideally, what we would like to be able to do is to have Crystal prompt the user to enter their filter criteria, like it currently does, and then be able to somehow get the SQL statement it would send on to the DB, pass it on to the DB ourselves, and tell Crystal not to. the viewer would then supply the report with data.
Does anyone know if this can be done? An alternative we've considered is to have the viewer prompt the user for the filter criteria, and then build the SQL statement. However, then each report becomes a C# coding project with an update to the viewer. We're trying to avoid that.
Thanks.
Interesting approach. I have only ever done the opposite.
Normally people like to build their own reports using a Crystal client. The report connects to a datasource specified in the report itself.
Using .NET to query the reports needs, set parameters and formulas then view the report is a piece of cake.
Anyway, there are only two methods that I know of called "pull" and "push". Pull is what I just described above. Push is what you described as a solution that you considered but it would involve coding for each report.
I'm afraid what you are trying to do has never been done before. However, I would recommend the "pull" method. It has worked very well for me with a client with dozens of users and hundreds of reports.

Using Crystal Reports in Visual Studio 2005 (C# .NET Windows App)

I need to create reports in a C# .NET Windows app. I've got an SQL Server 2005 database, Visual Studio 2005 and am quite OK with creating stored procedures and datasets.
Can someone please point me in the right direction for creating reports? I just can't seem work it out. Some examples would be a good start, or a simple How-to tutorial... anything really that is a bit better explained than the MSDN docs.
I'm using the CrystalDecisions.Windows.Forms.CrystalReportViewer control to display the reports, I presume this is correct.
If I'm about to embark on a long and complex journey, what's the simplest way to create and display reports that can also be printed?
I have managed to make this work now.
Brief Overview
It works by having a 'data class' which is just a regular C# class containing variables and no code. This is then instantiated and filled with data and then placed inside an ArrayList. The ArrayList is bound to the report viewer, along with the name of the report to load. In the report designer '.Net Objects' are used, rather than communicating with the database.
Explanation
I created a class to hold the data for my report. This class is manually filled by me by manually retrieving data from the database. How you do this doesn't matter, but here's an example:
DataSet ds = GeneratePickingNoteDataSet(id);
foreach (DataRow row in ds.Tables[0].Rows) {
CPickingNoteData pickingNoteData = new CPickingNoteData();
pickingNoteData.delivery_date = (DateTime)row["delivery_date"];
pickingNoteData.cust_po = (int)row["CustomerPONumber"];
pickingNoteData.address = row["CustomerAddress"].ToString();
// ... and so on ...
rptData.Add(pickingNoteData);
}
The class is then put inside an ArrayList. Each element in the arraylist corresponds to one 'row' in the finished report.
The first element in the list can also hold the report header data, and the last element in the list can hold the report footer data. And because this is an ArrayList, normal Array access can be used to get at them:
((CPickingNoteData)rptData[0]).header_date = DateTime.Now;
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber();
Once you have an arraylist full of data, bind it to your report viewer like this, where 'rptData' is of type 'ArrayList'
ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(reportPath);
reportDoc.SetDataSource(rptData);
crystalReportViewer.ReportSource = reportDoc;
Now you will need to bind your data class to the report itself. You do this inside the designer:
Open the Field Explorer tab (which might be under the 'View' menu), and right-click "Database Fields"
Click on 'Project Data'
Click on '.NET Objects'
Scroll down the list to find your
data class (if it isn't there,
compile your application)
Press '>>' and then OK
You can now drag the class members
onto the report and arrange them as
you want.
Crystal is one possible option for creating reports. It has been around a long time and a lot of people seem to like it.
You might want to take a look at SQL reporting services. I have used both but my preferance is SQL reporting services. Its pretty well integrated into studio and works similar to the other microsoft projects. Its also free with the sql express etc.
This is a good article on beginning reporting services:
http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/
You can use the report viewer with client side reporting built into vs.net (ReportBuilder/ReportViewer control). You can create reports the same way as you do for sql reporting services, except you dont need sql server(nor asp.net). Plus you have complete control over them(how you present, how you collect data, what layer they are generated in, what you do with them after generating, such as mailing them, sending to ftp, etc). You can also export as PDF and excel.
And in your case building up a report from data and user input, this may work great as you can build up your own datasource and data as you go along. Once your data is ready to be reported on, bind it to your report.
The reports can easily be built in Visual Studio 2005 (Add a report to your project), and be shown in a Winforms app using the ReportViewer control.
Here is a great book i recommend to everyone to look at if interested in client side reports. It gives a lot of great info and many different scenarios and ways to use client side reporting.
http://www.apress.com/book/view/9781590598542
I second alex's recommendation to look at sql reporting services - if you have a sql developer license, then you probably already have reporting services
i don't like crystal reports, too much tedium in the designer (editing expressions all the time) too many server-deployment issues (check those license files!)
I use Crystal. I will outline my method briefly, but be aware that I'm a one man shop and it may not translate to your environment.
First, create a form with a CR Viewer. Then:
1) Figure out what data you need, and create a view that retrieves the desired columns.
2) Create a new Crystal report using the wizard giving your view as the source of the data.
3) Drag, drop, insert, delete, and whatever to rough your report into shape. Yes, it's tedious.
4) Create the necessary button click or whatever, and create the function in which to generate the report.
5) Retrieve the data to a DataTable (probably in a DataSet). You do not have to use the view.
6) Create the report object. Set the DataTable to be the DataSource. Assign the report object to the CR Viewer. This is one part for which there are examples.
Comments:
If you lose the window with the database fields, etc (Field Explorer), go to View/Document Outline. (It's my fantasy to have Bill Gates on a stage and ask him to find it.)
The reason for setting up the view is that if you want to add a column, you revise the view, and the Field Explorer will update automatically. I've had all sorts of trouble doing it other ways. This method also is a work-around for a bug that requires scanning through all the tables resetting which table they point to. You want to hand Crystal a single table. You do not want to try to get Crystal to join tables, etc. I don't say it doesn't work; I say it's harder.
There is (or was) documentation for the VS implementation of Crystal on the Business Objects web site, but I believe that it has disappeared behind a register/login screen. (I could stand more info on that myself.)
I've had trouble getting Crystal to page break when I want, and not page break when I don't want, etc. It's far from the best report writer I've ever used and I do not understand why it seems to have put so many others out of business. In addition, their licensing policies are very difficult to deal with in a small, fluid organization.
Edited to add example:
AcctStatement oRpt = new AcctStatement() ;
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]);
oRpt.SetParameterValue("plan_title",sPlanName) ;
crViewer.ReportSource = oRpt ;
I found the following websites solved my problems. Included here for future reference.
CrystalReportViewer Object Model Tutorials for the tutorial on how to make the whole thing work. And also Setting up a project to use Crystal Reports
and specifically preparing the form and adding the control
i think this may help you out
http://infynet.wordpress.com/2010/10/06/crystal-report-in-c/
I strongly recommend trying an alternative reporting solution - I have a lot of experience with Crystal, and have managed to do some funky things with it in .Net, but quite honestly the integration of Crystal and .Net is an absolute pig for anything but the simplest cases.
I have tried RS. I am converting from RS back to Crystal. RS is just too heavy and slow (or something). There is no reason to have to wait 30 seconds for a report to render is RS when Crystal does it in under a second.

Categories

Resources