public FieldDigest[] GetFieldDigests(string formId)
 {
     lock (StaticCache.Gate)
     {
         FieldDigest[] fieldDigests = null;
         if (!StaticCache.FieldDigests.TryGetValue(formId, out fieldDigests))
         {
             StaticCache.FieldDigests[formId] = fieldDigests = ProjectMetadataProvider.GetFieldDigestsAsync(formId).Result;
         }
         return(fieldDigests);
     }
 }
        public Page GetPageMetadataByPageId(string formId, int pageId)
        {
            lock (StaticCache.Gate)
            {
                Dictionary <int, Page> pageMetadatas = null;
                if (!StaticCache.PageMetadata.TryGetValue(formId, out pageMetadatas))
                {
                    StaticCache.PageMetadata[formId] = pageMetadatas = new Dictionary <int, Page>();
                }

                Page pageMetadata = null;
                if (!pageMetadatas.TryGetValue(pageId, out pageMetadata))
                {
                    pageMetadatas[pageId] = pageMetadata = ProjectMetadataProvider.GetPageMetadataAsync(formId, pageId).Result;
                }

                return(pageMetadata);
            }
        }
        public bool UpdateMetadataIfNecessary(string formId, bool isDraftMode, bool isShareable, int dataAccessRuleId)
        {
            var formDigest = GetFormDigest(formId);
            var mustUpdate = formDigest.IsShareable != isShareable || formDigest.IsDraftMode != isDraftMode || formDigest.DataAccessRuleId != dataAccessRuleId;

            if (mustUpdate)
            {
                lock (StaticCache.Gate)
                {
                    var formIds = GetFormIdHierarchyByRootFormId(formId);
                    if (formIds.Length > 0)
                    {
                        var isSuccessful = ProjectMetadataProvider.UpdateFormModeSettings(formIds, isShareable, isDraftMode, dataAccessRuleId).Result;
                        // if (isSuccessful)
                        // {
                        StaticCache.FormDigests = null;
                        // }
                    }
                }
            }
            return(mustUpdate);
        }