gpt4 book ai didi

Tridion RepositoryLocalObject.GetBluePrint链方法(BluePrint ChainFilter)在共享项上引发异常

转载 作者:行者123 更新时间:2023-12-04 18:11:29 28 4
gpt4 key购买 nike

我正在尝试获取继承自RepositoryLocalObject(例如Component)的父项列表。因此,如果我的发布ID为1,其组件为tcm:1-80,其子发布ID为2,则该组件在子发布中以tcm:2-80的形式共享。因此,我想让tcm:2-80的父级或树中向上移动的任何级联。

我已经在可以正常工作的组件的本地副本上尝试过GetBluePrintChain()方法。但是,在共享组件上,它返回InvalidActionException:“此项目是共享的”。该文档提到共享对象上引发了此异常。但这有什么意义呢?显然,如果任何具有超出自身蓝图链的项目都将被共享(或成为本地副本)。因此,对我而言,让这种方法在具有蓝图链的对象上抛出异常是没有意义的。看来是矛盾的。

我的问题与Getting root publication of component有关,但有所不同。我需要了解为什么在共享项上引发此异常。有人可以解释一下,也许分享一个用例来支持它吗?

最佳答案

据我所知,GetBluePrintChain方法用于当您站在BluePrint顶部时查看它。因此,在您的情况下,应该在项目所属的发布上下文中获取该项目,然后调用GetBluePrintChain

Item item = package.GetByName("Component");
Component component = new Component(item.GetAsXmlDocument().DocumentElement,
engine.GetSession());
TcmUri id = TemplateUtilities.CreateTcmUriForPublication(
component.OwningRepository.Id.ItemId, component.Id);

var blueprintchain = ((Component)engine.GetObject(id)).GetBluePrintChain();

package.PushItem(package.CreateStringItem(ContentType.Text,
blueprintchain.ToString()));
package.PushItem(package.CreateStringItem(ContentType.Text,
""+System.Linq.Enumerable.Count(blueprintchain)));
foreach (var item in blueprintchain)
{
package.PushItem(package.CreateTridionItem(ContentType.Component, item));
}

我只是在两种情况下将上述C#片段作为TBB运行:

共享组件上的子发布中的

  • 本地化组件
  • 上的子出版物中的


  • 在情况1中,blueprintchain将包含一个项目:共享组件。在情况2中,blueprintchain将包含两项:共享组件和本地化组件。

  • 关于Tridion RepositoryLocalObject.GetBluePrint链方法(BluePrint ChainFilter)在共享项上引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131489/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com