Exemplo n.º 1
0
        /// <summary>
        /// ExecuteSPAsync
        /// </summary>
        /// <param name="collectionId"></param>
        /// <param name="spId"></param>
        /// <param name="surveyId"></param>
        /// <returns></returns>
        private async Task <ResponseGridQueryPropertiesResult> ExecuteSPAsync(string collectionId, string spId, string udfSharingRulesId, string udfWildCardCompareId, string query,
                                                                              string sortKey, bool isSortAscending, int pageNumber, int responsesPerPage,
                                                                              string querySetToken)
        {
            RequestOptions option        = new RequestOptions();
            Uri            collectionUri = UriFactory.CreateDocumentCollectionUri(DatabaseName, collectionId);
            var            formResponse  = new FormResponseProperties();
            // Create Stored Procedure Uri
            Uri spUri = UriFactory.CreateStoredProcedureUri(DatabaseName, collectionId, spId);

            // Create the User Defined Function Uris
            Uri udfSharingRulesUri = UriFactory.CreateUserDefinedFunctionUri(DatabaseName, collectionId, udfSharingRulesId);
            Uri udfWildCardUri     = UriFactory.CreateUserDefinedFunctionUri(DatabaseName, collectionId, udfWildCardCompareId);

            try
            {
                return(ExecuteQuery(spId, spUri, query, sortKey, isSortAscending, pageNumber, responsesPerPage,
                                    querySetToken));
            }
            catch (Exception ex)
            {
                var errorCode = ((DocumentClientException)ex.InnerException).Error.Code;
                if (errorCode == "NotFound" || errorCode == "BadRequest")
                {
                    if (await DoesStoredProcedureExist(spUri) == false)
                    {
                        var createSPResponse = await CreateSPAsync(collectionUri, spId);
                    }
                    if (await DoesUserDefinedFunctionExist(udfSharingRulesUri) == false)
                    {
                        var createUDFResponse = await CreateUDFAsync(collectionUri, udfSharingRulesId, CosmosDBUDFKeys.udfSharingRules);
                    }
                    if (await DoesUserDefinedFunctionExist(udfWildCardUri) == false)
                    {
                        var createUDFResponse = await CreateUDFAsync(collectionUri, udfWildCardCompareId, CosmosDBUDFKeys.udfWildCardCompare);
                    }

                    try
                    {
                        return(ExecuteQuery(spId, spUri, query, sortKey, isSortAscending, pageNumber, responsesPerPage,
                                            querySetToken));
                    }
                    catch (Exception ex2)
                    {
                        throw;
                    }
                }
            }
            return(null);
        }
        public static FormResponseProperties ToFormResponseProperties(this FormResponseDetail formResponseDetail)
        {
            if (formResponseDetail == null)
            {
                return(null);
            }

            FormResponseProperties formResponseProperties = new FormResponseProperties
            {
                ResponseId = formResponseDetail.ResponseId,
                FormId     = formResponseDetail.FormId,
                FormName   = formResponseDetail.FormName,

                ParentResponseId = formResponseDetail.ParentResponseId,
                ParentFormId     = formResponseDetail.ParentFormId,
                ParentFormName   = formResponseDetail.ParentFormName,

                RootResponseId = formResponseDetail.RootResponseId,
                RootFormId     = formResponseDetail.RootFormId,
                RootFormName   = formResponseDetail.RootFormName,

                IsNewRecord = formResponseDetail.IsNewRecord,

                RecStatus       = formResponseDetail.RecStatus,
                LastPageVisited = formResponseDetail.LastPageVisited,

                FirstSaveLogonName = formResponseDetail.FirstSaveLogonName,
                LastSaveLogonName  = formResponseDetail.LastSaveLogonName,
                FirstSaveTime      = formResponseDetail.FirstSaveTime,
                LastSaveTime       = formResponseDetail.LastSaveTime,

                UserOrgId = formResponseDetail.UserOrgId,
                UserId    = formResponseDetail.UserId,
                UserName  = formResponseDetail.UserName,

                IsDraftMode           = formResponseDetail.IsDraftMode,
                IsLocked              = formResponseDetail.IsLocked,
                RequiredFieldsList    = formResponseDetail.RequiredFieldsList,
                HiddenFieldsList      = formResponseDetail.HiddenFieldsList,
                HighlightedFieldsList = formResponseDetail.HighlightedFieldsList,
                DisabledFieldsList    = formResponseDetail.DisabledFieldsList,
                ResponseQA            = formResponseDetail.FlattenedResponseQA()
            };

            return(formResponseProperties);
        }
        /// <summary>
        /// GetFormResponseState
        /// </summary>
        /// <param name="responseContext"></param>
        /// <returns></returns>
        public FormResponseProperties GetFormResponseState(IResponseContext responseContext)
        {
            var rootResponseResource = ReadRootResponseResource(responseContext);
            FormResponseProperties formResponseProperties = null;

            if (responseContext.IsRootResponse)
            {
                formResponseProperties = rootResponseResource.FormResponseProperties;
            }
            else
            {
                formResponseProperties = rootResponseResource.GetChildResponse(responseContext);
            }

            // Only return the basic state information (no field values or children)
            formResponseProperties.ResponseQA = new Dictionary <string, string>();
            return(formResponseProperties);
        }
        /// <summary>
        /// ToHierarchicalFormResponseDetail
        /// </summary>
        /// <param name="formResponseProperties"></param>
        /// <param name="formResponseResource"></param>
        /// <returns></returns>
        public static FormResponseDetail ToHierarchicalFormResponseDetail(this FormResponseProperties formResponseProperties, FormResponseResource formResponseResource)
        {
            FormResponseDetail        formResponseDetail = formResponseProperties.ToFormResponseDetail();
            List <FormResponseDetail> flattened          = formResponseDetail.FlattenHierarchy();

            formResponseResource.CascadeThroughChildren(formResponseProperties,
                                                        frp =>
            {
                var frd    = frp.ToFormResponseDetail();
                var parent = flattened.Where(f => f.ResponseId == frp.ParentResponseId).SingleOrDefault();
                if (parent != null)
                {
                    parent.ChildFormResponseDetailList.Add(frd);
                }
                else
                {
                    throw new KeyNotFoundException();
                }
                flattened.Add(frd);
            });
            return(formResponseDetail);
        }
        public static FormResponseProperties CopyTo(this FormResponseProperties source, FormResponseProperties target)
        {
            target.ResponseId = source.ResponseId;
            target.FormId     = source.FormId;
            target.FormName   = source.FormName;

            target.ParentResponseId = source.ParentResponseId;
            target.ParentFormId     = source.ParentFormId;
            target.ParentFormName   = source.ParentFormName;

            target.RootResponseId = source.RootResponseId;
            target.RootFormId     = source.RootFormId;
            target.RootFormName   = source.RootFormName;

            target.IsNewRecord = source.IsNewRecord;

            target.RecStatus       = source.RecStatus;
            target.LastPageVisited = source.LastPageVisited;

            target.FirstSaveLogonName = source.FirstSaveLogonName;
            target.LastSaveLogonName  = source.LastSaveLogonName;
            target.FirstSaveTime      = source.FirstSaveTime;
            target.LastSaveTime       = source.LastSaveTime;

            target.UserOrgId = source.UserOrgId;
            target.UserId    = source.UserId;
            target.UserName  = source.UserName;

            target.IsDraftMode           = source.IsDraftMode;
            target.IsLocked              = source.IsLocked;
            target.RequiredFieldsList    = source.RequiredFieldsList;
            target.HiddenFieldsList      = source.HiddenFieldsList;
            target.HighlightedFieldsList = source.HighlightedFieldsList;
            target.DisabledFieldsList    = source.DisabledFieldsList;

            target.ResponseQA = source.ResponseQA;
            return(target);
        }
        private async Task <bool> LogicallyDeleteResponse(FormResponseResource formResponseResource, FormResponseProperties formResponseProperties)
        {
            if (formResponseProperties.IsRootResponse)
            {
                formResponseResource.LogicalCascadeDeleteChildren(formResponseProperties);
            }
            else // if (formResponseProperties.IsChildResponse)
            {
                formResponseResource.LogicalCascadeDeleteChildren(formResponseProperties);
            }


            return(await Task.FromResult <bool>(true).ConfigureAwait(false));

            //if (formResponseProperties.RecStatus != RecordStatus.Deleted)
            //{
            //    formResponseResource.LogicalCascadeDelete(formResponseProperties);
            //    var result = await Client.UpsertDocumentAsync(formResponseResource.SelfLink, formResponseResource, null).ConfigureAwait(false);
            //}
        }
 private async Task <bool> PhysicallyDeleteResponse(FormResponseResource formResponseResource, FormResponseProperties formResponseProperties)
 {
     if (formResponseProperties.IsRootResponse)
     {
         var result = await Client.DeleteDocumentAsync(formResponseResource.SelfLink).ConfigureAwait(false);
     }
     else // if (formResponseProperties.IsChildResponse)
     {
         var result = await Client.UpsertDocumentAsync(formResponseResource.SelfLink, formResponseResource, null).ConfigureAwait(false);
     }
     return(await Task.FromResult <bool>(false).ConfigureAwait(false));
 }
