web-dev-qa-db-ja.com

SSRSレポート定義はサーバーよりも新しい

Visual Studio 2015では、すべての最新の更新を含むいくつかのレポートを作成しました。ただし、レポートを展開しようとすると、次のメッセージが表示されます。

このレポートの定義は、このバージョンのReporting Servicesでは無効であるか、サポートされていません。
11:40:28エラー
レポート定義は、Reporting Servicesの新しいバージョンで作成されているか、そうでないコンテンツを含んでいる可能性があります
11:40:28エラー
整形式またはReporting Servicesスキーマに基づいて無効。詳細:レポート定義に無効なターゲットがあります
11:40:28エラー
名前空間 ' http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition 'これはアップグレードできません。

.rdlファイルの最初の行は次のように設定されます。

<?xml version="1.0" encoding="utf-8"?>
<Report MustUnderstand="df" 
xmlns="http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition" 
xmlns:rd="http://schemas.Microsoft.com/SQLServer/reporting/reportdesigner" 
xmlns:df="http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition/defaultfontfamily">

スキーマ定義を変更できますか?もしそうなら、何に? 2016年を2014年または2012年に変更しようとしましたが、どちらも機能しませんでした。

有効な定義を見に行くことができる場所はありますか?

22
M Kenyon II

実際に2016年に行う必要のある変更により「ドキュメントに記載されていないエラー/無効なRDL構造」エラーが発生する同様の問題が発生したため、RDLファイルを編集して以前のバージョンで開いて変更を加えました。それほど難しくはありませんが、タグをいくつか編集する必要があります。

新しいレポートの場合はおそらく古いバージョンを使用する必要がありますが、既存のレポートの場合はこれを実行できます:(2008年に戻しました)

  • レポートタグを変更します。
  • 「ReportParametersLayout」ブロック全体を削除します。
  • 「df」タグとそのコンテンツを削除します。
  • 「コンテンツではなく」開始タグと終了タグの「ReportSections」と「ReportSection」を削除します。

実際にブログ投稿の一部としてこれを行うためのいくつかの超ハック的なコードを作成しましたが、手動での編集は非常に簡単です。

51
bitnine

以下の設定をSSRSの特定のバージョンに設定してから、RDL from\binディレクトリを取得する必要があります

または、TargetServerVersionを更新した後、単にright click | deploy rdlから。

受け入れられた答えは、ssrsの複数のバージョン間で動作する可能性が非常に難しく/エラーが発生しやすいため、rdlを変更するたびに適用する必要があります。

enter image description here

23
Trubs

私も最近この問題に遭遇しました。問題の.rdlファイル内の2つの項目を変更するだけでよいことがわかりました。

  1. から変更する:

    レポートxmlns = "http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd = "http://schemas.Microsoft.com/SQLServer/reporting/reportdesigner"

    に:

    レポートxmlns:rd = "http://schemas.Microsoft.com/SQLServer/reporting/reportdesigner" xmlns:cl = "http://schemas.Microsoft.com/sqlserver/reporting/2010/01/componentdefinition" xmlns = " http://schemas.Microsoft.com/sqlserver/reporting/2010/01/reportdefinition "

他の応答とは異なり、2008年ではなく2010年が必要でした。既に展開した.rdlファイルを確認します。

  1. 「ReportParametersLayout」ブロックを削除します。

注:ReportSectionsブロックを削除した場合、他の人が指摘したように機能しませんでした。

5
Drew Hansen

私は同じ問題に出くわし、これが私がそれを解決した方法です、

  1. レポートプロジェクトプロパティの "TargetServerVersion"プロパティを、古いバージョンのレポートサーバーに設定します。
  2. プロジェクトをビルドします。
  3. Binフォルダーでレポートを取得し、古いレポートサーバーに展開します。

ソースレポートの形式と名前空間は最新バージョンに更新されます。ただし、binフォルダレポートは、対象のレポートサーバーバージョンと互換性があるようにビルドされます。

4
Amila Pradeep

LocalReport(RDLC)を使用したVisual Studo 2017 C#デスクトップアプリケーションで問題が発生した場合は、次の回答を参照してください。

https://stackoverflow.com/a/45149488/6732525

4
Bruno Leitão

このタスクを自動化しました。

「TextBoxFile」という名前のテキストボックスとボタンを持つフォームを作成します。クリックボタンのコード:

    Dim xmlDoc As New XmlDocument()
    xmlDoc.Load(TextBoxFile.Text)
    Dim root = xmlDoc.DocumentElement 

    For Each elel As XmlNode In root.ChildNodes
        Debug.WriteLine(elel.Name & " " & elel.NodeType)
    Next

    If root.Attributes()("xmlns").Value <> "http://schemas.Microsoft.com/sqlserver/reporting/2008/01/reportdefinition" Then
        root.Attributes()("xmlns").Value = "http://schemas.Microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
    End If

    Dim nsmgr = New XmlNamespaceManager(xmlDoc.NameTable)
    nsmgr.AddNamespace("bk", "http://schemas.Microsoft.com/sqlserver/reporting/2008/01/reportdefinition")

    Dim autoRefreshElements = root.GetElementsByTagName("AutoRefresh")
    While autoRefreshElements.Count > 0
        root.RemoveChild(autoRefreshElements(0))
    End While

    Dim ReportParametersLayout = root.GetElementsByTagName("ReportParametersLayout")
    While ReportParametersLayout.Count > 0
        root.RemoveChild(ReportParametersLayout(0))
    End While

    Dim ReportSections = root.GetElementsByTagName("ReportSections")

    If ReportSections.Count > 0 Then
        ' Move content of ReportSections just below the block.
        Dim ReportSection = ReportSections(0).ChildNodes()

        ' First, copy the elements after
        Dim precedent = ReportSections(0)
        For Each child As XmlNode In ReportSection(0).ChildNodes
            Dim clone = child.Clone
            root.InsertAfter(clone, precedent)
            precedent = clone
        Next

        ' After deleting the existing block
        While ReportSections.Count > 0
            root.RemoveChild(ReportSections(0))
        End While
    End If

    xmlDoc.Save(TextBoxFile.Text) 

    MsgBox("Ok")
1
Gaëtan Wauthy

VS2017に切り替えてReport Designerバージョン14.2をインストールしたときに同じ問題が発生しました。

私にとっては、この問題を解決するのに必要なのは3つの手順だけです。

1:xmlnsを「 http://schemas.Microsoft.com/sqlserver/reporting/2008/01/reportdefinition 」に変更します。

2:ReportSections "および" ReportSection "(タグのみ)を削除します。

3:レポートReportParametersLayoutセクションを削除します。

覚えておく必要があるのは、xmlnsを2008/01に向けることだけです

2008/01に変更してレポートを実行しようとすると、他の2つのステップがエラーメッセージに表示されます。

1
S Nash