| 

.NET C# Java Javascript Exception

1
Wir designen grad eine Anwendung, die in WPF mit Client-Server Architektur (MVVM und Entity Framework) laufen soll.

Als Berichtssystem möchten wir CR 2011 einsetzen.

Meine Frage nur: Wie setzen wir CR ein, damit folgenden erfüllt wird:
- Kein direkter Zugriff auf die Datenbank vom Client aus möglich. Nur über einen DAL (EF)
- Die Berichtsdefinitioinen wird zentral in der Datenbank abgelegt
- Abfrage von Paramtern durch den Report, soll auf dem Client möglich sein (wie z. B. "Rechnungsnummer" oder "PLZ-Gebiet" usw.)
- Kaskadierte Paramter (z.B. "Land" => "PLZ-Gebiet" => "Ort") müssen möglich ein, aber ohne direkten Zugriff auf die Datenbank

Meine Idee ist bis jetzt:
1. Client sendet BerichtID an Server und bekommt die Berichtsdefinition zurück
2. Die Paramteranzeige wird angezeigt - aus dem Bericht heraus
3. Nach dem der Parameter eingetragen wurden, sollen diese an den Server gesendet werden.
4. Der Server erstellt den Bericht und sendet eine PDF an den Client

Leider hapert es aber an den Kaskadierenden Parametern und dass ich nicht steuern kann, wenn der Benutzer seine Parametereingabe abgeschlossen hat.

Geht das oder gibt es ein besseres, performanteres Szenario, was man abbilden kann? Konnte schon jemand eine Crystal Reports Server "Alternative" erstellen und könnte mir mit ein paar Tipps aushelfen?
31.03.2013
MyKey0815 1,6k 2 9
1
Kann Dir nichts zu CR sagen. Aber wir verwenden für diese Dinge Telerik Reporting Tools. Dort gibt es einen Viewer für WPF/Silverlight/ASP.NET, den man im Client anbindet. Das Viewer Control greift dann auf die Telerik Reporting Komponente per WCF auf dem Server zu. Parameiter kann man bei jeder Abfrage mit übergeben.
judgy 02.04.2013
2 Antworten
2
Hallo, kommt darauf an in welchem Umfeld du das erreichen willst. Ich hatte ein ähnliches Problem, wollte aber nicht auf CR setzten. Ich nahm einen SQL-Server 2012 installierte die Reporting Services und hatte schon mal eine skalierbare Basis, diese kommuniziert dann mit weiteren SQL-Server (natürlich per SPs) die die Daten halten und hergeben. Wenn man will, kann man Berichte Zeitgesteuert versenden, vorher rendern lassen, und Zentral an einer Stelle Designen.
Einziger Nachteil: Du brauchst am Client den Report-Viewer, was aber bei MS-Umgebungen kein Problem darstellen sollte, will man das aber nicht, kann man sich PDFs erzeugen.
Wenn du jedoch umfangreiche (interaktive) Berichte erzeugen willst, empfiehlt sich die Darstellung über den Report-Viewer, und schon hat man eine Lösung für alle Zweigstellen und Filialen.

//-- Hier ein kleines Beispiel mit Parameterübergabe an den Berichtserver, 
//-- Rückgabe des PDF als Array und dieses z.B. mit einem PDF-Viewer zu öffnen
public byte[] ViewPDF(string BerichtServerURL) {
byte[] PDF = null;

ReportViewer tmpRepViewer = new ReportViewer();
List<ReportParameter> Parameterliste = new List<ReportParameter>();
Parameterliste.Add(new ReportParameter("AuftragsNr", AuftragItem.AuftragsNr.ToString()));
Parameterliste.Add(new ReportParameter("LieferantID", Lieferant.LieferantID.ToString()));

try {
//-- Eventuell Credentials einbauen
tmpRepViewer.ProcessingMode = ProcessingMode.Remote;
tmpRepViewer.ServerReport.ReportServerUrl = new Uri(BerichtServerURL);
tmpRepViewer.ServerReport.ReportPath = "/SubVerzeichnis/Formularname";
tmpRepViewer.ServerReport.ReportServerCredentials.ImpersonationUser = System.Security.Principal.WindowsIdentity.GetCurrent();
tmpRepViewer.ServerReport.SetParameters(Parameterliste);
//tmpRepViewer.RefreshReport();

//Reports als PDF
PDF = tmpRepViewer.ServerReport.Render("PDF");
//string targetFile = @"D:\TestReport.pdf";
//FileStream fsReport = new FileStream(targetFile, FileMode.Create, FileAccess.Write, FileShare.None);
//fsReport.Write(PDF, 0, PDF.Length);
//fsReport.Close();
}
catch(Exception err) {
PDF = string.Format("Error beim erstellen der UGLV2: {0}", err.Message.ToString()).Speed_ToByteArray();
}
return(PDF);
}
04.04.2013
MStrasser 342 1 8
Danke - so werden wir es wohl zukünftig machen: Abschied nehmen von CR ;-)
MyKey0815 14.04.2013
1
Bitte. Falls du Probleme mit der Umsetzung hast, führe den Thread einfach weiter.
MStrasser 15.04.2013
1
+1 Die Reporting Services rendern doch HTML-Berichte :-) Der Reportviewer ist also nicht wirklich zwingend notwendig.
mblaess 15.04.2013
0
Bitte. Falls du Probleme mit der Umsetzung hast, führe den Thread einfach weiter.
15.04.2013
MStrasser 342 1 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH