سؤال

ولدي مشروع لتحديث جميع التقارير على مثيل 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>

ولقد حاولت AUTO XML جنة التجارة والبيئة، وXML صريحة، وأنا الآن الحصول على ليشعر بلدي تبرؤ حتى الآن مع ما يبرره 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