Вопрос

У меня есть проект по обновлению всех отчетов в экземпляре SSRS, и я подумал, что я получу список всех отчетов в Excel, чтобы я мог пометить их галочкой при обновлении каждого из них. Спокойно подумал я. Я не использую это часто (вообще), но XML, казалось, поддается этому. Я хотел бы что-то вроде:

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

Таблица каталогов была моим источником данных, она имела ItemID и ParentID, поэтому я могу идентифицировать объекты и их иерархию, но не могу получить полный сервер в форме XML, я могу получить содержимое одной папки, если я укажу папку (имя или ItemID), но не весь сервер. Когда я вынимаю строку WHERE ItemID = 1234, я получаю что-то вроде:

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

Я попробовал XML AUTO, XML EXPLICIT и теперь чувствую, что моя разъединенность с XML оправдана!

Есть ли способ получить полную (до 4 уровней) иерархию в форме XML?

Это что-то, что не имеет отношения к XML, и я ошибочно превратился в тупик?

Это было полезно?

Решение

Итак, хорошие новости и плохие новости. Вот хорошие новости.

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)   

Создает иерархию, подобную этой:

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

Плохая новость в том, что я не уверен, что вы можете сделать это без добавления " ReportTree " функция в вашем ReportServer. Таким образом, это зависит от вашего доступа к этому серверу. Возможно, вы сможете заставить функцию работать с базами данных, я не пробовал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top