private async Task DispatchEvents(string org, string app, List <InstanceEvent> events) { foreach (InstanceEvent instanceEvent in events) { await eventService.SaveInstanceEvent(instanceEvent, org, app); } }
private async Task DispatchEventsToStorage(Instance instance, List <InstanceEvent> events) { string org = instance.Org; string app = instance.AppId.Split("/")[1]; foreach (InstanceEvent instanceEvent in events) { await _eventService.SaveInstanceEvent(instanceEvent, org, app); } }
public async Task DispatchProcessEventsToStorage(Instance instance, List <InstanceEvent> events) { string org = instance.Org; string app = instance.AppId.Split("/")[1]; foreach (InstanceEvent instanceEvent in events) { instanceEvent.InstanceId = instance.Id; await _eventService.SaveInstanceEvent(instanceEvent, org, app); } }
/// <summary> /// Creates an event and dispatches it to the eventService for storage. /// </summary> private async Task DispatchEvent(string eventType, Instance instance) { UserContext userContext = await userHelper.GetUserContext(HttpContext); string app = instance.AppId.Split("/")[1]; int authenticationLevel = userContext.AuthenticationLevel; int userId = userContext.UserId; // Create and store the instance created event InstanceEvent instanceEvent = new InstanceEvent { AuthenticationLevel = authenticationLevel, EventType = eventType, InstanceId = instance.Id, InstanceOwnerId = instance.InstanceOwnerId, UserId = userId, WorkflowStep = instance.Process?.CurrentTask?.ProcessElementId, }; await eventService.SaveInstanceEvent(instanceEvent, instance.Org, app); }
private async Task DispatchEvent(string eventType, Instance instance, Guid dataGuid) { UserContext userContext = await userHelper.GetUserContext(HttpContext); string workflowStep = instance.Process?.CurrentTask?.ProcessElementId; string app = instance.AppId.Split("/")[1]; string org = instance.Org; InstanceEvent instanceEvent = new InstanceEvent { AuthenticationLevel = userContext.AuthenticationLevel, EventType = eventType, DataId = dataGuid.ToString(), InstanceId = instance.Id, InstanceOwnerId = instance.InstanceOwnerId, UserId = userContext.UserId, WorkflowStep = workflowStep, }; await eventService.SaveInstanceEvent(instanceEvent, org, app); }
public async Task <IActionResult> Index([FromBody] AltinnCoreApiModel model, string org, string service, Guid instanceId, ApiMode apiMode) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); ApiResult apiResult = new ApiResult(); // Getting the Service Specific Implementation contained in external DLL migrated from TUL IServiceImplementation serviceImplementation = _execution.GetServiceImplementation(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 = RequestHelper.GetRequestContext(Request.Query, Guid.Empty); requestContext.UserContext = await _userHelper.GetUserContext(HttpContext); requestContext.Party = requestContext.UserContext.Party; if (Request.Headers.Keys.Contains(VALIDATION_TRIGGER_FIELD)) { requestContext.ValidationTriggerField = Request.Headers[VALIDATION_TRIGGER_FIELD]; } // Get the serviceContext containing all metadata about current service ServiceContext serviceContext = _execution.GetServiceContext(org, service, false); // Assign the Requestcontext to the serviceImplementation so // service developer can use the information in any of the service events that is called serviceImplementation.SetContext(requestContext, serviceContext, null, ModelState); // Set the platform services to the ServiceImplementation so the AltinnCore service can take // use of the plattform services serviceImplementation.SetPlatformServices(_platformSI); ViewBag.PlatformServices = _platformSI; dynamic serviceModel = ParseApiBody(serviceImplementation.GetServiceModelType(), out apiResult, model); if (serviceModel == null) { // The parsing did not create any result Response.StatusCode = 403; return(new ObjectResult(apiResult)); } serviceImplementation.SetServiceModel(serviceModel); // ServiceEvent 2: HandleGetDataEvent // Runs the event where the service developer can implement functionality to retrieve data from internal/external sources // based on the data in the service model await serviceImplementation.RunServiceEvent(ServiceEventType.DataRetrieval); // RunService 3: Calcuation await serviceImplementation.RunServiceEvent(ServiceEventType.Calculation); // ServiceEvent 3: HandleCalculationEvent // Perform Calculation defined by the service developer // Only perform when the mode is to create a new instance or to specific calculate if (apiMode.Equals(ApiMode.Calculate) || apiMode.Equals(ApiMode.Create)) { if (apiMode.Equals(ApiMode.Calculate)) { // Returns a updated Service model with new calculated data. return(Ok(serviceModel)); } } // Run the model Validation that handles validation defined on the model TryValidateModel(serviceModel); // ServiceEvent 4: HandleValidationEvent // Perform additional Validation defined by the service developer. Runs when the ApiMode is set to Validate or Complete. if (apiMode.Equals(ApiMode.Validate) || apiMode.Equals(ApiMode.Complete)) { await serviceImplementation.RunServiceEvent(AltinnCore.ServiceLibrary.Enums.ServiceEventType.Validation); } // If ApiMode is only validate the instance should not be created and only return any validation errors if (apiMode.Equals(ApiMode.Validate) || (!ModelState.IsValid && !apiMode.Equals(ApiMode.Create))) { MapModelStateToApiResultForClient(ModelState, apiResult, serviceContext); if (apiResult.Status.Equals(ApiStatusType.ContainsError)) { if (apiMode.Equals(ApiMode.Validate)) { Response.StatusCode = 202; } else { Response.StatusCode = 400; } return(new ObjectResult(apiResult)); } return(Ok(apiResult)); } Instance instance = await _instance.GetInstance(service, org, requestContext.UserContext.PartyId, instanceId); Guid dataId = Guid.Parse(instance.Data.Find(m => m.ElementType.Equals(FORM_ID)).Id); // Save Formdata to database this._data.UpdateData( serviceModel, instanceId, serviceImplementation.GetServiceModelType(), org, service, requestContext.UserContext.PartyId, dataId); // Create and store instance saved event if (apiMode.Equals(ApiMode.Update)) { InstanceEvent instanceEvent = new InstanceEvent { AuthenticationLevel = requestContext.UserContext.AuthenticationLevel, EventType = InstanceEventType.Saved.ToString(), InstanceId = instance.Id, InstanceOwnerId = instance.InstanceOwnerId.ToString(), UserId = requestContext.UserContext.UserId, WorkflowStep = instance.Process.CurrentTask }; await _event.SaveInstanceEvent(instanceEvent, org, service); } if (apiMode.Equals(ApiMode.Complete)) { ServiceState currentState = _workflowSI.MoveServiceForwardInWorkflow(instanceId, org, service, requestContext.UserContext.PartyId); instance.Process = new Storage.Interface.Models.ProcessState() { CurrentTask = currentState.State.ToString(), IsComplete = false, }; Instance updatedInstance = await _instance.UpdateInstance(instance, service, org, requestContext.UserContext.PartyId, instanceId); Response.StatusCode = 200; apiResult.InstanceId = instanceId; apiResult.Instance = updatedInstance; apiResult.Status = ApiStatusType.Ok; apiResult.NextStepUrl = _workflowSI.GetUrlForCurrentState(instanceId, org, service, currentState.State); apiResult.NextState = currentState.State; return(new ObjectResult(apiResult)); } apiResult.InstanceId = instanceId; apiResult.Status = ApiStatusType.Ok; if (!requestContext.RequiresClientSideReleoad) { return(Ok(apiResult)); } { Response.StatusCode = 303; return(new ObjectResult(apiResult)); } }
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)); }