2012-07-12 99 views
-8

我有文件夹下的组件。循环浏览文件夹级别

需要遵循什么代码/代码语法来循环访问具有组件的文件夹,以便我可以从不同的组件获取值。

任何人都可以帮助我。

我用下面的代码

不working.Please
**Folder compFilter= new Filter(); 
Folder folder=engine.GetObject(webdavurl) as Folder; 
foreach(Component comp in folder.GetItems(CompFilter))** 

它提出了一些解决方案。

+1

请指定Tridion的版本以及脚本或模板中的代码以及模板中的模板语言。 – robrtc 2012-07-12 16:01:13

+1

编写C#代码。版本2011 – user1518281 2012-07-12 16:04:37

+3

代码示例的第一行包含一个问题。 compFilter对象不是类型文件夹 这里的C#示例http://www.tridiondeveloper.com/search-engine-sitemap-xml-generation-using-sdl-tridion显示了如何遍历结构和页面,只需转换对于文件夹和组件 – johnwinter 2012-07-12 16:10:46

回答

5

的逻辑如下:

  1. 创建一个过滤器,指定你感兴趣的项目类型是组件
  2. 获取项目或从文件夹中获取列表项,取决于你所需要的信息。如果您只需要标题和ID,则获取列表会更快(返回XML)。如果您需要项目中的其他属性,则使用Get Items返回对象。

如前所述,如果你让我们知道哪些API,您可以得到一个代码示例。以上逻辑适用于任何API。

[更新]

请不要使用Filter,这个类在2011年被外表套上不赞成赞成StronglyTypedFilter“家庭”来代替。

Session session = engine.GetSession(); 
string folderUrl = "/my/long/webdav"; 
OrganizationalItemItemsFilter filter = new OrganizationalItemItemsFilter(session) 
              {ItemTypes = new[] {ItemType.Component}}; 

Folder folder = (Folder)session.GetObject(folderUrl); 

foreach (Component component in folder.GetItems(filter)) 
{ 
    // Do something with the component 
} 
+0

非常感谢Nuno的解释。它帮助了我。 – user1518281 2012-07-13 14:47:16

+1

不客气。做一个好公民接受答案 - 这将有助于其他人提出同样的问题。 – 2012-07-13 16:55:23

4

的如何使用2011 TOM.NET API遍历文件夹和获得组件将是一个简单的例子:

OrganizationalItemItemsFilter filter = new OrganizationalItemItemsFilter(folder.Session) 
{ 
    ItemTypes = new[] {ItemType.Component}, 
    Recursive = false 
}; 
foreach (Component comp in folder.GetItems(filter)) 
{ 
    // get fields collection of component 
    ItemFields fields = new ItemFields(comp.Content, comp.Schema); 
} 

但是,如果你还没有已经得到这一步我强烈建议您查看SDL Tridion World上的所有构建模块(其中包含大量可帮助您了解如何使用不同API的示例代码),或者按照可用的training's并且不要忘记documentation(需要登录,请参阅http://docportal.sdl.com/sdltridion有关如何访问的详细信息)

+0

感谢巴特工作! – user1518281 2012-07-13 14:45:44