Comment obtenir uniquement des composants à partir d'un dossier utilisant coreservices


1

J'ai un dossier qui contient des sous-dossiers et des composants. Maintenant, je veux récupérer uniquement les composants qui utilise un schéma spécifié. Comment puis-je le faire en utilisant les services de base.

6

Essayez quelque chose comme ceci:

using System.Xml.Linq; 
using Tridion.ContentManager.CoreService.Client;    

... 

      string folderUri = ""; 
      string schemaUri = ""; 

      OrganizationalItemItemsFilterData filter = new OrganizationalItemItemsFilterData(); 
      filter.ItemTypes = new ItemType[] { ItemType.Component }; 
      filter.ComponentTypes = new ComponentType[] { ComponentType.Normal }; 
      filter.Recursive = true; 

      XElement items = Client.GetListXml(folderUri, filter); 
      foreach (XElement item in items.Elements()) 
      { 
       ComponentData component = Client.Read(item.Attribute("ID").Value, null) as ComponentData; 

       if (component.Schema.IdRef.Equals(schemaUri)) 
       { 

        // Do something with components of specific schema 

       } 

      } 

variable client est de type SessionAwareCoreServiceClient. Vous trouverez des explications plus détaillées du code ci-dessus sur le blog http://codedweapon.com/2013/03/changing-components-schemas-with-core-service/

Quelque chose de semblable a déjà été posée sur le post Get all component from selected folder and subfolder based on Schema