レポートにHTMLを表示するMS SQL Server Reporting Services 2008 R2を学ぶ



問題


最近、データベースに保存されたHTMLテーブルをSSRS 2008 R2レポートで表示する必要に遭遇しました。
そして、ここでエキストラは慎重に準備された熊手をステージに持っていきます。 問題は、SSRS 2008 R2のレポートマネージャーは限られた数のHTMLタグのみをサポートし、表タグは含まれていないことです。
公式文書によると、次のタグのみがサポートされています:

CSS属性のリストも大幅に削減されました。

インターネットで長時間検索した結果、開発者コミュニティが提供するオプションがどれも私に合っていないことが明らかになりました。

リサーチ


オプションは次のとおりです。

議論の1つで、クライアントサイドJavascriptというヒントに出会いました。 既製のソリューションはありませんでした。
レポートが表示されたときにクライアント側で実行されるコードを分析することから始めました。 ブラウザーでレポートコードを調べたところ、埋め込みのReportingServices.jsスクリプトが見つかりました。
<script language="JScript" src="/Reports_SQLEXPRESS/js/ReportingServices.js" type="text/Javascript"></script> 

サーバー上のスクリプト自体は次のとおりです。
 c:\Program Files\Microsoft SQL Server\MSRS10_50.SQLEXPRESS\Reporting Services\ReportManager\js\ReportingServices.js 

このスクリプトを使用したJavascriptインジェクションのトピックに関する記事をいくつか見つけましたが、主な問題は、レポートの最初のページが表示され、次のページに切り替えたときにインターフェイス要素が再描画されなかった(AJAX)ときに1回だけ変更が実行されたことでした。
SSRSの原理をより深く理解しようとする試みは、DevExtras CodeReflectを使用したメインサーバーDLLのコードフラグメントの研究とIE9開発者ツール/ Opera Dragonflyでのレポートの準備を続けました。
その結果、次のことがわかりました。
独自のハンドラーを追加するには、JS関数pageLoadを作成する必要があります。これは、Loadイベントが発生したときに自動的に実行されます。
 function pageLoad(sender, args) { //  ,  alert("!"); } 
ReportingServices.jsスクリプトの最初にこの構造を挿入します。 うまくいく!

解決策


実際、パズルはすでに組み立てられており、次の解決策が判明しました。
  1. %SSRS Install Dir%\ Reporting Services \ ReportManager \ js \ ReportingServices.jsスクリプトの先頭に次の関数を追加します。
     function pageLoad() { var toDecode = document.getElementsByTagName("div"); //   DIV for (var i = 0; i < toDecode.length; ++i){ //  if(toDecode[i].innerHTML.indexOf("HTMLInject:") == 0){ // DIV  ? Decoded = toDecode[i].innerText || toDecode[i].textContent; //  IE, Opera, FF toDecode[i].innerHTML = Decoded.slice(11); //   & TXT --> HTML } } } 

  2. ここで、フィールドをHTMLとして表示するには、[値]フィールドのプレースホルダープロパティに次のように記述します。
     ="HTMLInject:"+Fields!FieldName.Value 
    ここで、FieldNameはHTMLを含むデータセット内のフィールドの名前です。


    この場合、フィールド自体のGeneral \ Markup typeプロパティを「 なし-プレーンテキストのみ 」に設定する必要があります。

  3. HTMLスタイルを変更する必要がある場合は、このCSSを変更できます。 %SSRS Install Dir%\ ReportingServices \ ReportManager \ Styles \ ReportingServices.cssただし、幸運なことに、HTMLテーブルはCSSファイルに追加したクラスでフォーマットされました。

今の例


そのため、デフォルトではフィールドが表示されます(「なし-プレーンテキストのみ」):


これは、マークアップタイプが「HTML-HTMLタグをスタイルとして解釈する」に設定されている場合の表の表示方法です。

私のオプション:


そのような決定の賛否


利点:

短所:

結論


したがって、シンプルなデバイスを使用して、SSRSにHTMLの表示を教えることができます...しかし、なぜですか?!
戸惑うものから怒っているものまで、何百もの投稿がこのような些細なことでインターネットを圧倒します。
BIRTでも長い間これを行うことができ、SSRS2012の最新バージョンはまだ利用できません(prooflink: http ://technet.microsoft.com/en-us/library/ff519562.aspx)。
MSは、レポートシステムのセキュリティ/安定性に影響を与えないようにHTML表示を限られた方法で実装したと考えられていますが、すべての代替ソリューションは悪名​​高い「トロリーバス」に似ているようです。

UPD:
HTMLの画像へのレンダリングについて- これに基づいて、カスタムレポートアイテムの開発を試みることができます。

Source: https://habr.com/ru/post/J142597/


All Articles