Question

J'ai un projet de mise à jour de tous les rapports sur une instance SSRS et je pensais obtenir une liste de tous les rapports dans Excel afin que je puisse les cocher au fur et à mesure de la mise à jour de chaque rapport. Facile je pensais. Je ne l'utilise pas souvent (du tout) mais XML semble se prêter à cela. J'aurais quelque chose comme:

<Server>
  <ReportFolder>
    <ReportFolder>
      <Report>
      </Report>
      <Report>
      </Report>
    </ReportFolder>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>
  </ReportFolder>
  <ReportFolder>
  </ReportFolder>
</Server>

La table Catalogue était ma source de données. Elle contient les éléments ItemID et ParentID. Je peux donc identifier les objets et leur hiérarchie, mais je ne peux pas obtenir le serveur complet au format XML. Je peux obtenir le contenu d'un dossier si je spécifie le dossier. (nom ou ItemID) mais pas le serveur entier. Une fois que je retire la ligne WHERE ItemID = 1234, je reçois quelque chose comme:

<Server>
  <ReportFolder>
  </ReportFolder>
  <ReportFolder>
  </ReportFolder>
  <ReportFolder>
  </ReportFolder>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>  
</Server>

J'ai essayé XML AUTO, XML EXPLICIT de CTE et je commence maintenant à sentir que ma dissociation à ce jour avec XML est justifiée!

Existe-t-il un moyen d’obtenir la hiérarchie complète (jusqu’à 4 niveaux) sous forme XML?

S'agit-il de quelque chose qui ne concerne tout simplement pas XML et que j'ai mal tourné dans une impasse?

Était-ce utile?

La solution

Donc, bonnes et mauvaises nouvelles. Voici la bonne nouvelle.

CREATE FUNCTION [dbo].[GetReportTree](@ItemId uniqueidentifier)
RETURNS XML
BEGIN RETURN 
  (SELECT   ca.ItemId AS '@ItemId',
            ca.Name AS '@Name',
            ca.Type AS '@Type',
            dbo.GetReportTree(ca.ItemId)
   FROM dbo.Catalog ca
   WHERE (@ItemId IS NULL AND ParentId IS NULL) OR ParentID=@ItemId
   FOR XML PATH('CatalogItem'), TYPE)
END

SELECT dbo.[GetReportTree](NULL)   

Produit une hiérarchie comme celle-ci:

<CatalogItem Name="" Type="1">
  <CatalogItem Name="ScrumTest" Type="1">
    <CatalogItem Name="(Hidden) Delta Report Small" Type="2" />
    <CatalogItem Name="(Hidden) Product Burndown Chart Small" Type="2" />
    <CatalogItem Name="(Hidden) Product Cumulative Flow Small" Type="2" />
    <CatalogItem Name="(Hidden) Sprint Burndown Chart Small" Type="2" />
    <CatalogItem Name="All Product Backlog Items" Type="2" />
    <CatalogItem Name="All Sprint Backlog Items" Type="2" />
    <CatalogItem Name="All Sprints" Type="2" />
    <CatalogItem Name="Current Sprint Status" Type="2" />
    <CatalogItem Name="Delta Report" Type="2" />
    <CatalogItem Name="Engineering Reports" Type="1">
      <CatalogItem Name="(Hidden) Bug History Chart Small" Type="2" />
      <CatalogItem Name="Bug Count" Type="2" />
      <CatalogItem Name="Bug History Chart" Type="2" />
      <CatalogItem Name="Bug Priority Chart" Type="2" />
    </CatalogItem>
    <CatalogItem Name="Impediment Report" Type="2" />
    <CatalogItem Name="Product Backlog Composition" Type="2" />
    <CatalogItem Name="Product Burndown Chart" Type="2" />
    <CatalogItem Name="Product Cumulative Flow" Type="2" />
    <CatalogItem Name="Retrospective Report" Type="2" />

La mauvaise nouvelle est que je ne suis pas sûr de pouvoir le faire sans ajouter le " ReportTree " fonctionner dans votre ReportServer. Cela dépend donc de votre accès à ce serveur. Vous pourrez peut-être faire en sorte que la fonction fonctionne sur plusieurs bases de données, je n’ai pas essayé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top