Added initial file activity and sample

This commit is contained in:
Cameron Cowen 2021-04-09 19:06:04 +01:00
parent 22e19545fe
commit ab2736e54d
9 changed files with 213 additions and 3 deletions

View file

@ -0,0 +1,27 @@
using Elsa.ActivityResults;
using Elsa.Attributes;
using Elsa.Services;
using Elsa.Services.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace Elsa.Activities.File
{
[Action(Category = "File",
Description = "Output input value to specified location")]
public class OutFile : Activity
{
[ActivityProperty(Hint = "Path to create file at.")]
public string Path { get; set; }
protected async override ValueTask<IActivityExecutionResult> OnExecuteAsync(ActivityExecutionContext context)
{
await System.IO.File.WriteAllTextAsync(Path, (string)context.Input);
return Done();
}
}
}

View file

@ -0,0 +1,30 @@
using Elsa.Builders;
using Elsa.Services.Models;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace Elsa.Activities.File
{
public static class OutFileBuilderExtensions
{
public static IActivityBuilder OutFile(this IBuilder builder, Action<ISetupActivity<OutFile>> setup, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) => builder.Then(setup, null, lineNumber, sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, string> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity.WithPath(path), lineNumber, sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<ActivityExecutionContext, ValueTask<string>> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity.WithPath(path!), lineNumber, sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<string> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity.WithPath(path!), lineNumber, sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, Func<ValueTask<string>> path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity.WithPath(path!), lineNumber, sourceFile);
public static IActivityBuilder OutFile(this IBuilder builder, string path, [CallerLineNumber] int lineNumber = default, [CallerFilePath] string? sourceFile = default) =>
builder.OutFile(activity => activity.WithPath(path!), lineNumber, sourceFile);
}
}

View file

@ -0,0 +1,18 @@
using Elsa.Builders;
using Elsa.Services.Models;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Elsa.Activities.File
{
public static class OutFileExtensions
{
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, ValueTask<string>> path) => setup.Set(x => x.Path, path);
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, Func<ActivityExecutionContext, string> path) => setup.Set(x => x.Path, path);
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, Func<ValueTask<string>> path) => setup.Set(x => x.Path, path);
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, Func<string> path) => setup.Set(x => x.Path, path);
public static ISetupActivity<OutFile> WithPath(this ISetupActivity<OutFile> setup, string path) => setup.Set(x => x.Path, path);
}
}

View file

@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\src\core\Elsa.Core\Elsa.Core.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,24 @@
using Elsa;
using Elsa.Activities.File;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;
namespace Microsoft.Extensions.DependencyInjection
{
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddFileActivities(this IServiceCollection services)
{
return services;
}
public static ElsaOptionsBuilder AddFileActivities(this ElsaOptionsBuilder builder)
{
builder.AddActivity<OutFile>();
return builder;
}
}
}

View file

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Elsa.Activities.File\Elsa.Activities.File.csproj" />
<ProjectReference Include="..\src\core\Elsa\Elsa.csproj" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,50 @@
using Elsa.Models;
using Elsa.Persistence;
using Elsa.Persistence.Specifications;
using Elsa.Persistence.Specifications.WorkflowInstances;
using Elsa.Services;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Threading.Tasks;
namespace Elsa.Samples.ReadLineToFile
{
class Program
{
static async Task Main(string[] args)
{
var services = new ServiceCollection()
.AddElsa(configure => configure
.AddConsoleActivities()
.AddFileActivities())
.AddAutoMapperProfiles<Program>()
.BuildServiceProvider();
// Run startup actions (not needed when registering Elsa with a Host).
var startupRunner = services.GetRequiredService<IStartupRunner>();
await startupRunner.StartupAsync();
// Get a workflow runner.
var workflowRunner = services.GetRequiredService<IBuildsAndStartsWorkflow>();
// Run the workflow.
await workflowRunner.BuildAndStartWorkflowAsync<ReadLineToFileWorkflow>();
var store = services.GetRequiredService<IWorkflowInstanceStore>();
var results = await store.FindManyAsync(
new WorkflowDefinitionIdSpecification(nameof(ReadLineToFileWorkflow)),
OrderBySpecification.OrderByDescending<WorkflowInstance>(x => x.CreatedAt),
Paging.Page(1, 2));
var count = await store.CountAsync(new WorkflowDefinitionIdSpecification(nameof(ReadLineToFileWorkflow)));
Console.WriteLine(count);
foreach (var result in results)
{
Console.WriteLine(result.CreatedAt);
}
}
}
}

