public async Task <IActionResult> CompleteAndSendIn(string org, string service, int partyId, Guid instanceGuid, string view) { // Dependency Injection: Getting the Service Specific Implementation based on the service parameter data store // Will compile code and load DLL in to memory for AltinnCore IServiceImplementation serviceImplementation = _execution.GetServiceImplementation(org, service, false); // Get the serviceContext containing all metadata about current service ServiceContext serviceContext = _execution.GetServiceContext(org, service, false); // Create and populate the RequestContext object and make it available for the service implementation so // service developer can implement logic based on information about the request and the user performing // the request RequestContext requestContext = await PopulateRequestContext(instanceGuid); serviceImplementation.SetPlatformServices(_platformSI); // Assign data to the ViewBag so it is available to the service views or service implementation PopulateViewBag(org, service, instanceGuid, 0, requestContext, serviceContext, _platformSI); // Getting the Form Data Instance instance = await _instance.GetInstance(service, org, requestContext.UserContext.PartyId, instanceGuid); Guid.TryParse(instance.Data.Find(m => m.ElementType == FORM_ID).Id, out Guid dataId); object serviceModel = _data.GetFormData(instanceGuid, serviceImplementation.GetServiceModelType(), org, service, requestContext.UserContext.PartyId, dataId); serviceImplementation.SetServiceModel(serviceModel); ViewBag.FormID = instanceGuid; ViewBag.ServiceContext = serviceContext; serviceImplementation.SetContext(requestContext, serviceContext, null, ModelState); await serviceImplementation.RunServiceEvent(ServiceEventType.Validation); ApiResult apiResult = new ApiResult(); if (ModelState.IsValid) { ServiceState currentState = _workflowSI.MoveServiceForwardInWorkflow(instanceGuid, org, service, requestContext.UserContext.PartyId); if (currentState.State == WorkflowStep.Archived) { await _instance.ArchiveInstance(serviceModel, serviceImplementation.GetServiceModelType(), service, org, requestContext.UserContext.PartyId, instanceGuid); apiResult.NextState = currentState.State; } // Create and store the instance submitted event InstanceEvent instanceEvent = new InstanceEvent { AuthenticationLevel = requestContext.UserContext.AuthenticationLevel, EventType = InstanceEventType.Submited.ToString(), InstanceId = instance.Id, InstanceOwnerId = instance.InstanceOwnerId.ToString(), UserId = requestContext.UserContext.UserId, WorkflowStep = instance.Process.CurrentTask, }; await _event.SaveInstanceEvent(instanceEvent, org, service); } ModelHelper.MapModelStateToApiResult(ModelState, apiResult, serviceContext); if (apiResult.Status.Equals(ApiStatusType.ContainsError)) { Response.StatusCode = 202; } else { Response.StatusCode = 200; } return(new ObjectResult(apiResult)); }