web-dev-qa-db-fra.com

La définition de rapport SSRS est plus récente que Server

J'ai créé des rapports dans Visual Studio 2015 avec toutes les dernières mises à jour. Cependant, lorsque j'essaie de déployer les rapports, je reçois le message suivant:

La définition de ce rapport n'est pas valide ni prise en charge par cette version de Reporting Services.
11:40:28 Erreur
La définition de rapport peut avoir été créée avec une version ultérieure de Reporting Services ou contenir un contenu qui n'est pas
11:40:28 Erreur
bien formé ou non valide selon les schémas de Reporting Services. Détails: la définition du rapport a une cible non valide.
11:40:28 Erreur
namespace ' http://schemas.Microsoft.com/sqlserver/reporting/2016/01/reportdefinition ' qui ne peut pas être mis à niveau.

Les premières lignes du fichier .rdl sont configurées comme suit:

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

Puis-je changer la définition du schéma? Si oui, à quoi? J'ai essayé de changer simplement 2016 à 2014 ou 2012, mais ni l'un ni l'autre n'a fonctionné. 

Y a-t-il un endroit où je peux voir les définitions valides?

17
M Kenyon II

En fait, j'ai rencontré un problème similaire dans lequel une modification que je devais apporter entraînait l'erreur "Erreur non documentée/Structure RDL non valide" en 2016. J'ai donc modifié le fichier RDL afin de pouvoir l'ouvrir dans une version antérieure et apporter mes modifications. Pas trop difficile, mais vous devez apporter quelques modifications au tag.

Pour les nouveaux rapports, vous devriez probablement utiliser une version plus ancienne, mais pour les rapports existants, vous pouvez le faire: (Je suis revenu à 2008)

  • Modifiez l’étiquette de rapport:
  • Supprimez le bloc "ReportParametersLayout" complet.
  • Supprimez la balise "df" et son contenu.
  • Supprimez les balises d'ouverture et de fermeture "ReportSections" et "ReportSection" (pas le contenu).

En fait, a écrit du code super-hackish pour le faire dans le cadre d'un article de blog, mais l'édition manuelle est assez simple.

38
bitnine

Les paramètres ci-dessous doivent être définis sur votre version spécifique de SSRS, puis sélectionnez le fichier RDL dans le répertoire\bin

Ou, après avoir mis à jour TargetServerVersion, utilisez simplement right click | deploy à partir du rdl.

La réponse acceptée est nettement plus difficile/sujette aux erreurs/ne fonctionnera probablement pas avec plusieurs versions de ssrs et doit être appliquée chaque fois que vous modifiez le rdl.

 enter image description here

19
Trubs

J'ai rencontré le même problème et voici comment je l'ai résolu,

  1. Définissez la propriété "TargetServerVersion" sur les propriétés du projet de rapport comme étant votre ancienne version du serveur de rapports.
  2. Construisez le projet.
  3. Récupérez le rapport dans le dossier bin et déployez-le sur l'ancien serveur de rapports.

Le format de vos rapports source et votre espace de noms seront mis à jour vers la dernière version. Mais les rapports de dossiers bin seront créés pour être compatibles avec la version du serveur de rapports ciblée.

4
Amila Pradeep

J'ai récemment rencontré ce problème aussi. J'ai constaté qu'il me suffisait de modifier deux éléments du fichier .rdl en question.

  1. Changer de:

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

    À:

    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 "

Contrairement à d'autres réponses, j'avais besoin de 2010 au lieu de 2008. Je vérifierais un fichier .rdl que vous avez déjà déployé.

  1. Supprimez le bloc "ReportParametersLayout". 

Remarque: Si j'ai supprimé le bloc ReportSections, il ne fonctionnait pas comme d'autres l'ont noté.

4
Drew Hansen

J'ai automatisé cette tâche.

créez un formulaire avec une zone de texte nommée "TextBoxFile" et un bouton . Dans le code du bouton de clic:

    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

J'ai eu le même problème lors du passage à VS2017 et j'ai installé Report Designer version 14.2.

Pour moi, il ne reste que 3 étapes pour résoudre le problème.

1: Définissez Changer la xmlns en " http://schemas.Microsoft.com/sqlserver/reporting/2008/01/reportdefinition "

2: Supprimer ReportSections "et" ReportSection "(balises uniquement).

3: Supprimez la section rapport ReportParametersLayout.

La seule chose que vous devez mémoriser est de pointer XMLNS vers 2008/01.

Le message d'erreur contient deux autres étapes après le passage à 2008/01 et l'exécution du rapport.

0
S Nash