The best way to fetch all components from a specific publication is by using the SearchQueryData class as:
But, it requires the search to be properly configured in Tridion CMS. If you can search for an item based in Title/Text than most probably your code should work.
But if search is not properly configured, the code will throw the following error:
There is still a way to fetch List of TcmUri of related componets. It can be achieved through code:
SearchQueryData query = new SearchQueryData()
{
BasedOnSchemas = new BasedOnSchemaData[] { new BasedOnSchemaData() { Schema = new LinkToSchemaData() { IdRef = SchemaTcmUri } } },
SearchIn = new LinkToIdentifiableObjectData() { IdRef = PublicationUri },
ItemTypes = new ItemType[] { ItemType.Component }
};
try
{
XElement xResults = client.GetSearchResultsXml(query);
}
catch (System.ServiceModel.CommunicationException commProblem)
{
Console.WriteLine("There was a communication problem. " + commProblem.Message + commProblem.StackTrace);
Console.Read();
}
But, it requires the search to be properly configured in Tridion CMS. If you can search for an item based in Title/Text than most probably your code should work.
But if search is not properly configured, the code will throw the following error:
The remote server returned an error: (403) Forbidden.
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Tridion.ContentManager.CoreService.Client.ICoreService.GetSearchResultsXml(SearchQueryData filter)
at Tridion.ContentManager.CoreService.Client.CoreServiceClient.GetSearchResultsXml(SearchQueryData filter)
A more detailed warning can be seen in Event ViewerError: The remote server returned an error: (403) Forbidden.
Component: Tridion.ContentManager.CoreService Errorcode: 854
User: server\tridion_admin
StackTrace Information Details: System.Net.HttpWebRequest.GetResponse()
Tridion.ContentManager.Search.SolrClient.ProcessResponse(HttpWebRequest,Boolean,Boolean,String&)
Tridion.ContentManager.Search.SolrClient.Post(String,String,String&)
Tridion.ContentManager.Search.SolrClient.Query(String,Int32,Nullable`1,String&)
Tridion.ContentManager.Search.SearchQueryEngine.GetSearchResultsFromSolr(SearchQueryData,Int32,Nullable`1)
Tridion.ContentManager.Search.SearchQueryEngine.GetSearchResultsFromSolr(SearchQueryData,Int32,Nullable`1)
Tridion.ContentManager.Search.SearchQueryEngine.GetSearchResults(SearchQueryData,Int32)
Tridion.ContentManager.Search.ComWrapper.SearchQueryEngineFacade.GetSearchResults(Int32,Int32)
SearchBLST.GetListData SearchBLST.GetSearchResults
at Tridion.ContentManager.ContentManagement.SearchQuery.GetListResults(Int32 startRowIndex, Int32 maxRows)
at Tridion.ContentManager.Query.GetListResults()
at Tridion.ContentManager.CoreService.CoreServiceBase.GetSearchResultsXml(SearchQueryData filter)
at SyncInvokeGetSearchResultsXml(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at Tridion.ContentManager.CoreService.TransactionSupportInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
CM Version: SDL Tridion 2011 SP 1There is still a way to fetch List of TcmUri of related componets. It can be achieved through code:
UsingItemsFilterData usingComponentsFilter = new UsingItemsFilterData
{
BaseColumns = ListBaseColumns.IdAndTitle, // to specify the detail in the XML
ItemTypes = new[] { ItemType.Component }, // to specify certain items
IncludedVersions = VersionCondition.OnlyLatestVersions //do not include old versions
};
IEnumerable<XElement> usingComponentXMLList = from comp in client.GetListXml(schemaTcmUri, usingComponentsFilter).Elements()
select comp;
Hope this post helps others!!
No comments:
Post a Comment