コード例 #1
0
        /// <summary>
        ///     Validates the request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="errorMessage">The error message.</param>
        /// <returns></returns>
        public bool ValidateRequest(FormDataRequest request, out string errorMessage)
        {
            errorMessage = string.Empty;

            var messageBuilder = new StringBuilder();

            if (string.IsNullOrWhiteSpace(request.EntityId))
            {
                messageBuilder.Append("EntityId was null.");
            }
            if (string.IsNullOrWhiteSpace(request.FormId))
            {
                messageBuilder.Append("FormId was null.");
            }
            if (string.IsNullOrWhiteSpace(request.Query))
            {
                messageBuilder.Append("Query was null.");
            }
            if (!string.IsNullOrWhiteSpace(request.Query) &&
                !ParseQueryString(request.Query))
            {
                messageBuilder.Append("Failed to parse query string.");
            }

            if (messageBuilder.Length <= 0)
            {
                return(true);
            }

            messageBuilder.Insert(0, "Cannot parse post data.");
            errorMessage = messageBuilder.ToString();

            return(false);
        }
コード例 #2
0
        public IHttpActionResult GetFormData([FromBody] FormDataRequest request)
        {
            if (request == null)
            {
                throw new WebArgumentNullException(nameof(request));
            }

            using (Profiler.Measure("FormController.GetData"))
            {
                string errorMessage;
                if (!_formControllerRequestHandler.ValidateRequest(request, out errorMessage))
                {
                    EventLog.Application.WriteError(errorMessage);
                    return(BadRequest(errorMessage));
                }

                try
                {
                    var response = _formControllerRequestHandler.GetFormData(request);
                    if (response == null)
                    {
                        return(NotFound());
                    }

                    return(Ok(response));
                }
                catch (PlatformSecurityException ex)
                {
                    EventLog.Application.WriteWarning(ex.ToString());
                    return(StatusCode(HttpStatusCode.Forbidden));
                }
                catch (Exception ex)
                {
                    EventLog.Application.WriteError(ex.ToString());
                    return(InternalServerError());
                }
            }
        }
コード例 #3
0
        /// <summary>
        ///     Gets the form data.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public FormDataResponse GetFormData(FormDataRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            var entityIdRef = new EntityRef(request.EntityId);

            // Get the entity data
            EntityData entityData = BulkRequestRunner.GetEntityData(entityIdRef, request.Query, request.Hint);

            // Set the result to NotFound for Basic and BasicWithDemand only
            if (entityData == null)
            {
                return(null);
            }

            var        formId         = new EntityRef(request.FormId).Id;
            EntityData formEntityData = null;

            // Get the form entity data for non gen forms
            if (!EntityTemporaryIdAllocator.IsAllocatedId(formId))
            {
                try
                {
                    formEntityData = GetFormAsEntityData(formId, false);
                }
                catch (Exception ex)
                {
                    EventLog.Application.WriteError("Failed to get form with id {0}. Unable to get initial form control visibility. Error: {1}.", formId, ex);
                }
            }

            ISet <long> initiallyHiddenControls = null;

            if (formEntityData == null)
            {
                return(PackageFormDataResponse(entityData, null));
            }

            IDictionary <long, IExpression> compiledExpressions = null;
            IDictionary <long, string>      controlVisibilityCalculations;

            using (new SecurityBypassContext())
            {
                // Have form. Get any visibility calculations
                controlVisibilityCalculations = GetControlVisibilityCalculations(formEntityData);

                long entityTypeId = GetTypeToEditWithForm(formEntityData);

                if (controlVisibilityCalculations.Count > 0 && entityTypeId > 0)
                {
                    // Now we have all the calculations
                    compiledExpressions = CompileVisibilityCalculations(new EntityRef(entityTypeId), controlVisibilityCalculations);
                }
            }

            if (controlVisibilityCalculations.Count > 0)
            {
                initiallyHiddenControls = GetHiddenControls(entityIdRef.Entity, controlVisibilityCalculations.Keys, compiledExpressions);
            }

            return(PackageFormDataResponse(entityData, initiallyHiddenControls));
        }