J'ai migré nos services de reporting de la version 2008 vers un autre serveur version 2008 R2. Dans la version 2008, les rapports fonctionnent bien sur Safari. Dans la nouvelle version 2008 R2, les rapports ne s'affichent pas du tout. Tout ce que je vois est la section des paramètres et ensuite le rapport est vide. Même chose dans Chrome. Selon Microsoft, Safari EST pris en charge, mais de manière limitée. Les rapports ne sont pas complexes. En fait, j'ai créé un rapport qui ne comportait qu'une ligne pour voir s'il s'afficherait dans Safari, mais non, ce rapport est lui aussi complètement vide. Quelqu'un a-t-il fait en sorte que les rapports SSRS puissent être affichés dans Safari ? Dois-je modifier une sorte de paramètre de configuration ?
Réponses
Trop de publicités?Solution ultime (fonctionne aussi dans SSRS 2012 !)
Ajoutez le script suivant au fichier suivant (sur le serveur 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";
}
}
Note : Comme l'a fait remarquer azzlak, le nom de la div n'est pas toujours ctl31_ctl10
. Pour SQL 2012, essayez ctl32_ctl09
et pour 2008 R2 essayez ctl31_ctl09
. Si cette solution ne fonctionne pas, regardez le HTML à partir de votre navigateur pour voir si le script a fonctionné correctement en changeant l'adresse de l'utilisateur. overflow:auto
à la propriété overflow:visible
.
Solution pour le contrôle ReportViewer
Insérer dans .aspx
(ou dans un lien .css
si disponible) cette ligne de style
#reportViewer_ctl09 {
overflow:visible !important;
}
Raison
Rendu de Chrome et Safari overflow:auto
de manière différente par rapport à l'IE.
Le HTML SSRS est un HTML QuirksMode et dépend des bogues d'IE 5.5. Les navigateurs non IE n'ont pas le quirksmode IE et rendent donc le HTML correctement.
La page HTML produite par les rapports de SSRS 2008 R2 contient un fichier div
qui a overflow:auto
et cela transforme le rapport en un rapport invisible.
<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
Je peux voir les rapports sur Chrome en changeant manuellement overflow:auto
à overflow:visible
dans la page web produite en utilisant les outils de développement de Chrome ( F12 ).
J'aime La solution de Tim c'est facile et ça marche.
Mais il y a toujours un problème : chaque fois que l'utilisateur change les paramètres (mes rapports utilisent des paramètres !) AJAX rafraîchit le div, la fonction débordement:auto est réécrite, et aucun script ne la modifie.
Cette technote détaille explique quel est le problème :
Cela se produit parce que dans une page construite avec des panneaux AJAX, seuls les panneaux AJAX changent leur état, sans rafraîchir la page entière. Par conséquent, les
OnLoad
les événements que vous avez appliqués sur le<body>
ne sont activés qu'une seule fois : au premier chargement de votre page. Après cela, la modification de l'un des panneaux AJAX ne déclenchera plus ces événements.
L'utilisateur einarq a suggéré cette solution :
Une autre option consiste à renommer votre fonction en pageLoad. Toute fonction portant ce nom sera appelée automatiquement par asp.net ajax si elle existe sur la page, également après chaque mise à jour partielle. Si vous faites cela, vous pouvez également supprimer l'attribut onload de la balise body.
J'ai donc écrit le script amélioré qui est montré dans la solution.
J'utilise la version 21 de Chrome avec SQL 2008 R2 SP1 et aucune des corrections ci-dessus n'a fonctionné pour moi. Voici le code qui a fonctionné, comme pour les autres réponses, j'ai ajouté ce bout de code à Append to (Ajouter à). " C:\Program Fichiers \Microsoft SQL Server \MSRS10_50.MSSQLSERVER\Reporting Services \ReportManager\js\ReportingServices.js " (sur le serveur SSRS) :
//Fix to allow Chrome to display SSRS Reports
function pageLoad() {
var element = document.getElementById("ctl31_ctl09");
if (element)
{
element.style.overflow = "visible";
}
}
Il s'agit d'un problème connu . Le problème est qu'une balise div a le style "overflow : auto" qui apparemment n'est pas bien implémenté avec WebKit qui est utilisé par Safari et Chrome (voir la réponse d'Emanuele Greco). Je ne savais pas comment tirer parti de la suggestion d'Emanuele d'utiliser l'élément RS:ReportViewerHost, mais j'ai résolu le problème en utilisant JavaScript.
Problema
Solution
Puisque "overflow : auto" est spécifié dans l'attribut de style de l'élément div avec l'id "ctl31_ctl10", nous ne pouvons pas le remplacer dans un fichier de feuille de style, j'ai donc eu recours à JavaScript. J'ai ajouté le code suivant à " C:\Program Fichiers \Microsoft SQL Server \MSRS10_50.MSSQLSERVER\Reporting Services \ReportManager\js\ReportingServices.js "
function FixSafari()
{
var element = document.getElementById("ctl31_ctl10");
if (element)
{
element.style.overflow = "visible"; //default overflow value
}
}
// Code from http://stackoverflow.com/questions/9434/how-do-i-add-an-additional-window-onload-event-in-javascript
if (window.addEventListener) // W3C standard
{
window.addEventListener('load', FixSafari, false); // NB **not** 'onload'
}
else if (window.attachEvent) // Microsoft
{
window.attachEvent('onload', FixSafari);
}
Note
Il semble qu'il y ait un solution pour SSRS 2005 que je n'ai pas essayé mais je ne pense pas qu'il soit applicable à SSRS 2008 car je ne trouve pas la classe "DocMapAndReportFrame".
Voici la solution que j'ai utilisée pour Report Server 2008 R2
Cela devrait fonctionner indépendamment de ce que le serveur de rapports produira pour l'utilisation dans son attribut "id" de la table. Je ne pense pas que vous puissiez toujours supposer que ce sera "ctl31_fixedTable".
J'ai utilisé un mélange de la suggestion ci-dessus et des moyens de charger dynamiquement les bibliothèques jquery dans une page à partir d'un fichier javascript trouvé. aquí
Sur le serveur, allez dans le répertoire : C:\Program Fichiers \Microsoft SQL Server \MSRS10_50.MSSQLSERVER\Reporting Services \ReportManager\js
Copiez la bibliothèque jquery jquery-1.6.2.min.js dans le répertoire
Créez une copie de sauvegarde du fichier ReportingServices.js. Modifiez le fichier. Et ajoutez ceci au bas du fichier :
var jQueryScriptOutputted = false;
function initJQuery() {
//if the jQuery object isn't available
if (typeof(jQuery) == 'undefined') {
if (! jQueryScriptOutputted) {
//only output the script once..
jQueryScriptOutputted = true;
//output the script
document.write("<scr" + "ipt type=\"text/javascript\" src=\"../js/jquery-1.6.2.min.js\"></scr" + "ipt>");
}
setTimeout("initJQuery()", 50);
} else {
$(function() {
// Bug-fix on Chrome and Safari etc (webkit)
if ($.browser.webkit) {
// Start timer to make sure overflow is set to visible
setInterval(function () {
var div = $('table[id*=_fixedTable] > tbody > tr:last > td:last > div')
div.css('overflow', 'visible');
}, 1000);
}
});
}
}
initJQuery();