View file

@ -0,0 +1,23 @@
using Elsa.Activities.Console;
using Elsa.Activities.File;
using Elsa.Builders;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Elsa.Samples.ReadLineToFile
{
public class ReadLineToFileWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder builder)
{
var temp = Path.GetTempFileName();
builder
.WriteLine("Enter text to write to file")
.ReadLine()
.OutFile(temp);
}
}
}

View file

@ -239,11 +239,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.BlobStorage
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "locking", "locking", "{DBBD242E-4437-4BDB-919F-A70839BE75FA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.SqlServer", "src\locking\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj", "{B09A6E42-EF42-4693-BA0E-5EE1D7F81FFD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.SqlServer", "src\locking\Elsa.DistributedLocking.SqlServer\Elsa.DistributedLocking.SqlServer.csproj", "{B09A6E42-EF42-4693-BA0E-5EE1D7F81FFD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.Redis", "src\locking\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{7E5514AC-3633-4237-9490-0992417F2273}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.Redis", "src\locking\Elsa.DistributedLocking.Redis\Elsa.DistributedLocking.Redis.csproj", "{7E5514AC-3633-4237-9490-0992417F2273}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.DistributedLocking.AzureBlob", "src\locking\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj", "{495BE954-E6EA-41A9-8054-A5CA5DD0924E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.DistributedLocking.AzureBlob", "src\locking\Elsa.DistributedLocking.AzureBlob\Elsa.DistributedLocking.AzureBlob.csproj", "{495BE954-E6EA-41A9-8054-A5CA5DD0924E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Activities.File", "Elsa.Activities.File\Elsa.Activities.File.csproj", "{C7BCC9FA-4F61-4834-AB27-3D7C204E512D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.ReadLineToFile", "Elsa.Samples.ReadLineToFile\Elsa.Samples.ReadLineToFile.csproj", "{08C78021-B949-4A73-A4C6-0D72876B9593}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "blazor", "blazor", "{D86B94DC-A53C-4A67-A820-828DD359C49B}"
EndProject
@ -639,6 +643,14 @@ Global
{3DF05CFC-AC77-489F-9A42-C4FDB599AA69}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3DF05CFC-AC77-489F-9A42-C4FDB599AA69}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3DF05CFC-AC77-489F-9A42-C4FDB599AA69}.Release|Any CPU.Build.0 = Release|Any CPU
{C7BCC9FA-4F61-4834-AB27-3D7C204E512D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7BCC9FA-4F61-4834-AB27-3D7C204E512D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7BCC9FA-4F61-4834-AB27-3D7C204E512D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7BCC9FA-4F61-4834-AB27-3D7C204E512D}.Release|Any CPU.Build.0 = Release|Any CPU
{08C78021-B949-4A73-A4C6-0D72876B9593}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{08C78021-B949-4A73-A4C6-0D72876B9593}.Debug|Any CPU.Build.0 = Debug|Any CPU
{08C78021-B949-4A73-A4C6-0D72876B9593}.Release|Any CPU.ActiveCfg = Release|Any CPU
{08C78021-B949-4A73-A4C6-0D72876B9593}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -764,6 +776,8 @@ Global
{F1EF5639-021A-4D22-9D4A-73D57C88EBFA} = {C869CC72-9A98-4246-9A76-6A50F48AFD85}
{3A30EFFE-32D8-40B8-9C62-427037BB5424} = {EEBEA8AF-C8A8-4C71-A96C-D5836DE24359}
{3DF05CFC-AC77-489F-9A42-C4FDB599AA69} = {8B6B40A8-DF21-4CD2-BABD-474B79D0C3AF}
{C7BCC9FA-4F61-4834-AB27-3D7C204E512D} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180}
{08C78021-B949-4A73-A4C6-0D72876B9593} = {FC9F520F-BA51-4AD2-BFEE-EF787798E734}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8B0975FD-7050-48B0-88C5-48C33378E158}