/// <summary> /// Gets the used items of source item. /// </summary> /// <param name="client">Tridion client object.</param> /// <param name="tcmItem">Item TCM id.</param> /// <param name="itemTypes">The item types.</param> /// <returns></returns> public static List <string> GetUsedItems(IAlchemyCoreServiceClient client, string tcmItem, ItemType[] itemTypes = null) { UsedItemsFilterData filter = new UsedItemsFilterData(); filter.BaseColumns = ListBaseColumns.Id; if (itemTypes != null) { filter.ItemTypes = itemTypes; } List <string> items = client.GetListXml(tcmItem, filter).ToList().Select(x => x.TcmId).ToList(); return(items); }
private void AddUsedSchemas(SchemaData mainSchema, IList <SchemaData> allSchemas) { log.Info($"Called AddUsedSchemas to find dependent schemas for {mainSchema.Title} - total number of schemas found so far: {allSchemas.Count()}"); UsedItemsFilterData filter = new UsedItemsFilterData { ItemTypes = new ItemType[] { ItemType.Category } }; XElement list = Client.GetListXml(mainSchema.Id, filter); var usedCategories = list.Descendants(); if (usedCategories.Count() > 0) { foreach (var elmt in usedCategories) { CategoryData cat = (CategoryData)Client.Read(elmt.Attribute("ID").Value, new ReadOptions()); if (cat.KeywordMetadataSchema != null && cat.KeywordMetadataSchema.IdRef != "tcm:0-0-0") { if (!allSchemas.Select(s => s.Id).Contains(cat.KeywordMetadataSchema.IdRef)) { SchemaData s = Client.Read(cat.KeywordMetadataSchema.IdRef, new ReadOptions()) as SchemaData; allSchemas.Add(s); AddUsedSchemas(s, allSchemas); } } } } filter = new UsedItemsFilterData { ItemTypes = new ItemType[] { ItemType.Schema } }; list = Client.GetListXml(mainSchema.Id, filter); var unprocessedSchemas = list.Descendants().Where(i => !(allSchemas.Select(s => s.Id).Contains(i.Attribute("ID").Value))); if (unprocessedSchemas.Count() > 0) { IEnumerable <SchemaData> usedSchemas = GetConvertibleSchemas(unprocessedSchemas); //allSchemas = allSchemas.Union(usedSchemas).ToList(); allSchemas.AddRange(usedSchemas.Where(p => !allSchemas.Any(p2 => p2.Id == p.Id))); foreach (SchemaData usedSchema in usedSchemas) { AddUsedSchemas(usedSchema, allSchemas); } } }
private void ConvertTemplate(TemplateData template) { _log.Debug($"Converting template {template.Title}"); ViewDefinition viewDefinition; if (this.ContainsView(template.Id)) { _log.Debug($"schema {template.Title} was already in the model registry"); viewDefinition = Views.First(m => m.TcmUri == template.Id); } else { _log.Debug($"creating new ViewDefinition for template {template.Title}"); viewDefinition = new ViewDefinition(); viewDefinition.Title = template.Title; viewDefinition.TcmUri = template.Id; if (string.IsNullOrEmpty(template.Metadata)) { viewDefinition.ViewName = MakeCsName(template.Title, true); } else { viewDefinition.ViewName = GetFieldValue(template.Metadata, "view"); } if (template is ComponentTemplateData) { viewDefinition.ViewPurpose = ViewPurpose.Entity; UsedItemsFilterData filter = new UsedItemsFilterData() { ItemTypes = new[] { ItemType.Schema } }; var associatedSchemas = Client.GetList(template.Id, filter).Cast <SchemaData>(); var allAssociatedModels = associatedSchemas?.Select(s => ModelRegistry.GetViewModelDefinition(s.Id)).Where(a => a.Purpose == SchemaPurpose.Component); if (allAssociatedModels.Count() > 1) { _log.Warn($"found component template {template.Title} ({template.Id}) with multiple associated schemas. We will use the base class {Config.BaseClasses.FirstOrDefault()} instead"); viewDefinition.ModelTypeName = Config.BaseClasses.FirstOrDefault(); //_log.Info($"Template {template.Title} is linked to more than one schema. We need to merge models before we can continue"); //var mergedModel = ModelRegistry.MergeModelDefinitions(allAssociatedModels); //viewDefinition.AssociatedModelDefinition = mergedModel; //viewDefinition.ModelTypeName = mergedModel.TypeName; } else if (allAssociatedModels.Count() == 0) { _log.Warn($"found component template {template.Title} ({template.Id}) without any associated schema. We will use the base class {Config.BaseClasses.FirstOrDefault()} instead"); viewDefinition.ModelTypeName = Config.BaseClasses.FirstOrDefault(); } else { viewDefinition.AssociatedModelDefinition = allAssociatedModels.First(); viewDefinition.ModelTypeName = viewDefinition.AssociatedModelDefinition.TypeName; } } else // this is a page template, so it has its own associated model definition { viewDefinition.AssociatedModelDefinition = ModelRegistry.GetViewModelDefinition(template.Id); viewDefinition.ModelTypeName = viewDefinition.AssociatedModelDefinition.TypeName; viewDefinition.ViewPurpose = ViewPurpose.Page; } } currentView = viewDefinition; if (this.ContainsView(template.Id)) { Views.Add(viewDefinition); } else { Views.Add(viewDefinition); } }
private static List<string> GetUsedItems(string tcmItem) { UsedItemsFilterData filter = new UsedItemsFilterData(); filter.BaseColumns = ListBaseColumns.Id; List<string> items = Client.GetListXml(tcmItem, filter).ToList().Select(x => x.TcmId).ToList(); return items; }