it-swarm.com.de

Die Definition des SSRS-Berichts ist neuer als der Server

Ich habe in Visual Studio 2015 einige Berichte mit den neuesten Updates erstellt. Wenn ich jedoch versuche, die Berichte bereitzustellen, erhalte ich folgende Meldung:

Die Definition dieses Berichts ist nicht gültig oder wird von dieser Version von Reporting Services unterstützt.
11:40:28 Fehler
Die Berichtsdefinition wurde möglicherweise mit einer späteren Version von Reporting Services erstellt oder enthält Inhalt, der nicht der Fall ist
11:40:28 Fehler
Formuliert oder ungültig, basierend auf Reporting Services-Schemas. Details: Die Berichtsdefinition hat ein ungültiges Ziel
11:40:28 Fehler
Namespace ' http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition ' kann nicht aktualisiert werden.

Die ersten Zeilen der RDL-Datei sind wie folgt eingerichtet:

<?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">

Kann ich die Schemadefinition ändern? Wenn ja, zu was? Ich habe gerade versucht, 2016 auf 2014 oder 2012 zu ändern, aber es hat nicht funktioniert. 

Gibt es einen Ort, an dem ich gültige Definitionen sehen kann?

17
M Kenyon II

Ich hatte tatsächlich ein ähnliches Problem, bei dem eine Änderung, die ich vornehmen musste, 2016 zu einem Fehler "Undokumentierter Fehler/Ungültige RDL-Struktur" führte. Daher habe ich die RDL-Datei bearbeitet, sodass ich sie in einer früheren Version öffnen und meine Änderungen vornehmen konnte. Nicht zu schwer, aber Sie müssen einige Tag-Änderungen vornehmen.

Für neue Berichte sollten Sie wahrscheinlich nur eine ältere Version verwenden. Für vorhandene Berichte können Sie Folgendes tun: (Ich habe auf 2008 zurückgesetzt)

  • Ändern Sie das Report-Tag:
  • Löschen Sie den gesamten Block "ReportParametersLayout".
  • Löschen Sie das "df" -Tag und seinen Inhalt.
  • Löschen Sie die öffnenden und schließenden Tags "ReportSections" und "ReportSection" (nicht den Inhalt).

Tatsächlich hat er einen superhackigen Code geschrieben, um dies als Teil eines Blogbeitrags zu tun, aber die manuelle Bearbeitung ist einfach genug.

38
bitnine

Die folgenden Einstellungen sollten auf Ihre spezifische Version von SSRS festgelegt werden. Nehmen Sie dann die RDL aus dem Verzeichnis\bin 

Oder verwenden Sie nach dem Aktualisieren der TargetServerVersion einfach right click | deploy aus dem rdl.

Die akzeptierte Antwort ist wesentlich schwieriger/fehleranfälliger/es ist unwahrscheinlich, dass sie in mehreren Versionen von ssrs funktioniert. Sie muss jedes Mal angewendet werden, wenn Sie das rdl ändern.

 enter image description here

19
Trubs

Ich bin auf dasselbe Problem gestoßen und so habe ich es gelöst,

  1. Legen Sie die Eigenschaft "TargetServerVersion" in den Berichtsprojekteigenschaften als Ihre alte Version des Berichtsservers fest.
  2. Bauen Sie das Projekt auf.
  3. Rufen Sie den Bericht im Ordner bin ab und stellen Sie ihn auf dem alten Berichtsserver bereit.

Das Quellberichtsformat und der Namespace werden auf die neueste Version aktualisiert. Es werden jedoch Ordnerberichte erstellt, die mit der Version des Zielberichtservers kompatibel sind.

4
Amila Pradeep

Ich bin kürzlich auch auf dieses Thema gestoßen. Ich fand, dass ich nur zwei Elemente in der fraglichen RDL-Datei ändern musste.

  1. Wechsel von:

    Bericht xmlns = "http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns: rd = "http://schemas.Microsoft.com/SQLServer/reporting/reportdesigner"

    ZU:

    Report 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 "

Im Gegensatz zu anderen Antworten benötigte ich 2010 anstelle von 2008. Ich würde eine .rdl-Datei überprüfen, die Sie bereits bereitgestellt haben.

  1. Entfernen Sie den Block "ReportParametersLayout". 

Hinweis: Wenn ich den Block ReportSections entfernt habe, funktionierte er nicht, wie von anderen bemerkt.

4
Drew Hansen

Wenn Sie Probleme mit einer Visual Studo 2017 C # -Desktopanwendung mit LocalReport (RDLC) haben, lesen Sie bitte die folgende Antwort:

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

4
Bruno Leitão

Ich habe diese Aufgabe automatisiert.

erstellen Sie ein Formular mit einem Textfeld mit der Bezeichnung "TextBoxFile" und einer Schaltfläche .

    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

Ich hatte das gleiche Problem, als ich zu VS2017 wechselte und Report Designer Version 14.2 installierte.

Für mich waren nur 3 Schritte erforderlich, um das Problem zu beheben.

1: Ändern Sie die Variable xmlns in " http://schemas.Microsoft.com/sqlserver/reporting/2008/01/reportdefinition "

2: Entfernen Sie ReportSections "und" ReportSection "(nur Tags).

3: Entfernen Sie den Bericht ReportParametersLayout-Abschnitt.

Das einzige, was Sie sich merken müssen, ist, xmlns auf 2008/01 zu verweisen

Weitere zwei Schritte sind in der Fehlermeldung zu sehen, nachdem Sie zu 2008/01 gewechselt und versucht haben, den Bericht auszuführen.

0
S Nash