Exemplo n.º 8
0
        private ResponseGridQueryPropertiesResult ExecuteQuery(string spId, Uri spUri, string query,
                                                               string sortKey, bool isSortAscending,
                                                               int pageNumber, int responsesPerPage,
                                                               string querySetToken)
        {
            var         responsePropertiesList = new List <FormResponseProperties>();
            QueryResult queryResult            = Client.ExecuteStoredProcedureAsync <QueryResult>(spUri, query, sortKey, isSortAscending,
                                                                                                  pageNumber, responsesPerPage, querySetToken).Result;

            foreach (var doc in queryResult.Result)
            {
                FormResponseProperties formResponse = (dynamic)doc;
                responsePropertiesList.Add(formResponse);
            }
            var responseGridQueryPropertiesResult = new ResponseGridQueryPropertiesResult
            {
                ResponsePropertiesList           = responsePropertiesList,
                QuerySetToken                    = queryResult.QuerySetToken,
                NumberOfResponsesReturnedByQuery = queryResult.NumberOfResponsesReturnedByQuery,
                NumberOfResponsesPerPage         = queryResult.NumberOfResponsesPerPage,
                NumberOfResponsesOnSelectedPage  = queryResult.NumberOfResponsesOnSelectedPage,
                PageNumber    = pageNumber,
                NumberOfPages = queryResult.NumberOfPages
            };

            if (queryResult.Message == "Completed")
            {
                return(responseGridQueryPropertiesResult);
            }
            else
            {
                throw new Exception(queryResult.Message);
                // ----------------------------------Error Handling ----------------------------------

                //string continuationToken = string.Empty;
                //int skip = 0;
                //bool isContinuationRequired = false;
                //bool isPostProcessingRequired = false;

                //do
                //{
                //queryResult = Client.ExecuteStoredProcedureAsync<QueryResult>(spUri, query, sortKey, isSortAscending,
                //                         pageNumber, responsesPerPage, querySetToken/*, continuationToken, skip,
                //                         isPostProcessingRequired).Result;

                //foreach (var doc in queryResult.Result)
                //{
                //    FormResponseProperties formResponse = (dynamic)doc;
                //    responsePropertiesList.Add(formResponse);
                //}
                //continuationToken = queryResult.ContinuationToken;
                //skip = queryResult.Skip;
                //    isContinuationRequired = !string.IsNullOrEmpty(continuationToken);
                //    isPostProcessingRequired |= isContinuationRequired;
                //} while (isContinuationRequired);

                //var responseGridQueryPropertiesResult = new ResponseGridQueryPropertiesResult
                //{
                //    ResponsePropertiesList = responsePropertiesList,
                //    QuerySetToken = queryResult.QuerySetToken,
                //    NumberOfResponsesReturnedByQuery = queryResult.NumberOfResponsesReturnedByQuery,
                //    NumberOfResponsesPerPage = queryResult.NumberOfResponsesPerPage,
                //    NumberOfResponsesOnSelectedPage = queryResult.NumberOfResponsesOnSelectedPage,
                //    PageNumber = pageNumber,
                //    NumberOfPages = queryResult.NumberOfPages
                //    //IsPostProcessingRequired = isPostProcessingRequired
                //};

                //if (isPostProcessingRequired)
                //{
                //    List<FormResponseProperties> pageResult = null;

                //    skip = pageNumber * responsesPerPage - responsesPerPage;
                //    sortKey = string.IsNullOrWhiteSpace(sortKey) ? MetaColumn.DateUpdated : sortKey;
                //    switch (sortKey)
                //    {
                //        case MetaColumn.UserEmail:
                //            pageResult = (isSortAscending
                //                         ? responsePropertiesList.OrderBy(r => r.UserName.ToUpperInvariant())
                //                         : responsePropertiesList.OrderByDescending(r => r.UserName.ToUpperInvariant()))
                //                         .Skip(skip).Take(responsesPerPage).ToList();

                //            break;
                //        case MetaColumn.IsDraftMode:
                //        case MetaColumn.Mode:
                //            pageResult = (isSortAscending
                //                         ? responsePropertiesList.OrderBy(r => r.IsDraftMode)
                //                         : responsePropertiesList.OrderByDescending(r => r.IsDraftMode))
                //                         .Skip(skip).Take(responsesPerPage).ToList();

                //            break;
                //        case MetaColumn.DateCreated:
                //            pageResult = (isSortAscending
                //                         ? responsePropertiesList.OrderBy(r => r.FirstSaveTime)
                //                         : responsePropertiesList.OrderByDescending(r => r.FirstSaveTime))
                //                         .Skip(skip).Take(responsesPerPage).ToList();

                //            break;
                //        case MetaColumn.DateUpdated:
                //            pageResult = (isSortAscending
                //                         ? responsePropertiesList.OrderBy(r => r.LastSaveTime)
                //                         : responsePropertiesList.OrderByDescending(r => r.LastSaveTime))
                //                         .Skip(skip).Take(responsesPerPage).ToList();

                //            break;
                //        default:
                //            pageResult = (isSortAscending
                //                         ? responsePropertiesList.OrderBy(r => r.ResponseQA.ContainsKey(sortKey) && r.ResponseQA[sortKey] != null ? r.ResponseQA[sortKey].ToUpperInvariant() : string.Empty)
                //                         : responsePropertiesList.OrderByDescending(r => r.ResponseQA.ContainsKey(sortKey) && r.ResponseQA[sortKey] != null ? r.ResponseQA[sortKey].ToUpperInvariant() : string.Empty))
                //                         .Skip(skip).Take(responsesPerPage).ToList();
                //            break;
                //    }
                //    var totalResponseCount = responsePropertiesList.Count();
                //    responseGridQueryPropertiesResult.NumberOfResponsesReturnedByQuery = totalResponseCount;
                //    responseGridQueryPropertiesResult.NumberOfResponsesOnSelectedPage = pageResult.Count();
                //    responseGridQueryPropertiesResult.ResponsePropertiesList = pageResult;
                //    responseGridQueryPropertiesResult.NumberOfPages = totalResponseCount / responsesPerPage + 1;
                //}
                return(responseGridQueryPropertiesResult);
            }
        }
        public static FormResponseDetail ToFormResponseDetail(this FormResponseProperties formResponseProperties)
        {
            if (formResponseProperties == null)
            {
                return(null);
            }

            FormResponseDetail formResponseDetail = new FormResponseDetail
            {
                ResponseId = formResponseProperties.ResponseId,
                FormId     = formResponseProperties.FormId,
                FormName   = formResponseProperties.FormName,

                ParentResponseId = formResponseProperties.ParentResponseId,
                ParentFormId     = formResponseProperties.ParentFormId,
                ParentFormName   = formResponseProperties.ParentFormName,

                RootResponseId = formResponseProperties.RootResponseId,
                RootFormId     = formResponseProperties.RootFormId,
                RootFormName   = formResponseProperties.RootFormName,

                IsNewRecord = formResponseProperties.IsNewRecord,

                RecStatus       = formResponseProperties.RecStatus,
                LastPageVisited = formResponseProperties.LastPageVisited,

                FirstSaveLogonName = formResponseProperties.FirstSaveLogonName,
                LastSaveLogonName  = formResponseProperties.LastSaveLogonName,
                FirstSaveTime      = formResponseProperties.FirstSaveTime,
                LastSaveTime       = formResponseProperties.LastSaveTime,

                UserOrgId = formResponseProperties.UserOrgId,
                UserId    = formResponseProperties.UserId,
                UserName  = formResponseProperties.UserName,

                IsRelatedView         = formResponseProperties.IsRelatedView,
                IsDraftMode           = formResponseProperties.IsDraftMode,
                IsLocked              = formResponseProperties.IsLocked,
                RequiredFieldsList    = formResponseProperties.RequiredFieldsList,
                HiddenFieldsList      = formResponseProperties.HiddenFieldsList,
                HighlightedFieldsList = formResponseProperties.HighlightedFieldsList,
                DisabledFieldsList    = formResponseProperties.DisabledFieldsList,
            }.ResolveMetadataDependencies() as FormResponseDetail;

            var formDigest = _metadataAccessor.GetFormDigest(formResponseProperties.FormId);

            foreach (var qaFieldKVP in formResponseProperties.ResponseQA)
            {
                var fieldName          = qaFieldKVP.Key;
                var pageId             = formDigest.FieldNameToPageIdDirectory[fieldName];
                var pageResponseDetail = formResponseDetail
                                         .PageResponseDetailList
                                         .Where(prd => prd.PageId == pageId)
                                         .SingleOrDefault() ?? new PageResponseDetail
                {
                    PageId     = pageId,
                    PageNumber = _metadataAccessor.GetPageDigestByPageId(formDigest.FormId, pageId).PageNumber,
                    FormId     = formDigest.FormId,
                    FormName   = formDigest.FormName,
                    ResponseId = formResponseProperties.ResponseId,
                };
                pageResponseDetail.ResponseQA[fieldName] = qaFieldKVP.Value;
                formResponseDetail.AddPageResponseDetail(pageResponseDetail);
            }

            return(formResponseDetail);
        }