2012-03-01 21 views
8

'dan daha fazla öğe döndürür Bir Blueprint öğesinin tüm alt öğelerini, Tridion Core Service ile GetListUsingItems yaklaşımını kullanarak almak istiyorum. Temel Hizmet ile farklı sonuçları (daha fazla) TOM'daki eski yoldan geri aldım. Görünüşe göre, bir Bileşen Bağlantısı yoluyla kaynak Bileşenime referans veren diğer Bileşenleri de geri aldım. Çekirdek Hizmette bir filtre seçeneği eksik miyim?Tridion Core Service ile 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 Çekirdek Hizmeti:

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

Merhaba Robert BluePrintNodeData nesnelerin size dizi döndürür GetSystemWideList yöntemi kullanabilirsiniz olmasıdır. Geri aldığınız Bileşenlerin sayısını etkilememelidir (kaynak öğeniz bir Bileşen olduğu için), ancak R5.3 kodunuzun bir 'ItemType' satır filtresi belirlediğine dikkat etmelisiniz (yalnızca Bileşenleri alacağınız anlamına gelir) geri) ancak Temel Servis kodunuz yok. Bu, toplam sonuç sayınızı etkileyebilir, ancak Bileşenler (açıkladığınız gibi) miktarını etkilemez. –

+0

ItemTypes koşulunu ekledim ancak yine de ilgili Bileşenleri ve çocukları da aldım. Başka fikirlerin var mı? – robrtc

cevap

6

Sen kullanmalıdır BluePrintChainFilterData:

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

Eğer Yön belirtebilirsiniz unutmayınız mülk. Bu filtre, size paylaşılan öğeleri göstermeyecektir. Burada ForItem özelliği belirtebilirsiniz

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

: Ayrıca, veritabanı

siz de paylaşılan öğeleri eklemek istiyorsanız ağır olduğu gibi UsingItemsFilterData kullanmaktan kaçınması, o zaman BluePrintFilterData kullanabilirsiniz öğenizi ayarlamak için. Böyle bir şey dönecektir: Sistem çapında listesiyle ilgili

<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> 

iyi bir şey yerine XML

+0

Harika cevap! 2 örnek ve büyük açıklama sağladığınız için teşekkür ederiz. – robrtc