Voglio ottenere tutti i figli di un elemento di modello utilizzando l'approccio GetListUsingItems con il servizio principale di Tridion. Ricevo diversi risultati (di più) con il servizio principale rispetto al vecchio modo in TOM. Sembra che torni anche altri componenti che fanno riferimento al mio componente sorgente tramite un collegamento componente. Mi manca un'opzione di filtro nel servizio principale?GetListUsingItems con servizio Tridion Core restituisce più articoli di 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 Servizio principale:
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;
}
Hi Robert. Non dovrebbe influenzare il numero di Componenti che si stanno recuperando (come il tuo oggetto sorgente è un Componente), ma potrebbe valere la pena notare che il tuo codice R5.3 imposta un filtro di riga 'ItemType' (significa che otterrai solo Componenti indietro) ma il tuo codice di servizio principale non lo fa. Ciò potrebbe influire sul numero totale di risultati, ma non sulla quantità di componenti (come descritto). –
Ho aggiunto la condizione ItemTypes ma ottengo anche i relativi componenti e figli. Altre idee? – robrtc