Pregunta

Tengo un proyecto para actualizar todos los informes en una instancia de SSRS y pensé que obtendría una lista de todos los informes en Excel para poder marcarlos a medida que actualizo cada uno. Fácil, pensé. No lo uso a menudo (en absoluto), pero XML parece prestarse a esto. Tendría algo como:

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

La tabla del Catálogo fue mi fuente de datos, tiene ItemID y ParentID para poder identificar objetos y su jerarquía pero no puedo obtener el servidor completo en formato XML, puedo obtener el contenido de una carpeta, si especifico la carpeta (nombre o ItemID) pero no todo el servidor. Una vez que saque la línea WHERE ItemID = 1234, obtengo algo como:

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

¡He probado XML AUTO, XML EXPLICIT de CTE y ahora siento que mi disociación hasta ahora con XML está justificada!

¿Hay alguna forma de obtener la jerarquía completa (hasta 4 niveles) en formato XML?

¿Es esto algo que no es relevante para XML y he tomado un giro equivocado en un callejón sin salida?

¿Fue útil?

Solución

Entonces, buenas y malas noticias. Aquí están las buenas noticias.

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)   

Produce una jerarquía como esta:

<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 mala noticia es que no estoy seguro de si puede hacerlo sin agregar el " ReportTree " funcionar en su ReportServer. Por lo tanto, depende de su acceso a ese servidor. Es posible que pueda hacer que la función funcione en bases de datos, no lo intenté.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top