コード例 #1
0
        /// <summary>
        ///     Runs all steps and user interaction that is required during the conversion
        /// </summary>
        public WorkflowResult RunWorkflow(Job job)
        {
            try
            {
                _stopwatch = new Stopwatch();
                _stopwatch.Start();
                JobEventsManager.RaiseJobStarted(job, Thread.CurrentThread.ManagedThreadId.ToString());

                PrepareAndRun(job);
            }
            catch (AbortWorkflowException ex)
            {
                // we need to clean up the job when it was cancelled
                _logger.Warn(ex.Message + " No output will be created.");
                WorkflowResult = WorkflowResult.AbortedByUser;

                SendJobEvents(job);
            }
            catch (WorkflowException ex)
            {
                _logger.Error(ex.Message);
                WorkflowResult = WorkflowResult.Error;

                SendJobEvents(job);
            }
            catch (ProcessingException ex)
            {
                var errorMessage = ex.ErrorCode + " / " + ex.Message;
                if (ex.InnerException != null)
                {
                    errorMessage += Environment.NewLine + ex.InnerException;
                }
                _logger.Error(errorMessage);

                LastError = ex.ErrorCode;

                HandleError(ex.ErrorCode);
                WorkflowResult = WorkflowResult.Error;

                SendJobEvents(job);
            }
            catch (ManagePrintJobsException)
            {
                throw;
            }
            catch (InterruptWorkflowException)
            {
                throw;
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                WorkflowResult = WorkflowResult.Error;
                SendJobEvents(job);

                throw;
            }

            return(WorkflowResult);
        }
コード例 #2
0
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            this.btnSubmit.Enabled = false;

            WorkflowResult result = null;

            if (this.InstanceId == Guid.Empty)
            {
                this.m_Leave        = new Leave();
                this.m_Leave.ID     = this.tbGuid.Text;
                this.m_Leave.Name   = this.tbName.Text;
                this.m_Leave.Days   = (int)this.nudDays.Value;
                this.m_Leave.Cause  = tbCause.Text;
                this.m_Leave.iState = 0;
                result            = EAS.Application.Instance.WorkflowRuntime.CreateWorkflow(this, this.m_Leave);
                this.m_InstanceId = result.InstanceId;
            }
            else
            {
                result = EAS.Application.Instance.WorkflowRuntime.Submit(this);
            }

            this.OnWorkflowResultChaned(result);
            this.btnClose_Click(this.btnClose, e);
        }
コード例 #3
0
        private void PrepareAndRun(Job job)
        {
            WorkflowResult = WorkflowResult.Init;

            _logger.Debug("Starting conversion...");

            var originalMetadata = job.JobInfo.Metadata.Copy();

            job.InitMetadataWithTemplates();

            JobDataUpdater.UpdateTokensAndMetadata(job);

            _logger.Debug("Starting PrintJobWindow");

            try
            {
                DoWorkflowWork(job);

                WorkflowResult = WorkflowResult.Finished;
            }
            catch (ManagePrintJobsException)
            {
                // revert metadata changes and rethrow exception
                job.JobInfo.Metadata = originalMetadata;
                throw;
            }
            finally
            {
                OnJobFinished(EventArgs.Empty);
            }
        }
コード例 #4
0
ファイル: Add.cshtml.cs プロジェクト: ena-mx/NetBlog
        public async Task <ActionResult> OnPostAsync([FromServices] BlogEntryComponentFactory blogEntryComponentFactory)
        {
            if (blogEntryComponentFactory == null)
            {
                throw new ArgumentNullException(nameof(blogEntryComponentFactory));
            }

            if (!ModelState.IsValid)
            {
                return(Page());
            }

            var component = blogEntryComponentFactory.New();

            WorkflowResult result = await component.Create(
                BlogEntryUpdateRequest.UriKey,
                BlogEntryUpdateRequest.Title,
                BlogEntryUpdateRequest.MinutesToRead,
                BlogEntryUpdateRequest.TextIntro,
                BlogEntryUpdateRequest.TextEntry,
                BlogEntryUpdateRequest.KeyWordId
                );

            if (!result.Success)
            {
                for (int i = 0; i < result.Errors.Length; i++)
                {
                    ModelState.AddModelError("", result.Errors[i]);
                }
                return(Page());
            }

            return(RedirectToPage("./Edit", new { id = BlogEntryUpdateRequest.UriKey }));
        }
