Tridion 使用本地化组件获取共享页面
我目前正在处理一个事件处理程序,它将在保存事件时,将页面及其组件的最新修订日期保存到自定义数据库中,这是可行的,但我面临一些性能问题 让我给你举个例子,看看它是如何工作的: 如果保存/更新了某个组件并进行了更改,则我希望在自定义数据库中使用该组件更新所有页面 基本蓝图设置: 200包含组件 400部件的翻译出版物200中的固有部件 500页的母版出版物 600个本地站点出版物400个固有组件和500个页面 假设我们在200中有组件X,这个组件包含在500中的一个页面中,X在400中本地化,我们称之为Xl,而在600中的页面没有本地化,即它将使用组件Xl 那么现在我的问题是: 在我的保存事件处理程序中,我使用以下命令检查包含哪些页面:Tridion 使用本地化组件获取共享页面,tridion,tridion-2011,Tridion,Tridion 2011,我目前正在处理一个事件处理程序,它将在保存事件时,将页面及其组件的最新修订日期保存到自定义数据库中,这是可行的,但我面临一些性能问题 让我给你举个例子,看看它是如何工作的: 如果保存/更新了某个组件并进行了更改,则我希望在自定义数据库中使用该组件更新所有页面 基本蓝图设置: 200包含组件 400部件的翻译出版物200中的固有部件 500页的母版出版物 600个本地站点出版物400个固有组件和500个页面 假设我们在200中有组件X,这个组件包含在500中的一个页面中,X在400中本地化,我们称
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堆栈交换站点位于。如果你把那条提示贴在那里,你可能会得到更快/更大的回复,我也会贴在那里!