private async Task <ActionResult> PutFormData(string org, string app, Instance instance, Guid dataGuid, string dataType)
        {
            int instanceOwnerPartyId = int.Parse(instance.InstanceOwner.PartyId);

            string classRef     = _appResourcesService.GetClassRefForLogicDataType(dataType);
            Guid   instanceGuid = Guid.Parse(instance.Id.Split("/")[1]);

            ModelDeserializer deserializer = new ModelDeserializer(_logger, _altinnApp.GetAppModelType(classRef));
            object            serviceModel = await deserializer.DeserializeAsync(Request.Body, Request.ContentType);

            if (!string.IsNullOrEmpty(deserializer.Error))
            {
                return(BadRequest(deserializer.Error));
            }

            if (serviceModel == null)
            {
                return(BadRequest("No data found in content"));
            }

            string serviceModelJsonString = JsonSerializer.Serialize(serviceModel);

            bool changedByCalculation = false;

            try
            {
                changedByCalculation = await _altinnApp.RunProcessDataWrite(instance, dataGuid, serviceModel);
            }
            catch (NotImplementedException)
            {
                // Trigger application business logic the old way. DEPRICATED
                changedByCalculation = await _altinnApp.RunCalculation(serviceModel);
            }

            await UpdatePresentationTextsOnInstance(instance, dataType, serviceModel);
            await UpdateDataValuesOnInstance(instance, dataType, serviceModel);

            // Save Formdata to database
            DataElement updatedDataElement = await _dataService.UpdateData(
                serviceModel,
                instanceGuid,
                _altinnApp.GetAppModelType(classRef),
                org,
                app,
                instanceOwnerPartyId,
                dataGuid);

            SelfLinkHelper.SetDataAppSelfLinks(instanceOwnerPartyId, instanceGuid, updatedDataElement, Request);

            string dataUrl = updatedDataElement.SelfLinks.Apps;

            if (changedByCalculation)
            {
                string            updatedServiceModelString = JsonSerializer.Serialize(serviceModel);
                CalculationResult calculationResult         = new CalculationResult(updatedDataElement);
                try
                {
                    Dictionary <string, object> changedFields = JsonHelper.FindChangedFields(serviceModelJsonString, updatedServiceModelString);
                    calculationResult.ChangedFields = changedFields;
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Unable to determine changed fields");
                }

                return(StatusCode((int)HttpStatusCode.SeeOther, calculationResult));
            }

            return(Created(dataUrl, updatedDataElement));
        }