コード例 #5
0
        public async Task <WorkflowResult> CancelAsync(Guid userId)
        {
            using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    WorkflowResult workflowResult = await _decorated.CancelAsync(userId);

                    if (workflowResult.Success)
                    {
                        transactionScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                    return(workflowResult);
                }
                catch (Exception ex)
                {
                    Transaction.Current.Rollback();
                    int errorId = await _applicationLog.LogExceptionAsync(ex);

                    return(new WorkflowResult(
                               new[] {
                        Resources.Resource.InternalServerErrorMessage,
                        string.Format(Resources.Resource.GeneratedErrorIdMessage, errorId)
                    }));
                }
            }
        }
コード例 #6
0
        public void Process(WorkflowPipelineArgs args)
        {
            Item          item         = args.DataItem;
            string        stateId      = item.State.GetWorkflowState().StateID;
            ProcessorItem workflowItem = args.ProcessorItem;
            string        langs        = workflowItem.InnerItem.Fields["LanguagesToWaitFor"].Value;
            string        commandID    = workflowItem.InnerItem.Fields["CommandToExecute"].Value;

            if (commandID == "")
            {
                Log.Error("WaitForLanguage action failed. The field 'CommandToExecute' value is not set.", this);
                return;
            }
            Item command = item.Database.Items[commandID];

            if (command["Next state"] == "")
            {
                Log.Error("WaitForLanguage action failed. The field 'Next State' value of the command is not set.", this);
                return;
            }
            bool result = true;

            foreach (Language lang in item.Languages)
            {
                if (langs != "")
                {
                    if (langs.IndexOf(lang.GetItem(item.Database).ID.ToString()) == -1)
                    {
                        continue;
                    }
                }
                if (lang.Name == item.Language.Name)
                {
                    continue;
                }

                Item          langItem      = item.Database.Items[item.Paths.FullPath, lang, item.Version];
                WorkflowState workflowState = langItem.State.GetWorkflowState();

                result = result && (workflowState.StateID == stateId || workflowState.FinalState);
            }
            if (result)
            {
                foreach (Language lang in item.Languages)
                {
                    Item langItem = item.Database.Items[item.Paths.FullPath, lang, item.Version];

                    WorkflowState state = langItem.State.GetWorkflowState();

                    if (workflowItem.InnerItem.Parent.ID.ToString() == state.StateID)
                    {
                        WorkflowResult execute = CommandExecuter.Execute(commandID, langItem, "", true);
                        if (!execute.Succeeded)
                        {
                            Log.Error("WaitForLanguage action failed: " + execute.Message, this);
                        }
                    }
                }
            }
        }
コード例 #7
0
        public FuncTask <WorkflowResult> Approval(object wfAddIn)
        {
            FuncTask <WorkflowResult> task     = new FuncTask <WorkflowResult>();
            WorkflowResult            wfResult = this.GetInstanceID(wfAddIn);

            if (wfResult.InstanceId != Guid.Empty)
            {
                WfApprovalWindow wfApproval = new WfApprovalWindow();
                wfApproval.Closed += (s, e) =>
                {
                    bool flag = wfApproval.DialogResult.HasValue ? wfApproval.DialogResult.Value : false;
                    if (flag)
                    {
                        task = this.Approval(wfResult.InstanceId, ContextHelper.Account.LoginID, wfApproval.Result, wfApproval.Comment);
                    }
                    else
                    {
                        task.Complete(wfResult);
                    }
                };
                wfApproval.Show();
            }
            else
            {
                task.Complete(wfResult);
            }
            return(task);
        }
