我正在使用.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)
请建议.
我在你的代码片段中看到了很多关于"从文件夹和子文件夹中读取所有组件"这一问题的多余代码
但是在你做的时候回答问题本身:
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)
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |