Jak wyświetlić zapytanie SQL w swojej aplikacji, na którym oparty jest raport?
Trzeba skorzystać z RAS SDK, gdyż sam Crystal Reports Engine tego nie umożliwia.
Oto kod w C#:
// Declarations
// CrystalDecisions.CrystalReports.Engine.ReportDocument boReportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument boReportClientDocument;
CrystalDecisions.ReportAppServer.Controllers.RowsetController boRowsetController;
CrystalDecisions.ReportAppServer.DataDefModel.ISCRGroupPath boGroupPath = null;
string temp = "";
// Load the report from the application directory
boReportDocument.Load(filename);
// Set database logon
boReportDocument.SetDatabaseLogon(user, password);
// Access the ReportClientDocument in the ReportDocument (EROM bridge)
// Note this is available without a dedicated RAS with SP2 for XI R2
boReportClientDocument = boReportDocument.ReportClientDocument;
CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo rcConnectionInfo = boReportClientDocument.DatabaseController.GetConnectionInfos(null)[0].Clone(true);
CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag rcLogonInfo = (CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag)rcConnectionInfo.Attributes["QE_LogonProperties"];
// use the RowsetController to get the SQL query
// Note: If a report has parameters they must be supplied before getting the
// SQL query.
boRowsetController = boReportClientDocument.RowsetController;
boGroupPath = new CrystalDecisions.ReportAppServer.DataDefModel.GroupPath();
string sql = boRowsetController.GetSQLStatement(boGroupPath, out temp);
Komentarze
Czy w jakiejkolwiek wersji Crystala jest możliwość wyciągnięcia zapytania SQL za pomocą C#, poprawienie tego zapytania i ponowne wrzucenie go do raportu?
Można natomiast w C# pobrać zapytanie filtrujące (select formula record) i je zmienić. Tą metodę można wykorzystać do zmiany filtrowania w locie.
A gdzie można pobrać cscShowSQLQuery.dll, bo z posta, pod który jest podpięta ta biblioteka to nie mogę.
http://goo.gl/KBiFk