从文件夹和子文件夹中读取所有组件

1 tridion tridion2009

我正在使用.NET Templating C#2.0开发Tridon 2009

我需要从文件夹及其子文件夹中读取所有组件.

如果在我的代码中我写道:

OrganizationalItem imageFolder = 
    (OrganizationalItem)m_Engine.GetObject(comp.OrganizationalItem.Id);  
Run Code Online (Sandbox Code Playgroud)

我能够从指示器组件所在的位置读取子文件夹中的所有组件,但是我无法读取存在指示符的文件夹中存在的其他组件.

但如果我写

OrganizationalItem imageFolder = (OrganizationalItem)m_Engine.GetObject(
                                comp.OrganizationalItem.OrganizationalItem.Id);  
Run Code Online (Sandbox Code Playgroud)

然后我只能读取指示器组件所在的文件夹.

以下是我的代码.

XmlDocument doc = xBase.createNewXmlDocRoot("ImageLibrary");
XmlElement root = doc.DocumentElement;


Filter filter = new Filter();
Component comp = this.GetComponent();

filter.Conditions["ItemType"] = ItemType.Folder;
filter.Conditions["Recursive"] = "true";

OrganizationalItem imageFolder = 
       (OrganizationalItem)m_Engine.GetObject(comp.OrganizationalItem.Id);            
XmlElement itemList = imageFolder.GetListItems(filter);

foreach (XmlElement itemImg in itemList)
{
    filter.Conditions["ItemType"] = ItemType.Component;
    filter.Conditions["BasedOnSchema"] = comp.Schema.Id;

    OrganizationalItem imgFolder = 
       (OrganizationalItem)m_Engine.GetObject(itemImg.GetAttribute("ID")
       .ToString());
    XmlElement imageLibs = imgFolder.GetListItems(filter);

    doc = this.createImageNodes(imageLibs, doc, filter, comp);
    foreach (XmlElement imglib in imageLibsList)
    {
        XmlElement imageroot = doc.CreateElement("Image");
        XmlElement uploadeddateNode = doc.CreateElement("DateUploaded");
        Component imgComp =    
                (Component)m_Engine.GetObject(imglib.GetAttribute("ID"));
    }
}
Run Code Online (Sandbox Code Playgroud)

请建议.

Pun*_*ero 6

我在你的代码片段中看到了很多关于"从文件夹和子文件夹中读取所有组件"这一问题的多余代码

但是在你做的时候回答问题本身:

OrganizationalItem imageFolder = (OrganizationalItem)m_Engine.GetObject(comp.OrganizationalItem.Id);
Run Code Online (Sandbox Code Playgroud)

您无法读取该文件夹上的组件,因为您之前已将过滤器设置为仅在以下行中的文件夹:

filter.Conditions["ItemType"] = ItemType.Folder;
Run Code Online (Sandbox Code Playgroud)

解:

如果要检索"指标组件"文件夹及其下方的所有组件,则需要在第一次搜索时设置过滤器,如下所示:

filter.Conditions["Recursive"] = "true";
filter.Conditions["ItemType"] = ItemType.Component;
filter.Conditions["BasedOnSchema"] = comp.Schema.Id;
Run Code Online (Sandbox Code Playgroud)

并执行搜索:

OrganizationalItem imageFolder = (OrganizationalItem)m_Engine.GetObject(comp.OrganizationalItem.Id);            
XmlElement itemList = imageFolder.GetListItems(filter);
Run Code Online (Sandbox Code Playgroud)