2012-03-01 3 views
8

Tridion Core Service에서 GetListUsingItems 접근 방식을 사용하여 청사진 항목의 모든 하위 항목을 가져오고 싶습니다. 핵심 서비스를 통해 TOM의 구식 방식과 다른 결과를 얻었습니다 (기타). 컴포넌트 링크를 통해 내 소스 컴포넌트를 참조하는 다른 컴포넌트를 다시 얻게됩니다. 핵심 서비스에서 필터 옵션이 누락 되었습니까?Tridion 핵심 서비스를 사용하는 GetListUsingItems가 TOM보다 많은 항목을 반환합니다.

Tridion 5.3 :

Function GetLocalizedItemNodes(itemUri) 
    Dim tridionItem : set tridionItem = tdse.GetObject(itemUri,1) 
    Dim rowFilter : set rowFilter = tdse.CreateListRowFilter() 
    call rowFilter.SetCondition("ItemType", GetItemType(itemUri)) 
    call rowFilter.SetCondition("InclLocalCopies", true) 
    Dim usingItemsXml : usingItemsXml = tridionItem.Info.GetListUsingItems(1919, rowFilter) 

    Dim domDoc : set domDoc = GetNewDOMDocument() 
    domDoc.LoadXml(usingItemsXml) 
    Dim nodeList : set nodeList = domDoc.SelectNodes("/tcm:ListUsingItems/tcm:Item[@CommentToken='LocalCopy']") 

    set tridionItem = nothing 
    set domDoc = nothing 
    set GetLocalizedItemNodes = nodeList 
End Function 

Tridion 2011 SP1 핵심 서비스 :

private XElement GetLocalizedItems(string itemUri) 
    { 
     XElement usingXML = null; 
     try 
     { 
      CoreServiceClient client = new CoreServiceClient(); 
      client.ClientCredentials.Windows.ClientCredential.UserName = ConfigurationManager.AppSettings["impersonationUser"].ToString(); // "administrator"; 
      client.ClientCredentials.Windows.ClientCredential.Password = ConfigurationManager.AppSettings["impersonationPassword"].ToString(); 
      client.ClientCredentials.Windows.ClientCredential.Domain = ConfigurationManager.AppSettings["impersonationDomain"].ToString(); 

      // original code from http://www.tridiondeveloper.com/getting-used-items-using-the-core-service 
      // Create a filter 
      UsingItemsFilterData usingItemsFilterData = new UsingItemsFilterData 
      { 
       BaseColumns = ListBaseColumns.IdAndTitle, // to specify the detail in the XML 
       IncludeLocalCopies = true, 
       ItemTypes = new[] { ItemType.Component } 
      }; 
      // Get the XML by calling .GetListXml on the client (assumes you have a 'client' object already) 
      usingXML = client.GetListXml(itemUri, usingItemsFilterData); 

     } 
     catch (Exception ex) 
     { 
      throw; 
     } 
     return usingXML; 
    } 
+1

안녕 로버트의 BluePrintNodeData 객체의 당신 배열을 반환합니다 GetSystemWideList 방법을 사용할 수 있다는 것입니다. 다시 돌아 오는 구성 요소의 수에 영향을 미치지 않아야합니다 (소스 항목이 구성 요소이기 때문에)하지만 R5.3 코드가 'ItemType'행 필터를 설정한다는 점에 유의할 필요가 없습니다. 즉, 구성 요소 back)하지만 핵심 서비스 코드는 그렇지 않습니다. 이것은 총 결과 수에는 영향을 미칠 수 있지만 구성 요소의 양에는 영향을 미치지 않습니다 (설명대로). –

+0

ItemTypes 조건을 추가했지만 여전히 관련 구성 요소와 하위 항목을 가져옵니다. 다른 아이디어? – robrtc

답변

6

당신은 사용해야 BluePrintChainFilterData :

BluePrintChainFilterData filter = new BluePrintChainFilterData(); 
filter.Direction = BluePrintChainDirection.Down; 
var result = ClientAdmin.GetListXml("tcm:3-1905", filter); 

당신이 방향을 지정할 수 있습니다 속성. 그러나이 필터는 공유 항목을 표시하지 않습니다. 당신은 여기 ForItem 속성을 지정할 수 있습니다

BluePrintFilterData filter = new BluePrintFilterData(); 
filter.ForItem = new LinkToRepositoryLocalObjectData{ IdRef = "tcm:3-1905"}; 
var listXml = ClientAdmin.GetSystemWideListXml(filter); 
var list = ClientAdmin.GetSystemWideList(filter); 

: 또한, 데이터베이스

당신은뿐만 아니라 공유 항목을 포함 할 경우에 무거운로 UsingItemsFilterData를 사용하여 피하려고, 당신은 BluePrintFilterData을 사용할 수 있습니다 귀하의 항목을 설정합니다. 그것은 이런 식으로 뭔가를 반환합니다 : 시스템 전체 목록에 대한

<tcm:ListBluePrintNodes Managed="1" xmlns:tcm="http://www.tridion.com/ContentManager/5.0" xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <tcm:BluePrintNode ID="tcm:0-3-1" Title="Test" Icon="T1L0P0"> 
    <tcm:Item ID="tcm:3-1905" Title="Test multimedia component" ItemType="16" IsShared="False" IsLocalized="False" IsPublished="False" LockType="0" LockUser="tcm:0-0-0" Icon="T16L0P0Mgif"></tcm:Item> 
    </tcm:BluePrintNode> 
    <tcm:BluePrintNode ID="tcm:0-172-1" Title="test_child" Icon="T1L0P0"> 
    <tcm:Parents> 
     <tcm:Parent xlink:href="tcm:0-3-1" xlink:title="Test" Priority="1"></tcm:Parent> 
    </tcm:Parents> 
    <tcm:Item ID="tcm:172-1905" Title="Test multimedia component" ItemType="16" IsShared="True" IsLocalized="False" IsPublished="False" LockType="0" LockUser="tcm:0-0-0" Icon="T16L0P0Mgif"></tcm:Item> 
    </tcm:BluePrintNode> 
</tcm:ListBluePrintNodes> 

좋은 것은 당신이 대신 XML

+0

굉장한 답변! 2 가지 예와 훌륭한 설명을 제공해 주셔서 감사합니다. – robrtc

관련 문제