使用 Tridion 核心服务,我们如何获取特定出版物的现有文件夹。我正在使用 SessionAwareCoreService2010Client 类来创建文件夹,但无法在上述类中找到核心服务中的正确方法来获取所有现有文件夹的列表。请用示例代码回答。
任何帮助,将不胜感激。
使用 Tridion 核心服务,我们如何获取特定出版物的现有文件夹。我正在使用 SessionAwareCoreService2010Client 类来创建文件夹,但无法在上述类中找到核心服务中的正确方法来获取所有现有文件夹的列表。请用示例代码回答。
任何帮助,将不胜感激。
我更愿意给你一些思考的东西,而不是一些让你完成工作的示例代码(给男人一条鱼等等)。
首先 - 您说您SessionAwareCoreService2010Client
希望使用的是因为您使用的是 Tridion 2011 GA 而不是 SP1。否则我当然会推荐使用预编译的客户端和SessionAwareCoreServiceClient
.
现在你说你想要所有文件夹。您想要一次调用中的所有文件夹,还是想要递归地“遍历”层次结构?
所有组织项目都支持 GetList 调用。对于 CoreService,这是通过client.GetListXml(subjectId, subjectRelatedFilter)
调用来实现的。如果您只想要文件夹,那么您将首先创建一个OrganizationalItemItemsFilterData
对象,并指定您只需要数组中的类型对象Folder
(filter.ItemTypes
沿着filter.ItemTypes = new[]{ItemType.Folder};
现在您可以实现一个方法,该方法将为 client.GetList 调用返回的每个对象递归调用自身,并从对象中读取您需要的任何属性。
如果您真的需要示例代码,那么我建议您使用谷歌搜索它。
我目前无法测试它,但它会是这样的:
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())
{
...
}