Przeprowadziłem migrację naszych usług raportowania z wersji 2008 do innej wersji serwera 2008 R2. W wersji 2008 raporty działają poprawnie w przeglądarce Safari. W nowej wersji 2008 R2 raporty w ogóle się nie pojawiają. Widzę tylko sekcję parametrów, a raport jest pusty. To samo w Chrome. Według Microsoft Safari jest obsługiwany, jeśli jest ograniczony. Raporty nie są skomplikowane. W rzeczywistości utworzyłem raport, który zawierał tylko wiersz, aby sprawdzić, czy pojawi się w Safari, ale nie, ten raport jest również całkowicie pusty. Czy ktoś udostępnił raporty SSRS w przeglądarce Safari? Czy muszę majstrować przy jakimś ustawieniu konfiguracyjnym?
84
Odpowiedzi:
Ostateczne rozwiązanie (działa również w SSRS 2012!)
Dołącz następujący skrypt do następującego pliku (na serwerze SSRS)
C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js
function pageLoad() { var element = document.getElementById("ctl31_ctl10"); if (element) { element.style.overflow = "visible"; } }
Uwaga : jak zauważył Azzlak, nazwa div nie zawsze
ctl31_ctl10
. W przypadku SQL 2012 wypróbuj,ctl32_ctl09
aw przypadku 2008 R2 wypróbujctl31_ctl09
. Jeśli to rozwiązanie nie działa, spójrz na kod HTML w przeglądarce, aby sprawdzić, czy skrypt działał poprawnie, zmieniającoverflow:auto
właściwość naoverflow:visible
.Rozwiązanie dla kontroli ReportViewer
Wstaw na
.aspx
stronę (lub do połączonego.css
pliku, jeśli jest dostępny) tę linię stylu#reportViewer_ctl09 { overflow:visible !important; }
Powód
Chrome i Safari renderują się
overflow:auto
inaczej niż IE.Strona HTML generowana przez raporty SSRS 2008 R2 zawiera,
div
który maoverflow:auto
styl i zamienia raport w niewidoczny raport.<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
Widzę raporty dotyczące Chrome ręcznie zmienić
overflow:auto
sięoverflow:visible
w wytworzonym za pomocą strony internetowej Chrome Dev Tools ( F12).Uwielbiam rozwiązanie Tima , jest łatwe i działa.
Ale nadal jest problem: za każdym razem, gdy użytkownik zmienia parametry (moje raporty używają parametrów!) AJAX odświeża div, przepełnienie: auto tag jest przepisywane i żaden skrypt go nie zmienia.
Ten szczegół techniczny wyjaśnia, na czym polega problem:
Użytkownik einarq zasugerował takie rozwiązanie :
Tak napisał ulepszony skrypt, który jest pokazany w rozwiązaniu.
źródło
ctl32_ctl09
.Po prostu dołącz,
SizeToReportContent="true"
jak pokazano poniżejźródło
Używam Chrome w wersji 21 z SQL 2008 R2 SP1 i żadna z powyższych poprawek nie zadziałała. Poniżej znajduje się kod, który zadziałał, podobnie jak w przypadku innych odpowiedzi, które dodałem ten fragment kodu, aby dołączyć do „C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.MSSQLSERVER \ Reporting Services \ ReportManager \ js \ ReportingServices.js” (na serwer SSRS):
źródło
To znany problem . Problem polega na tym, że znacznik DIV ma styl „overflow: auto”, który najwyraźniej nie jest dobrze zaimplementowany w WebKit, używanym przez Safari i Chrome (patrz odpowiedź Emanuele Greco). Nie wiedziałem, jak skorzystać z sugestii Emanuele, aby użyć elementu RS: ReportViewerHost, ale rozwiązałem to za pomocą JavaScript.
Problem
Rozwiązanie
Ponieważ „overflow: auto” jest określony w atrybucie stylu elementu div o identyfikatorze „ctl31_ctl10”, nie możemy go zastąpić w pliku arkusza stylów, więc zdecydowałem się na JavaScript. Dodałem następujący kod do „C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.MSSQLSERVER \ Reporting Services \ ReportManager \ js \ ReportingServices.js”
Uwaga
Wydaje się, że istnieje rozwiązanie dla SSRS 2005 , którego nie próbowałem, ale nie sądzę, aby miało ono zastosowanie do SSRS 2008, ponieważ nie mogę znaleźć klasy „DocMapAndReportFrame”.
źródło
Moje rozwiązanie oparte na powyższych pomysłach.
Nie jest ograniczone do określonego identyfikatora, a ponadto nie musisz dołączać żadnej innej biblioteki, takiej jak jQuery.
źródło
Oto rozwiązanie, którego użyłem dla programu Report Server 2008 R2
Powinien działać niezależnie od tego, co serwer raportów wyprowadzi do użycia w swoim atrybucie „id” tabeli. Myślę, że nie zawsze można założyć, że będzie to „ctl31_fixedTable”
Użyłem kombinacji powyższych sugestii i kilku sposobów na dynamiczne ładowanie bibliotek jquery na stronę z pliku javascript znajdującego się tutaj
Na serwerze przejdź do katalogu: C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.MSSQLSERVER \ Reporting Services \ ReportManager \ js
Skopiuj bibliotekę jquery jquery-1.6.2.min.js do katalogu
Utwórz kopię zapasową pliku ReportingServices.js Edytuj plik. I dołącz to na dole:
źródło
Możesz to łatwo naprawić za pomocą jQuery - i trochę brzydkiego hacka :-)
Mam stronę asp.net z kontrolką użytkownika ReportViewer.
W zdarzeniu gotowości dokumentu uruchamiam licznik czasu i szukam elementu, który wymaga naprawy przepełnienia (jak w poprzednich postach):
Lepsze niż zakładanie, że ma określony identyfikator. Możesz ustawić timer według własnego uznania. Ustawiłem tutaj na 1000 ms.
źródło
Do Twojej wiadomości - żadne z powyższych nie zadziałało dla mnie w 2012 SP1 ... prostym rozwiązaniem było osadzenie poświadczeń w udostępnionym źródle danych, a następnie poinformowanie Safari, aby zaufała witrynie serwera SSRS. Wtedy zadziałało świetnie! Dni szukania rzekomych rozwiązań, takich jak powyżej, tylko po to, aby dowiedzieć się, że zintegrowane zabezpieczenia nie będą działać niezawodnie w Safari - musisz zadzierać z pękiem kluczy na komputerze Mac, a potem nadal nie będzie działać niezawodnie.
źródło
Rozwiązanie dostarczone przez Emanuele sprawdziło się dla mnie. Mogłem zobaczyć raport, gdy uzyskałem do niego dostęp bezpośrednio z serwera, ale kiedy użyłem formantu ReportViewer na mojej stronie aspx, nie mogłem zobaczyć raportu. Po sprawdzeniu renderowanego kodu HTML znalazłem element div o identyfikatorze „ReportViewerGeneral_ctl09” ( ReportViewerGeneral to identyfikator serwera kontrolki przeglądarki raportów), dla którego właściwość przepełnienia została ustawiona na auto.
Użyłem procedury wyjaśnionej przez Emanuele, aby zmienić to na widoczne w następujący sposób:
źródło
Użyłem tego. Dodaj odwołanie do skryptu do jquery na stronie Report.aspx. Użyj poniższego, aby połączyć JQuery ze zdarzeniami Microsoft. Wykorzystałem trochę sugestii Erica do ustawienia przepełnienia.
źródło