/// <summary> /// Get the templates /// </summary> /// <param name="service">The organization service</param> /// <param name="tracingService">The tracing service</param> /// <param name="ignoreCache">A value indicating whether to ignore cache</param> /// <returns>Template Entity</returns> public static ConcurrentDictionary <Guid, Template> GetTemplates(IOrganizationService service, ITracingService tracingService, bool ignoreCache = false) { lock (LockTemplateCache) { if (ignoreCache || TemplateCache.None() || DateTime.Now > TemplateCacheExpiry) { TemplateCache.Clear(); var query = new QueryExpression() { EntityName = Template.EntityLogicalName, ColumnSet = new ColumnSet(true), }; var entities = service.RetrieveMultiple(query).Entities; foreach (var template in entities.Select(e => e.ToEntity <Template>())) { TemplateCache.TryAdd(template.Id, template); } TemplateCacheExpiry = DateTime.Now.AddMinutes(CacheValidMinutes); } return(TemplateCache); } }