2012-03-01 14 views
8

से अधिक आइटम लौटाता है मैं ट्राइडियन कोर सेवा के साथ GetListUsingItems दृष्टिकोण का उपयोग करके ब्लूप्रिंट आइटम के सभी बच्चों को प्राप्त करना चाहता हूं। मैं टीओएम में पुराने तरीके की तुलना में कोर सेवा के साथ अलग-अलग परिणाम (अधिक) वापस प्राप्त करता हूं। ऐसा प्रतीत होता है कि मैं घटक घटक के माध्यम से अपने स्रोत घटक का संदर्भ देने वाले अन्य घटक भी वापस प्राप्त करता हूं। क्या मुझे कोर सेवा में एक फ़िल्टर विकल्प याद आ रहा है?ट्रिडियन कोर सेवा के साथ 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

हाय रॉबर्ट के बजाय वस्तुओं की आप सरणी वापस आ जाएगी है। यह उन घटकों की संख्या को प्रभावित नहीं करेगा जिन्हें आप वापस प्राप्त कर रहे हैं (क्योंकि आपका स्रोत आइटम एक घटक है), लेकिन यह ध्यान देने योग्य हो सकता है कि आपका R5.3 कोड 'आइटम टाइप' पंक्ति फ़िल्टर सेट करता है (जिसका अर्थ है कि आप केवल घटक प्राप्त करेंगे वापस) लेकिन आपका कोर सेवा कोड नहीं है। यह आपके परिणामों की कुल संख्या को प्रभावित कर सकता है, लेकिन घटक की मात्रा (जैसा कि आप वर्णन करते हैं) नहीं। –

+0

मैंने आइटम टाइप की स्थिति को जोड़ा लेकिन फिर भी संबंधित घटक और बच्चे भी मिलते हैं। कोई अन्य विचार? – robrtc

उत्तर

6

आप का उपयोग करना चाहिए BluePrintChainFilterData:

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

कृपया ध्यान दें कि आप दिशा निर्दिष्ट कर सकते हैं संपत्ति। यह फ़िल्टर, हालांकि आपको साझा आइटम नहीं दिखाएगा। इसके अलावा, UsingItemsFilterData का उपयोग कर के रूप में यह डेटाबेस

आप साझा किए गए आइटम शामिल करने के लिए के रूप में अच्छी तरह से चाहते हैं पर भारी है से बचने की कोशिश, तो आप BluePrintFilterData उपयोग कर सकते हैं:

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

आप ForItem संपत्ति निर्दिष्ट कर सकते हैं अपना सामान सेट करने के लिए। यह इस तरह से आप कुछ वापस आ जाएगी:

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

प्रणाली विस्तृत सूची के बारे में अच्छी बात यह है कि आप उपयोग कर सकते GetSystemWideList विधि है कि BluePrintNodeData एक्सएमएल

+0

बहुत बढ़िया जवाब! 2 उदाहरण और महान स्पष्टीकरण प्रदान करने के लिए धन्यवाद। – robrtc

संबंधित मुद्दे