Tridion 基于子组件的URI检索蓝图组件的父URI

Tridion 基于子组件的URI检索蓝图组件的父URI,tridion,tridion-2011,Tridion,Tridion 2011,有人知道如何使用核心服务在SDL Tridion的子出版物中基于共享或本地化组件的URI查找父组件的URI吗?您可以使用ComponentData.blueprintininfo.OwningRepository.IdRef获取“拥有”该组件的出版物的TcmUri。这是第一份“即将出版”的出版物,其中创建或本地化了组件 然后,您可以使用类似的方法在正确的上下文中获取组件Uri: 内部字符串GetUriInBlueprintContext(字符串itemId、字符串publicationId) {

有人知道如何使用核心服务在SDL Tridion的子出版物中基于共享或本地化组件的URI查找父组件的URI吗?

您可以使用
ComponentData.blueprintininfo.OwningRepository.IdRef
获取“拥有”该组件的出版物的TcmUri。这是第一份“即将出版”的出版物,其中创建或本地化了组件

然后,您可以使用类似的方法在正确的上下文中获取组件Uri:

内部字符串GetUriInBlueprintContext(字符串itemId、字符串publicationId)
{
if(TcmUri.UriNull==itemId)
返回null;
TcmUri itemUri=新的TcmUri(itemId);
TcmUri publicationUri=新的TcmUri(publicationId);
TcmUri inContext=新的TcmUri(itemUri.ItemId、itemUri.ItemType、publicationUri.ItemId);
返回inContext.ToString();
}

TcmUri
类是Tridion.Common.dll的一部分,您也可以从项目中引用它。

这里的方法比Nuno建议的方法更简单,您不需要引用任何dll

var parentComponentid = ClientAdmin.GetTcmUri(component.Id, component.BluePrintInfo.OwningRepository.IdRef, null);

GetTcmUri
方法适用于获取任何tcmuri-只需传递您想要的项目所在的出版物id和当前出版物中项目的id。这样,您还可以在特定子出版物中找到给定项目的ID

请定义父项。它是项目的第一个本地副本,还是最高的父项。您知道父出版物的id吗?相当混乱的术语:组件的父项是文件夹。你到底想得到什么?下面的答案假设您正在母公司蓝图出版物中寻找相同的组件…感谢您的更正。我猜这个问题的整个想法是对蓝图出版物的解释…问题是关于CoreServiceClientAdmin在这种情况下是什么?只是你的CoreServiceClientThis起作用了。我使用了以下代码:session.Client.GetTcmUri(componentId,childComponent.BluePrintInfo.OwningRepository.IdRef,null);这确实有效,但是这种方法的性能不是很好。每次调用gettcmurassume组件a时,它都会往返到服务器。组件a是在Publication PubX中创建的,并与Publication PubY共享。如果组件A是在PubY出版物中本地化的,则拥有本地化组件A的存储库的是PubY而不是PubX。