using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Elsa.Contracts; using Elsa.Extensions; using Elsa.Models; using Elsa.Persistence.InMemory.Extensions; using Elsa.Pipelines.ActivityExecution.Components; using Elsa.Pipelines.WorkflowExecution.Components; using Elsa.Runtime.Extensions; using Elsa.Samples.Console1.Workflows; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace Elsa.Samples.Console1; class Program { static async Task Main() { var serviceProvider = CreateServices(); serviceProvider // Configure activity execution pipeline. .ConfigureDefaultActivityExecutionPipeline(pipeline => pipeline .UseLogging() .UseActivityDrivers() ) // Configure workflow engine execution pipeline. .ConfigureDefaultWorkflowExecutionPipeline(pipeline => pipeline .UsePersistence() .UseActivityScheduler() ); var workflow1 = new Func(HelloWorldWorkflow.Create); var workflow2 = new Func(HelloGoodbyeWorkflow.Create); var workflow3 = new Func(GreetingWorkflow.Create); var workflow4 = new Func(ConditionalWorkflow.Create); var workflow5 = new Func(ForWorkflow.Create); var workflow6 = new Func(BlockingWorkflow.Create); var workflow7 = new Func(ForkedWorkflow.Create); var workflow8 = new Func(CustomizedActivityWorkflow.Create); var workflow9 = new Func(VariablesWorkflow.Create); var workflow10 = new Func(WhileWorkflow.Create); var workflow11 = new Func(ForEachWorkflow.Create); var workflow12 = new Func(ParallelForEachWorkflow.Create); var workflow13 = new Func(BlockingParallelForEachWorkflow.Create); var workflow14 = new Func(FlowchartWorkflow.Create); var workflowFactory = workflow3; var workflowGraph = workflowFactory(); var workflow = Workflow.FromActivity(workflowGraph); var workflowEngine = serviceProvider.GetRequiredService(); var workflowExecutionResult = await workflowEngine.RunAsync(workflow); var workflowState = workflowExecutionResult.WorkflowState; var bookmarks = new List(workflowExecutionResult.Bookmarks); while (bookmarks.Any()) { workflow.Root = workflowFactory(); foreach (var bookmark in bookmarks.ToList()) { Console.WriteLine("Press enter to resume workflow with bookmark {0}.", new { bookmark.Id, bookmark.Name, bookmark.Hash, bookmark.ActivityId, bookmark.ActivityInstanceId, bookmark.CallbackMethodName }); Console.ReadLine(); var resumeResult = await workflowEngine.RunAsync(workflow, workflowState, bookmark); workflowState = resumeResult.WorkflowState; bookmarks = resumeResult.Bookmarks.ToList(); } } } private static IServiceProvider CreateServices() { var services = new ServiceCollection(); services .AddElsa() .AddInMemoryPersistence() .AddLogging(logging => logging.AddConsole().SetMinimumLevel(LogLevel.Warning)); return services.BuildServiceProvider(); } }