Exemple #1
0
        private void ActivityResponseReceived(ActivityDO activityDo, ActivityResponse responseType)
        {
            var template = _activityTemplate.GetByKey(activityDo.ActivityTemplateId);

            var factDO = new FactDO()
            {
                PrimaryCategory   = "Container",
                SecondaryCategory = "Activity",
                Activity          = "Process Execution",
                Status            = responseType.ToString(),
                ObjectId          = activityDo.Id.ToString(),
                Fr8UserId         = _security.GetCurrentUser(),
                CreatedByID       = _security.GetCurrentUser(),
                Data = string.Join(Environment.NewLine, "Activity Name: " + template?.Name)
            };

            SaveAndLogFact(factDO);
        }
Exemple #2
0
        private ActivityTemplateSummaryDTO GetActivityTemplate(ActivityDO ad)
        {
            if (ad.ActivityTemplate != null)
            {
                return(Mapper.Map <ActivityTemplateSummaryDTO>(ad.ActivityTemplate));
            }

            if (ad.ActivityTemplateId == Guid.Empty)
            {
                return(null);
            }

            return(Mapper.Map <ActivityTemplateSummaryDTO>(_activityTemplate.GetByKey(ad.ActivityTemplateId)));
        }
        /// <summary>
        /// Prepare AuthToken for ActionDTO request message.
        /// </summary>
        public void PrepareAuthToken(IUnitOfWork uow, ActivityDTO activityDTO)
        {
            // Fetch Action.
            var activity = uow.PlanRepository.GetById <ActivityDO>(activityDTO.Id);

            if (activity == null)
            {
                throw new ApplicationException("Could not find Action.");
            }

            if (activity.ActivityTemplateId == null)
            {
                throw new ApplicationException("Activity without a template should not exist");
            }

            var activityTemplate = _activityTemplate.GetByKey(activity.ActivityTemplateId);

            // Try to find AuthToken if terminal requires authentication.
            if (activityTemplate.NeedsAuthentication &&
                activityTemplate.Terminal.AuthenticationType != AuthenticationType.None)
            {
                AuthorizationTokenDO authToken;
                TryAssignAuthToken(uow, activity.Fr8AccountId, activityTemplate.TerminalId, activity, out authToken);

                // If AuthToken is not empty, fill AuthToken property for ActionDTO.
                if (authToken != null && !string.IsNullOrEmpty(authToken.Token))
                {
                    activityDTO.AuthToken = new AuthorizationTokenDTO
                    {
                        Id = authToken.Id.ToString(),
                        ExternalAccountId   = authToken.ExternalAccountId,
                        ExternalAccountName = string.IsNullOrEmpty(authToken.ExternalAccountName) ? authToken.ExternalAccountId : authToken.ExternalAccountName,
                        ExternalDomainId    = authToken.ExternalDomainId,
                        ExternalDomainName  = string.IsNullOrEmpty(authToken.ExternalDomainName) ? authToken.ExternalDomainId : authToken.ExternalDomainName,
                        UserId               = authToken.UserID,
                        Token                = authToken.Token,
                        ExpiresAt            = authToken.ExpiresAt,
                        AdditionalAttributes = authToken.AdditionalAttributes
                    };
                }
                else
                {
                    throw new InvalidTokenRuntimeException(activityDTO);
                }

                if (String.IsNullOrEmpty(authToken.Token))
                {
                    throw new InvalidTokenRuntimeException(activityDTO);
                }
            }

            if (activityDTO.AuthToken == null)
            {
                if (activity.Fr8AccountId != null)
                {
                    activityDTO.AuthToken = new AuthorizationTokenDTO
                    {
                        UserId = activity.Fr8AccountId,
                    };
                }
            }
        }
        public async Task <PayloadDTO> Run(IUnitOfWork uow, ActivityDO curActivityDO, ActivityExecutionMode curActionExecutionMode, ContainerDO curContainerDO)
        {
            if (curActivityDO == null)
            {
                throw new ArgumentNullException(nameof(curActivityDO));
            }

            //FR-2642 Logic to skip execution of activities with "SkipAtRunTime" Tag
            var template = _activityTemplate.GetByKey(curActivityDO.ActivityTemplateId);

            if (template.Tags != null && template.Tags.Contains("SkipAtRunTime", StringComparison.InvariantCultureIgnoreCase))
            {
                return(null);
            }

            EventManager.ActionStarted(curActivityDO, curContainerDO);

            // Explicitly extract authorization token to make AuthTokenDTO pass to activities.
            curActivityDO.AuthorizationToken = uow.AuthorizationTokenRepository.FindTokenById(curActivityDO.AuthorizationTokenId);

            try
            {
                IEnumerable <KeyValuePair <string, string> > parameters = null;

                if (curActionExecutionMode != ActivityExecutionMode.InitialRun)
                {
                    parameters = new List <KeyValuePair <string, string> >()
                    {
                        new KeyValuePair <string, string>("scope", "childActivities")
                    };
                }

                if (curActionExecutionMode != ActivityExecutionMode.ReturnFromChildren)
                {
                    EventManager.ActivityRunRequested(curActivityDO, curContainerDO);
                }

                var activtiyClone = (ActivityDO)curActivityDO.Clone();

                using (var storage = _crateManager.UpdateStorage(() => activtiyClone.CrateStorage))
                {
                    var configurationControls = storage.CrateContentsOfType <StandardConfigurationControlsCM>().FirstOrDefault();

                    if (configurationControls != null)
                    {
                        var payloadStorage = _crateManager.GetStorage(curContainerDO.CrateStorage);
                        _upstreamDataExtractionService.ExtactAndAssignValues(configurationControls, payloadStorage);
                    }
                }

                var payloadDTO = await CallTerminalActivityAsync <PayloadDTO>(uow, "run", parameters, activtiyClone, curContainerDO.Id);

                EventManager.ActivityResponseReceived(curActivityDO, ActivityResponse.RequestSuspend);

                return(payloadDTO);
            }
            catch (Exception e)
            {
                ReportActivityInvocationError(curActivityDO, e.Message, curContainerDO.Id.ToString(), curActivityDO.Id.ToString(), EventManager.TerminalRunFailed);
                throw;
            }
        }