private List <Model.Term> GetTerms <T>(ClientRuntimeContext context, TaxonomyItem parent, int defaultLanguage, Boolean isSiteCollectionTermGroup = false) { List <Model.Term> termsToReturn = new List <Model.Term>(); TermCollection terms; var customSortOrder = string.Empty; if (parent is TermSet) { terms = ((TermSet)parent).Terms; customSortOrder = ((TermSet)parent).CustomSortOrder; } else { terms = ((Term)parent).Terms; customSortOrder = ((Term)parent).CustomSortOrder; } context.Load(terms, tms => tms.IncludeWithDefaultProperties(t => t.Labels, t => t.CustomSortOrder, t => t.IsReused, t => t.IsSourceTerm, t => t.SourceTerm, t => t.IsDeprecated, t => t.Description, t => t.Owner)); context.ExecuteQueryRetry(); foreach (var term in terms) { var modelTerm = new Model.Term(); if (!isSiteCollectionTermGroup || term.IsReused) { modelTerm.Id = term.Id; } modelTerm.Name = term.Name; modelTerm.IsAvailableForTagging = term.IsAvailableForTagging; modelTerm.IsReused = term.IsReused; modelTerm.IsSourceTerm = term.IsSourceTerm; modelTerm.SourceTermId = (term.SourceTerm != null) ? term.SourceTerm.Id : Guid.Empty; modelTerm.IsDeprecated = term.IsDeprecated; modelTerm.Description = term.Description; modelTerm.Owner = term.Owner; if ((!term.IsReused || term.IsSourceTerm) && term.Labels.Any()) { foreach (var label in term.Labels) { if ((label.Language == defaultLanguage && label.Value != term.Name) || label.Language != defaultLanguage) { var modelLabel = new Model.TermLabel(); modelLabel.IsDefaultForLanguage = label.IsDefaultForLanguage; modelLabel.Value = label.Value; modelLabel.Language = label.Language; modelTerm.Labels.Add(modelLabel); } } } //else //{ // foreach (var label in term.Labels) // { // var modelLabel = new Model.TermLabel(); // modelLabel.IsDefaultForLanguage = label.IsDefaultForLanguage; // modelLabel.Value = label.Value; // modelLabel.Language = label.Language; // modelTerm.Labels.Add(modelLabel); // } //} foreach (var localProperty in term.LocalCustomProperties) { modelTerm.LocalProperties.Add(localProperty.Key, localProperty.Value); } // Shared Properties have to be extracted just for source terms or not reused terms if (!term.IsReused || term.IsSourceTerm) { foreach (var customProperty in term.CustomProperties) { modelTerm.Properties.Add(customProperty.Key, customProperty.Value); } } if (term.TermsCount > 0) { modelTerm.Terms.AddRange(GetTerms <Term>(context, term, defaultLanguage, isSiteCollectionTermGroup)); } termsToReturn.Add(modelTerm); } if (!string.IsNullOrEmpty(customSortOrder)) { int count = 1; foreach (var id in customSortOrder.Split(new[] { ':' })) { var term = termsToReturn.FirstOrDefault(t => t.Id == Guid.Parse(id)); if (term != null) { term.CustomSortOrder = count; count++; } } termsToReturn = termsToReturn.OrderBy(t => t.CustomSortOrder).ToList(); } return(termsToReturn); }
private List <Model.Term> GetTerms <T>(ClientRuntimeContext context, TaxonomyItem parent, int defaultLanguage) { List <Model.Term> termsToReturn = new List <Model.Term>(); TermCollection terms = null; var customSortOrder = string.Empty; if (parent is TermSet) { terms = ((TermSet)parent).Terms; customSortOrder = ((TermSet)parent).CustomSortOrder; } else { terms = ((Term)parent).Terms; customSortOrder = ((Term)parent).CustomSortOrder; } context.Load(terms, tms => tms.IncludeWithDefaultProperties(t => t.Labels, t => t.CustomSortOrder)); context.ExecuteQueryRetry(); foreach (var term in terms) { var modelTerm = new Model.Term(); modelTerm.Id = term.Id; modelTerm.Name = term.Name; modelTerm.IsAvailableForTagging = term.IsAvailableForTagging; if (term.Labels.Any()) { foreach (var label in term.Labels) { if ((label.Language == defaultLanguage && label.Value != term.Name) || label.Language != defaultLanguage) { var modelLabel = new Model.TermLabel(); modelLabel.IsDefaultForLanguage = label.IsDefaultForLanguage; modelLabel.Value = label.Value; modelLabel.Language = label.Language; modelTerm.Labels.Add(modelLabel); } } } //else //{ // foreach (var label in term.Labels) // { // var modelLabel = new Model.TermLabel(); // modelLabel.IsDefaultForLanguage = label.IsDefaultForLanguage; // modelLabel.Value = label.Value; // modelLabel.Language = label.Language; // modelTerm.Labels.Add(modelLabel); // } //} foreach (var localProperty in term.LocalCustomProperties) { modelTerm.LocalProperties.Add(localProperty.Key, localProperty.Value); } foreach (var customProperty in term.CustomProperties) { modelTerm.Properties.Add(customProperty.Key, customProperty.Value); } if (term.TermsCount > 0) { modelTerm.Terms.AddRange(GetTerms <Term>(context, term, defaultLanguage)); } termsToReturn.Add(modelTerm); } if (!string.IsNullOrEmpty(customSortOrder)) { int count = 1; foreach (var id in customSortOrder.Split(new[] { ':' })) { var term = termsToReturn.FirstOrDefault(t => t.Id == Guid.Parse(id)); if (term != null) { term.CustomSortOrder = count; count++; } } termsToReturn = termsToReturn.OrderBy(t => t.CustomSortOrder).ToList(); } return(termsToReturn); }