SSRS report definition is newer than Server

三世轮回 提交于 2019-11-27 07:50:44

I actually ran into a similar problem where a change I needed to make resulted in an "Undocumented Error/Invalid RDL Structure" error in 2016, so I edited the RDL file so I could open it in an earlier version and make my changes. Not too hard, but you need to make a couple of tag edits.

For new reports you should probably just use an older version, but for existing reports you can do this: (I reverted to 2008)

Actually wrote some superhackish code to do this as part of a blog post, but the manual edit is simple enough.

The settings below should be set to your sepecific version of SSRS, and then take the RDL from the \bin directory

Or, after updating the TargetServerVersion, simply use right click | deploy from the rdl.

The accepted answer is significantly more difficult/prone to error/unlikely to work across multiple versions of ssrs, and needs to be applied each time you change the rdl.

I recently ran into this issue as well. I found that I only needed to change two items in the .rdl file in question.

  1. Change FROM:

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

    TO:

    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"

Unlike other responses, I needed 2010 instead of 2008. I would check an .rdl file that you have already deployed.

  1. Remove the "ReportParametersLayout" block.

Note: If I removed ReportSections block, it did not work as others have noted.

I ran in to same problem and this is how I solved it,

  1. Set the "TargetServerVersion" property on report project properties to be your old version of reporting server.
  2. Build the project.
  3. Get the report in the bin folder and deploy to the old reporting server.

Your source reports format and namespace will be updated to latest version. But bin folder reports will be build to be compatible with targeted reporting server version.

If you are having trouble in a Visual Studo 2017 C# desktop application with LocalReport (RDLC), please see this answer:

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

I have automated this task.

create a form with a textbox named "TextBoxFile" and a button. In the code of the click button:

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

I had the same issue when switching to VS2017 and installed Report Designer Version 14.2.

For me only 3 steps needed to fix the issue.

1: Set Change the xmlns to "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"

2: Remove ReportSections" and "ReportSection" (Only Tags).

3: Remove report ReportParametersLayout section.

The only thing you need to memorize is to point xmlns to 2008/01

Other 2 steps can be seen in the error message after you change to 2008/01 and try to run the report.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!