Tridion 使用本地化组件获取共享页面

Tridion 使用本地化组件获取共享页面,tridion,tridion-2011,Tridion,Tridion 2011,我目前正在处理一个事件处理程序,它将在保存事件时,将页面及其组件的最新修订日期保存到自定义数据库中,这是可行的,但我面临一些性能问题 让我给你举个例子,看看它是如何工作的: 如果保存/更新了某个组件并进行了更改,则我希望在自定义数据库中使用该组件更新所有页面 基本蓝图设置: 200包含组件 400部件的翻译出版物200中的固有部件 500页的母版出版物 600个本地站点出版物400个固有组件和500个页面 假设我们在200中有组件X,这个组件包含在500中的一个页面中,X在400中本地化,我们称

我目前正在处理一个事件处理程序,它将在保存事件时,将页面及其组件的最新修订日期保存到自定义数据库中,这是可行的,但我面临一些性能问题

让我给你举个例子,看看它是如何工作的:

如果保存/更新了某个组件并进行了更改,则我希望在自定义数据库中使用该组件更新所有页面

基本蓝图设置: 200包含组件 400部件的翻译出版物200中的固有部件 500页的母版出版物 600个本地站点出版物400个固有组件和500个页面

假设我们在200中有组件X,这个组件包含在500中的一个页面中,X在400中本地化,我们称之为Xl,而在600中的页面没有本地化,即它将使用组件Xl

那么现在我的问题是: 在我的保存事件处理程序中,我使用以下命令检查包含哪些页面:

var filter = new UsingItemsFilter(component.Session)
        {
            IncludeLocalCopies = true,
            ItemTypes = new[] { ItemType.Page }
        };
但这只会给我500页的参考资料。 所以我接下来做的有点愚蠢的事情是 创建子出版物中所有页面的tcm id,通过在这些页面上循环,该页面现在使用一些伪代码式编码:

foreach(var 500page in foundPages)
foreach(var publication in publications){
 if(subject.Session.IsExistingObject(
 new TcmUri(page.Id.ItemId,page.Id.ItemType,publication.Id.ItemId)
 ))
 {
  someListThatWillContainAllChildPagesFrom500.Add(TheAboveTcmUri);
 }
}
然后针对每个页面,检查该页面中的组件,最后将该状态保存到我的自定义数据库中

所以问题是,有没有一种方法可以通过使用TOM.NET api no not CoreServiceClient查询所有使用本地化组件的页面

是否有更好的方法查找出版物的子出版物,因此我只需要检查子出版物中的页面


Br Martin

以下代码示例应提供特定本地/本地化项目的共享项目以及该项目。BlueprintNodeFilter于2013年推出,但在早期版本中,BluePrintFilter应以类似方式工作

SystemManager systemManager = session.SystemManager;
BluePrintNodesFilter filter = new BluePrintNodesFilter(session)
{
    BaseColumns = ListBaseColumns.Id,
    ForItem = page
};
IEnumerable<BluePrintNode> allNodes = systemManager.GetBluePrintNodes(filter);
IEnumerable<RepositoryLocalObject> sharedAndLocal = (from node in allNodes
    where node.Item != null
    where node.Item.OwningRepository.Id == page.OwningRepository.Id
    select node.Item).ToArray();

感谢您提出的与Tridion相关的问题。如果您还不知道,现在有一个专门的Tridion堆栈交换站点位于。如果你把那条提示贴在那里,你可能会得到更快/更大的回复,我也会贴在那里!