コード例 #8
0
ファイル: WorkflowBase.cs プロジェクト: charlesj/Netherpad
        public WorkflowResult Execute()
        {
            var results = new WorkflowResult();
            this.context.StartTransaction();
            foreach (var step in this.steps)
            {
                // run the step.
                var resultObj = step.ExecutionMethod.Invoke(step.WorkflowStep, step.BuildArgs(paramsWithValues));
                if (resultObj is WorkflowStepResult)
                {
                    // extract chainable values
                    this.ExtractAvailableParametersFromResult(resultObj, step.StepNumber);
                    // add to result set
                    var stepResult = resultObj as WorkflowStepResult;
                    // add the step to the results
                    results.Results.Add(stepResult);
                    // if the step was not sucessful, break from the running
                    // and rollback the transaction
                    if (!stepResult.Success)
                    {
                        this.context.Rollback();
                        break;
                    }
                }
            }

            // if they were all successful, commit the transaction.
            if (results.TotalSuccess)
            {
                this.context.Commit();
            }

            return results;
        }
コード例 #9
0
        public virtual WorkflowResult RunWorkflow(string workflowName, Dictionary<string, object> parameters, object[] extensions = null)
        {
            var retVal = new WorkflowResult();
            parameters["ResultArgument"] = retVal;

            var activity = _activityProvider.GetWorkflowActivity(workflowName);
            if (activity == null)
            {
                throw new ArgumentException("Activity (workflow) not found by name: " + workflowName);
            }

            //var validationResults = ActivityValidationServices.Validate(activity);
            //if (validationResults.Errors.Count() == 0)
            //{
            var invoker = new WorkflowInvoker(activity);
            if (extensions != null)
            {
                foreach (var ext in extensions)
                {
                    invoker.Extensions.Add(ext);
                }
            }

            invoker.Invoke(parameters);

            //}
            //else
            //{
            //    throw new ValidationException();
            //}

            //ActivityInvoker.Invoke(activity, parameters, extensions);
            return retVal;
        }
