【发布时间】:2012-08-14 15:06:14
【问题描述】:
使用 Tridion 核心服务,我们如何获取特定出版物的现有文件夹。我正在使用 SessionAwareCoreService2010Client 类来创建文件夹,但无法在上述类中找到核心服务中的正确方法来获取所有现有文件夹的列表。请用示例代码回答。
任何帮助将不胜感激。
【问题讨论】:
标签: tridion tridion-2011
使用 Tridion 核心服务,我们如何获取特定出版物的现有文件夹。我正在使用 SessionAwareCoreService2010Client 类来创建文件夹,但无法在上述类中找到核心服务中的正确方法来获取所有现有文件夹的列表。请用示例代码回答。
任何帮助将不胜感激。
【问题讨论】:
标签: tridion tridion-2011
我目前无法测试它,但它会是这样的:
var rootFolderUri = "tcm:1-1-2";
var filter = new OrganizationalItemItemsFilterData();
filter.ItemTypes = new[] { ItemType.Folder };
filter.Recursive = true;
var listXml = client.GetListXml(rootFolderUri, filter);
foreach (var itemElement in listXml.Descendants())
{
...
}
【讨论】:
比起一些让你完成工作的示例代码(给男人一条鱼之类的),我更愿意给你一些思考的东西。
首先 - 您说您希望使用 SessionAwareCoreService2010Client,因为您使用的是 Tridion 2011 GA 而不是 SP1。否则我肯定会推荐使用pre-compiled client 和SessionAwareCoreServiceClient。
现在你说你想要所有文件夹。您想要一次调用中的所有文件夹,还是想要递归地“遍历”层次结构?
所有组织项目都支持 GetList 调用。对于 CoreService,这是通过使用 client.GetListXml(subjectId, subjectRelatedFilter) 调用来实现的。如果您只想要文件夹,那么您首先要创建一个OrganizationalItemItemsFilterData 对象,并指定您只需要filter.ItemTypes 数组中的Folder 类型的对象(沿着filter.ItemTypes = new[]{ItemType.Folder}; 的行
现在您可以实现一个方法,该方法将为 client.GetList 调用返回的每个对象递归调用自身,并从对象中读取您需要的任何属性。
如果你真的需要示例代码,那么我会推荐googling for it.
【讨论】: