Przejdź do głównej zawartości

Show SQL Query

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

Anonimowy pisze…
Witam.
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?
Marcin pisze…
Próbowałem coś takiego kiedyś zrobić przy okazji pisania biblioteki cscShowSQLQuery.dll, ale nie znalazłem takiej możliwości.
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.
Anonimowy pisze…
WOW Jaka szybka odpowiedź :)
A gdzie można pobrać cscShowSQLQuery.dll, bo z posta, pod który jest podpięta ta biblioteka to nie mogę.
Marcin pisze…
Tymczasowo tutaj:
http://goo.gl/KBiFk
Anonimowy pisze…
Wielkie dzięki :)
Anonimowy pisze…
Jeszcze jakbyś mi napisał, gdzie ikonka z tym dodatkiem powinna się pojawić to by było super :) Mam Crystala 11R2
Marcin pisze…
Możliwość podczepiania add-in dodano dopiero w wersji CR 2008.
Unknown pisze…
Super tego właśnie szukałem

Popularne posty z tego bloga

Konwersja daty w CDN Optima

Crystal Reports jest bardzo często zintegrowany z popularnymi aplikacjami. Przykładem jest system CDN Optima . Początkujących użytkownikom sprawiają kolumny z datą, bo data nie jest zapisana jako datetime lecz jako liczba. Otóż data w CDN Optima zapisana jest w formacie Clarion, czyli liczba dni, które upłynęły od daty 1800-12-28 . (Czy ktoś wie co to za data w historii?) Dlatego jeśli chcemy użyć takiego pola na raporcie, pierwsze co powinniśmy zrobić to dokonać konwersji liczby na datę. W innym przypadku Crystal Reports nie będzie wiedział, że jest to data i żadne formatowanie dat, grupowanie po okresach nie będzie działać. Formuła do konwersji formatu Clarion na datę : Jeśli mamy wiele takich pól to najlepiej utworzyć własną funkcję:

Funkcje Crystal Reports

Crystal Reports posiada bardzo dużo funkcji (ok. 200) do operacji na tekstach, liczbach, datach itd. Można się z nimi zapoznać przeglądając drzewo Funkcje (Functions) w Edytorze Formuł (Formula Editor) i czytając helpa. Warto je znać, aby nie wyważać otwartych drzwi.  Problem w tym, że trzeba wiedzieć czego się szuka.   Dla wielu osób dodatkową barierą może być język angielski, bo nawet w polskiej wersji Crystala, help, o przepraszam.... pomoc jest w języku Szekspira. Dlatego stworzyłem niegdyś listę funkcji Crystal Reports w języku polskim, którą otrzymywali uczestnicy moich szkoleń w formacie PDF.  Teraz postanowiłem  opublikować ją w sieci, aby była zawsze była pod ręką i dostępna dla szerszego grona.  Lista funkcja dostępna jest tutaj . Lista funkcji nie jest jeszcze w pełni kompletna, więc będę ją na bieżąco aktualizować. Czekam na wasze komentarze i uwagi, zwłaszcza propozycje lepszych tłumaczeń. Miłego korzystania!

Zamiana daty i czasu na data-czas

Kolejne szkolenie u klienta i kolejne wyzwanie za mną... Chodziło o wygenerowanie raportu czasu pracy z uwzględnieniem, że zmiana następuje o godz. 6:00 a nie o północy. To znaczy, że godziny do 6:00 powinny być jeszcze zaliczane do dnia poprzedniego. Dodatkowym utrudnieniem u klienta był fakt, że data w bazie danych była rozbita na 2 pola: data w formacie: yyyy-mm-dd 00:00:00 godzina w formacie: 1900-01-01 HH:mm W takim razie do dzieła! Załóżmy, że mamy następującą tabelę: 1. Tworzymy formułę która zamieni 2 osobne pola z datą i czasem w jedno pole typu datetime: W ten sposób otrzymamy jedną wartość w formacie yyyy-mm-dd HH:mm 2. Następnie od tak utworzonej daty odejmujemy 6 godzin: Otrzymamy w rezultacie coś takiego: Kolumna WorkDate wyświetla datę do której została zakwalifikowana pozycja. Na podstawie tak utworzonej formuły można utworzyć grupowanie na raporcie.