コード例 #10
0
        public static MatchingResultDto[] GetMatchings(string code, string pattern, LanguageFlags analyzedLanguages,
                                                       LanguageFlags?patternLanguages = null)
        {
            var sourceCodeRep = new MemoryCodeRepository(code);
            var patternsRep   = new MemoryPatternsRepository();
            var workflow      = new Workflow(sourceCodeRep, analyzedLanguages, patternsRep)
            {
                Logger = new LoggerMessageCounter()
            };

            var processor   = new DslProcessor();
            var patternNode = (PatternNode)processor.Deserialize(pattern, patternLanguages ?? LanguageExt.AllPatternLanguages);
            var p           = new Pattern
            {
                Data      = patternNode,
                DebugInfo = pattern
            };
            var patternsConverter = new PatternConverter(
                new JsonUstNodeSerializer(typeof(UstNode), typeof(PatternVarDef)));

            patternsRep.Add(patternsConverter.ConvertBack(new List <Pattern>()
            {
                p
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults.ToDto(workflow.SourceCodeRepository)
                                                  .OrderBy(r => r.PatternKey)
                                                  .ToArray();

            return(matchingResults);
        }
コード例 #11
0
ファイル: AppWorkflow.cs プロジェクト: dmitrkov/A2v10
        public static void ResumeWorkflowTimer(IApplicationHost host, IDbContext dbContext, IMessaging messaging, Int64 processId)
        {
            AppWorkflow aw     = null;
            var         result = new WorkflowResult
            {
                InboxIds = new List <Int64>()
            };

            try
            {
                var      pi   = ProcessInfo.Load(dbContext, processId, 0);
                var      def  = WorkflowDefinition.Load(pi);
                Activity root = def.LoadFromDefinition();
                aw = Create(dbContext, root, null, def.Identity);
                aw._application.Extensions.Add(dbContext);
                aw._application.Extensions.Add(messaging);
                aw._application.Extensions.Add(host);
                aw._application.Extensions.Add(result);
                WorkflowApplicationInstance instance = WorkflowApplication.GetInstance(pi.WorkflowId, aw._application.InstanceStore);
                aw._application.Load(instance, _wfTimeSpan);
                aw._application.Run(_wfTimeSpan);
            }
            catch (Exception ex)
            {
                if (!CatchWorkflow(aw, ex))
                {
                    throw;
                }
            }
            finally
            {
                ProcessFinally(aw);
            }
        }
コード例 #12
0
        public void Setup()
        {
            _workflowResult = WorkflowResult.Finished;

            _jobInfoQueue = Substitute.For <IJobInfoQueue>();

            _profiles = new ObservableCollection <ConversionProfile>();
            _profiles.Add(new ConversionProfile
            {
                Guid = "SomeGuid"
            });
            _profiles.Add(new ConversionProfile
            {
                Guid     = "AnotherGuid",
                AutoSave = new AutoSave
                {
                    Enabled = true
                }
            });

            _conversionWorkflow = Substitute.For <IConversionWorkflow>();
            _conversionWorkflow.RunWorkflow(Arg.Any <Job>())
            .Returns(x =>
            {
                var job       = x.Arg <Job>();
                job.Completed = true;
                return(_workflowResult);
            });
        }
コード例 #13
0
        public void Match_PatternExpressionsInCalls(string patternData, params int[] matchMethodNumbers)
        {
            var     processor   = new DslProcessor();
            var     patternNode = (PatternNode)processor.Deserialize(patternData, LanguageExt.AllPatternLanguages);
            Pattern pattern     = new Pattern
            {
                Data      = patternNode,
                DebugInfo = patternData
            };

            patternsRep.Add(patternsConverter.ConvertBack(new List <Pattern>()
            {
                pattern
            }));
            WorkflowResult workflowResult = workflow.Process();

            MatchingResultDto[] matchingResults = workflowResult.MatchingResults.ToDto(workflow.SourceCodeRepository);
            patternsRep.Clear();

            Assert.AreEqual(matchMethodNumbers.Contains(0) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_0")));
            Assert.AreEqual(matchMethodNumbers.Contains(1) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_1")));
            Assert.AreEqual(matchMethodNumbers.Contains(2) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_2")));
            Assert.AreEqual(matchMethodNumbers.Contains(3) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_3")));
            Assert.AreEqual(matchMethodNumbers.Contains(4) ? 1 : 0, matchingResults.Count(r => r.MatchedCode.StartsWith("test_call_4")));
        }
コード例 #14
0
        /// <summary>
        /// Производит конфигурацию метода и вызов рабочего потока.
        /// </summary>
        /// <typeparam name="TParameters">Тип параметров.</typeparam>
        /// <param name="cfg">Объект рабочего потока для конфигурации вызово..</param>
        /// <param name="parameters">Первоначальные параметры.</param>
        /// <param name="errorHandler">Хэндлер с ошибкой.</param>
        /// <returns>Результат.</returns>
        protected async Task <WorkflowResult> Execute <TParameters>(Action <WorkflowArea> cfg, TParameters parameters, Action <MessageOutputBase> errorHandler)

        {
            WorkflowResult result = null;

            try
            {
                var workFlow = CreateWorkflow();

                cfg(workFlow);

                result = await workFlow.Start(parameters);
            }
            catch (Exception e)
            {
                var logger          = StartEnumServer.Instance.GetLogger();
                var errorParameters = new List <LoggerParameter>();

                errorParameters.Add(new LoggerParameter("IsController", "true"));
                errorParameters.Add(new LoggerParameter("UserName", GetCurrentUser()));
                errorParameters.Add(new LoggerParameter("UserId", GetCurrentUserId() ?? Guid.Empty));
                errorParameters.Add(new LoggerParameter("RequestMethod", Request.Method));
                errorParameters.Add(new LoggerParameter("RequestUri", Request.QueryString));
                errorParameters.Add(new LoggerParameter("RequestUri", GetClientIp()));

                logger.LogError(GetType(), "Во время запроса WebApi произошла ошибка: " + e.GetExceptionDetails(), errorParameters.ToArray());
                errorHandler?.Invoke(CreateErrorMessage(e));
            }

            return(result);
        }
コード例 #15
0
        public async Task <ServerCommandResult> Execute(RequestCommand cmd, ExpandoObject dataToExec)
        {
            var swi = new StartWorkflowInfo
            {
                DataSource = cmd.CurrentSource,
                Schema     = cmd.CurrentSchema,
                Model      = cmd.CurrentModel,
                ModelId    = dataToExec.Get <Int64>("Id"),
                ActionBase = cmd.ActionBase
            };

            if (swi.ModelId == 0)
            {
                throw new RequestModelException("Id must be specified to 'startProcess' command");
            }
            if (!String.IsNullOrEmpty(cmd.file))
            {
                swi.Source = $"file:{cmd.file}";
            }
            swi.Comment = dataToExec.Get <String>("Comment");
            swi.UserId  = dataToExec.Get <Int64>("UserId");
            if (swi.Source == null)
            {
                throw new RequestModelException($"File or clrType must be specified to 'startProcess' command");
            }
            WorkflowResult wr = await _workflowEngine.StartWorkflow(swi);

            return(new ServerCommandResult(JsonConvert.SerializeObject(wr, JsonHelpers.StandardSerializerSettings)));
        }
コード例 #16
0
        private void btnApproval_Click(object sender, EventArgs e)
        {
            WorkflowResult result = EAS.Application.Instance.WorkflowRuntime.Approval(this);

            this.OnWorkflowResultChaned(result);
            this.btnClose_Click(this.btnClose, e);
        }
コード例 #17
0
        public void Match_TestPatternsPhp_MatchedAllDefault()
        {
            var path          = Path.Combine(TestUtility.TestsDataPath, "Patterns.php");
            var sourceCodeRep = new FileCodeRepository(path);

            var            workflow                   = new Workflow(sourceCodeRep, Global.PatternsRepository);
            WorkflowResult workflowResult             = workflow.Process();
            IEnumerable <MatchResultDto> matchResults = workflowResult.MatchResults
                                                        .ToDto()
                                                        .OrderBy(r => r.PatternKey);
            IEnumerable <PatternDto> patternDtos = Global.PatternsRepository.GetAll()
                                                   .Where(patternDto => patternDto.Languages.Contains("Php"));

            foreach (PatternDto dto in patternDtos)
            {
                Assert.Greater(matchResults.Count(p => p.PatternKey == dto.Key), 0, dto.Description);
            }
            Assert.AreEqual(1, matchResults.Count(r =>
                                                  r.MatchedCode.Contains("Configure") &&
                                                  r.MatchedCode.Contains("write") &&
                                                  r.MatchedCode.Contains("3")));
            Assert.AreEqual(0, matchResults.Count(r =>
                                                  r.MatchedCode.Contains("Configure") &&
                                                  r.MatchedCode.Contains("write") &&
                                                  r.MatchedCode.Contains("50")));
        }
コード例 #18
0
        async Task StartWorkflow(RequestCommand cmd, ExpandoObject dataToStart, TextWriter writer)
        {
            if (_workflowEngine == null)
            {
                throw new InvalidOperationException($"Service 'IWorkflowEngine' not registered");
            }
            var swi = new StartWorkflowInfo
            {
                DataSource = cmd.CurrentSource,
                Schema     = cmd.CurrentSchema,
                Model      = cmd.CurrentModel,
                ModelId    = dataToStart.Get <Int64>("Id"),
                ActionBase = cmd.ActionBase
            };

            if (swi.ModelId == 0)
            {
                throw new RequestModelException("Id must be specified to 'startProcess' command");
            }
            if (!String.IsNullOrEmpty(cmd.file))
            {
                swi.Source = $"file:{cmd.file}";
            }
            swi.Comment = dataToStart.Get <String>("Comment");
            swi.UserId  = dataToStart.Get <Int64>("UserId");
            if (swi.Source == null)
            {
                throw new RequestModelException($"File or clrType must be specified to 'startProcess' command");
            }
            WorkflowResult wr = await _workflowEngine.StartWorkflow(swi);

            WriteJsonResult(writer, wr);
        }
コード例 #19
0
        public async Task <ActionResult> OnPostDeleteOrderAsync([FromServices] OrderFactory orderFactory)
        {
            if (orderFactory == null)
            {
                throw new ArgumentNullException(nameof(orderFactory));
            }

            ModelState.Clear();

            EnaBricks.Generics.Option <IOrder> orderOption = await orderFactory.OrderAsync(Id);

            if (!orderOption.Any())
            {
                return(Redirect("/Error"));
            }

            IOrder order = orderOption.Single();

            WorkflowResult result = await order.CancelAsync(UserId());

            if (!result.Success)
            {
                for (int i = 0; i < result.Errors.Length; i++)
                {
                    ModelState.TryAddModelError("", result.Errors[i]);
                }
            }

            return(await TryLoadViewModelAsync());
        }
コード例 #20
0
        public async Task <WorkflowResult> DeleteAditionalServiceAsync(int aditionalServiceId)
        {
            using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    WorkflowResult workflowResult = await _decorated.DeleteAditionalServiceAsync(aditionalServiceId);

                    if (workflowResult.Success)
                    {
                        transactionScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                    return(workflowResult);
                }
                catch
                {
                    Transaction.Current.Rollback();
                    throw;
                }
            }
        }
コード例 #21
0
        public async Task <WorkflowResult> AddPriceDetailAsync(int priceCategoryId, string description, decimal unitPrice)
        {
            using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    WorkflowResult workflowResult = await _decorated.AddPriceDetailAsync(priceCategoryId, description, unitPrice);

                    if (workflowResult.Success)
                    {
                        transactionScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                    return(workflowResult);
                }
                catch
                {
                    Transaction.Current.Rollback();
                    throw;
                }
            }
        }
コード例 #22
0
        public async Task <WorkflowResult> UpdateDescriptionAsync(string description)
        {
            using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                try
                {
                    WorkflowResult workflowResult = await _decorated.UpdateDescriptionAsync(description);

                    if (workflowResult.Success)
                    {
                        transactionScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                    return(workflowResult);
                }
                catch
                {
                    Transaction.Current.Rollback();
                    throw;
                }
            }
        }
コード例 #23
0
        public async Task <WorkflowResult> CreateAsync(
            Guid excursionId,
            KeyValuePair <int, int>[] aditionalServices,
            KeyValuePair <int, int>[] orderDetails,
            Guid userId)
        {
            using (TransactionScope transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                Exception appException = null;
                try
                {
                    WorkflowResult workflowResult = await _decorated.CreateAsync(
                        excursionId,
                        aditionalServices,
                        orderDetails,
                        userId);

                    if (workflowResult.Success)
                    {
                        transactionScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                    return(workflowResult);
                }
                catch (Exception ex)
                {
                    Transaction.Current.Rollback();
                    if (ex != null)
                    {
                        appException = ex;
                    }
                }

                int errorId = 0;

                if (appException != null)
                {
                    errorId = await _applicationLog.LogExceptionAsync(appException);
                }

                if (errorId > 0)
                {
                    return(new WorkflowResult(
                               new[] {
                        Resources.Resource.InternalServerErrorMessage,
                        string.Format(Resources.Resource.GeneratedErrorIdMessage, errorId)
                    }));
                }

                return(new WorkflowResult(
                           new[] {
                    Resources.Resource.InternalServerErrorMessage
                }));
            }
        }
コード例 #24
0
 /// <summary>
 /// Starts the specified workflow.
 /// </summary>
 /// <param name="workflow">The workflow.</param>
 public void Start(Models.Domain.Workflow.WorkflowInstance workflow)
 {
     Log.Debug($"Start({workflow})");
     //TODO: Block concurrent calls to Start/Process?
     Unloaded.Reset();
     Result      = new WorkflowResult();
     Application = CreateWorkflowApplication(workflow);
     Application.Run();
 }
コード例 #25
0
 /// <summary>
 /// Starts the specified workflow.
 /// </summary>
 /// <param name="workflow">The workflow.</param>
 public void Start(IWorkflow workflow)
 {
     Log.DebugFormat("Start({0})", workflow);
     //TODO: Block concurrent calls to Start/Process?
     Unloaded.Reset();
     Result      = new WorkflowResult();
     Application = CreateWorkflowApplication(workflow);
     Application.Run();
 }
コード例 #26
0
        static void Main(string[] args)
        {
            var fileRepository     = new FileCodeRepository("code.php");
            var patternsRepostiory = new FilePatternsRepository("patterns.json");

            var workflow = new Workflow(fileRepository, patternsRepostiory);

            workflow.IsIncludeIntermediateResult = true;

            WorkflowResult result = workflow.Process();

            var lineTokenDict = new Dictionary <int, List <string> >();

            foreach (var matchingResult in result.MatchingResults)
            {
                var       matchedNode = matchingResult.Nodes.Last();
                UstNode[] descendants = matchedNode.GetAllDescendants();

                foreach (UstNode descendant in descendants)
                {
                    string text = null;
                    if (descendant.NodeType == NodeType.InvocationExpression)
                    {
                        text = "Method invocation: " + ((InvocationExpression)descendant).Target;
                    }
                    else if (descendant.NodeType == NodeType.IndexerDeclaration)
                    {
                        text = "Arrays with user input: " + ((IndexerExpression)descendant).Target;
                    }
                    else if (descendant.NodeType == NodeType.CastExpression)
                    {
                        text = "Cast to type: " + ((CastExpression)descendant).Type;
                    }

                    if (!string.IsNullOrEmpty(text))
                    {
                        SourceCodeFile     sourceCodeFile     = result.SourceCodeFiles.Single(file => file.FullPath == descendant.FileNode.FileName.Text);
                        LineColumnTextSpan lineColumnTextSpan = sourceCodeFile.GetLineColumnTextSpan(descendant.TextSpan);
                        List <string>      strs;
                        if (!lineTokenDict.TryGetValue(lineColumnTextSpan.BeginLine, out strs))
                        {
                            strs = new List <string>();
                            lineTokenDict[lineColumnTextSpan.BeginLine] = strs;
                        }
                        strs.Add(text);
                    }
                }
            }

            foreach (var item in lineTokenDict)
            {
                Console.WriteLine(String.Format("{0}: {1}", item.Key, string.Join(", ", item.Value)));
            }

            Console.ReadLine();
        }
コード例 #27
0
ファイル: StartWorkflow.cs プロジェクト: pgava/FlowTasks
        /// <summary>
        /// OnWorkflowComplete Callback
        /// </summary>
        /// <remarks>
        /// Runs after everything else complete.
        /// </remarks>
        /// <param name="context">NativeActivityContext</param>
        /// <param name="completedInstance">ActivityInstance</param>
        private void OnWorkflowCompleteCallback(NativeActivityContext context, ActivityInstance completedInstance)
        {
            Logger.Debug("OnWorkflowCompleteCallback -> Start");

            var workflowStatus = context.GetExtension <WorkflowStateData>();

            WorkflowResult.Set(context, workflowStatus.Result);

            Logger.Debug("OnWorkflowCompleteCallback -> End");
        }
コード例 #28
0
ファイル: HtmlTests.cs プロジェクト: Yikez978/PT.PM
        public void Match_HtmlTestPatterns_MatchedExpected()
        {
            WorkflowResult result = TestHelper.CheckFile("Patterns.html", Language.Html, Stage.Match,
                                                         isIgnoreFilenameWildcards: true);

            Assert.AreEqual(3, result.MatchingResults.Count);
            Assert.AreEqual(TextSpan.FromBounds(95, 103), result.MatchingResults[0].TextSpan);
            Assert.AreEqual(TextSpan.FromBounds(72, 86), result.MatchingResults[1].TextSpan);
            Assert.AreEqual(TextSpan.FromBounds(128, 136), result.MatchingResults[2].TextSpan);
        }
コード例 #29
0
ファイル: Program.cs プロジェクト: messnerdev/DesignPatterns
        static void Main(string[] args)
        {
            var            solver = new QuadraticEquationSolver();
            WorkflowResult flag   = solver.Start(1, 10, 16, out Tuple <Complex, Complex> result);

            if (flag == WorkflowResult.Success)
            {
                // USE result
            }
        }
コード例 #30
0
ファイル: AppWorkflow.cs プロジェクト: dmitrkov/A2v10
        public static async Task <WorkflowResult> StartWorkflow(IApplicationHost host, IDbContext dbContext, IMessaging messaging, StartWorkflowInfo info)
        {
            AppWorkflow aw       = null;
            var         profiler = host.Profiler;
            var         result   = new WorkflowResult
            {
                InboxIds = new List <Int64>()
            };

            try
            {
                WorkflowDefinition def     = null;
                Activity           root    = null;
                Process            process = null;
                using (profiler.CurrentRequest.Start(ProfileAction.Workflow, $"Load '{info.Source}'"))
                {
                    def     = WorkflowDefinition.Create(info.Source);
                    root    = def.LoadFromSource(host, dbContext);
                    process = Process.Create(def, info);
                }
                // workflow arguments
                IDictionary <String, Object> args = new Dictionary <String, Object>
                {
                    { "Process", process },
                    { "Comment", info.Comment }
                };
                aw = Create(dbContext, root, args, def.Identity);
                aw._application.Extensions.Add(result);
                aw._application.Extensions.Add(dbContext);
                aw._application.Extensions.Add(messaging);
                aw._application.Extensions.Add(host);
                process.DbContext  = dbContext;
                process.WorkflowId = aw._application.Id;
                await process.Start(dbContext);

                using (profiler.CurrentRequest.Start(ProfileAction.Workflow, $"Run. Process.Id = {process.Id}, Workflow.Id={process.WorkflowId}"))
                {
                    aw._application.Run(_wfTimeSpan);
                    result.ProcessId = process.Id;
                    return(result);
                }
            }
            catch (Exception ex)
            {
                if (!CatchWorkflow(aw, ex))
                {
                    throw;
                }
                return(result);
            }
            finally
            {
                ProcessFinally(aw);
            }
        }
コード例 #31
0
ファイル: WorkflowTest.cs プロジェクト: Illya-Lykhachov/A2v10
        async Task StartWorkflowInt()
        {
            var info = new StartWorkflowInfo()
            {
                Source = "file:Workflows/SimpleWorkflow_v1",
                UserId = 50, // predefined user id
            };
            WorkflowResult result = await _workflow.StartWorkflow(info);

            Assert.AreNotEqual(0, result.ProcessId);
        }
コード例 #32
0
ファイル: UstVisitorTests.cs プロジェクト: Yikez978/PT.PM
        public void Check_AllDescendants_HaveParentsAfterPreprocess()
        {
            WorkflowResult result = TestHelper.CheckFile("AllInOne.cs", Language.CSharp, Stage.Preprocess);

            IEnumerable <UstNode> descendantsExceptFirst = result.Usts.First().Root.GetAllDescendants().Skip(1);

            foreach (var descendant in descendantsExceptFirst)
            {
                Assert.IsNotNull(descendant.Parent);
            }
        }