public IEnumerable <SPTerm> GetTerms(String setName) { const Int32 englishLCID = 1033; var currentLCID = CultureInfo.CurrentCulture.LCID; var terms = new List <SPTerm>(); var sortOrders = new SortOrdersCollection <Guid>(); var session = TaxonomySession.GetTaxonomySession(_context); var termSets = session.GetTermSetsByName(setName, englishLCID); _context.Load(session, s => s.TermStores); _context.Load(termSets); _context.ExecuteQuery(); var termSet = termSets.First(); var allTerms = termSet.GetAllTerms(); _context.Load(allTerms); _context.ExecuteQuery(); var guids = allTerms.ToList().Select(t => t.Id).ToList(); Parallel.ForEach(guids, CreateClientContext, (id, state, context) => { try { GetTermItem(setName, context, englishLCID, id, currentLCID, terms, sortOrders); } catch (WebException) { Thread.Sleep(TimeSpan.FromSeconds(1)); GetTermItem(setName, context, englishLCID, id, currentLCID, terms, sortOrders); } return(context); } , context => context.Dispose()); var customSortOrder = sortOrders.GetSortOrders(); terms.Sort(new SPTermComparerByCustomSortOrder(customSortOrder)); if (terms.Count == 0) { throw new Exception("No terms was readed!"); } return(terms); }
private static void GetTermItem(String setName, ClientContext context, Int32 englishLCID, Guid id, Int32 currentLCID, List <SPTerm> terms, SortOrdersCollection <Guid> sortOrders) { var lsession = TaxonomySession.GetTaxonomySession(context); var ltermSets = lsession.GetTermSetsByName(setName, englishLCID); context.Load(lsession, s => s.TermStores); context.Load(ltermSets); context.ExecuteQuery(); var ltermSet = ltermSets.First(); var term = ltermSet.GetTerm(id); context.Load(term); context.ExecuteQuery(); var name = term.Name; var spTerm = new SPTerm { Id = term.Id, Name = name, Path = term.PathOfTerm, Properties = term.LocalCustomProperties }; if (currentLCID != englishLCID) // If lcid label not avaliable or lcid==1033 keep default label { var langLabel = term.GetAllLabels(currentLCID); context.Load(langLabel); context.ExecuteQuery(); if (langLabel.Count != 0) { spTerm.Name = langLabel.First().Value; } } terms.Add(spTerm); if (!String.IsNullOrEmpty(term.CustomSortOrder)) { sortOrders.AddSortOrder(term.CustomSortOrder); } }
private static void GetTermItem(String setName, ClientContext context, Int32 englishLCID, Guid id, Int32 currentLCID, List<SPTerm> terms, SortOrdersCollection<Guid> sortOrders) { var lsession = TaxonomySession.GetTaxonomySession(context); var ltermSets = lsession.GetTermSetsByName(setName, englishLCID); context.Load(lsession, s => s.TermStores); context.Load(ltermSets); context.ExecuteQuery(); var ltermSet = ltermSets.First(); var term = ltermSet.GetTerm(id); context.Load(term); context.ExecuteQuery(); var name = term.Name; var spTerm = new SPTerm { Id = term.Id, Name = name, Path = term.PathOfTerm, Properties = term.LocalCustomProperties }; if (currentLCID != englishLCID) // If lcid label not avaliable or lcid==1033 keep default label { var langLabel = term.GetAllLabels(currentLCID); context.Load(langLabel); context.ExecuteQuery(); if (langLabel.Count != 0) { spTerm.Name = langLabel.First().Value; } } terms.Add(spTerm); if (!String.IsNullOrEmpty(term.CustomSortOrder)) { sortOrders.AddSortOrder(term.CustomSortOrder); } }
public IEnumerable<SPTerm> GetTerms(String setName) { const Int32 englishLCID = 1033; var currentLCID = CultureInfo.CurrentCulture.LCID; var terms = new List<SPTerm>(); var sortOrders = new SortOrdersCollection<Guid>(); var session = TaxonomySession.GetTaxonomySession(_context); var termSets = session.GetTermSetsByName(setName, englishLCID); _context.Load(session, s=>s.TermStores); _context.Load(termSets); _context.ExecuteQuery(); var termSet = termSets.First(); var allTerms = termSet.GetAllTerms(); _context.Load(allTerms); _context.ExecuteQuery(); var guids = allTerms.ToList().Select(t => t.Id).ToList(); Parallel.ForEach(guids, CreateClientContext, (id, state, context) => { try { GetTermItem(setName, context, englishLCID, id, currentLCID, terms, sortOrders); } catch (WebException) { Thread.Sleep(TimeSpan.FromSeconds(1)); GetTermItem(setName, context, englishLCID, id, currentLCID, terms, sortOrders); } return context; } , context => context.Dispose()); var customSortOrder = sortOrders.GetSortOrders(); terms.Sort(new SPTermComparerByCustomSortOrder(customSortOrder)); if (terms.Count == 0) throw new Exception("No terms was readed!"); return terms; }