Loading Workflows from JSON
Loading workflows from JSON is a great way to store workflows in a database or file system. This guide will show you how to load workflows from JSON files.
Console application
The most straightforward way to load workflows from JSON files is to simply load the contents of a JSON file, deserialise it and then execute the deserialised workflow.
Update Program.cs
Here's a complete Program.cs file that demonstrates how to load a workflow from a JSON file and execute it:
using Elsa.Extensions;
using Elsa.Testing.Shared;
using Elsa.Workflows.Contracts;
using Elsa.Workflows.Management.Mappers;
using Elsa.Workflows.Management.Models;
using Microsoft.Extensions.DependencyInjection;
// Setup service container.
var services = new ServiceCollection();
// Add Elsa services.
services.AddElsa();
// Build service container.
var serviceProvider = services.BuildServiceProvider();
// Populate registries. This is only necessary for applications that are not using hosted services.
await serviceProvider.PopulateRegistriesAsync();
// Import a workflow from a JSON file.
var workflowJson = await File.ReadAllTextAsync("HelloWorld.json");
// Get a serializer to deserialize the workflow.
var serializer = serviceProvider.GetRequiredService<IActivitySerializer>();
// Deserialize the workflow model.
var workflowDefinitionModel = serializer.Deserialize<WorkflowDefinitionModel>(workflowJson);
// Map the model to a Workflow object.
var workflowDefinitionMapper = serviceProvider.GetRequiredService<WorkflowDefinitionMapper>();
var workflow = workflowDefinitionMapper.Map(workflowDefinitionModel);
// Get a workflow runner to run the workflow.
var workflowRunner = serviceProvider.GetRequiredService<IWorkflowRunner>();
// Run the workflow.
await workflowRunner.RunAsync(workflow);
Create Workflow JSON file
Create a new file called HelloWorld.json in the root of the project and make sure it is configured to be copied to the output directory.
{
"id": "HelloWorld-v1",
"definitionId": "HelloWorld",
"name": "Hello World",
"isLatest": true,
"isPublished": true,
"root": {
"id": "Flowchart1",
"type": "Elsa.Flowchart",
"activities": [
{
"id": "WriteLine1",
"type": "Elsa.WriteLine",
"text": {
"typeName": "String",
"expression": {
"type": "Literal",
"value": "Hello World!"
}
}
}
]
}
}
The console should output the following:
Hello World!
Elsa Server
When you're hosting an Elsa Server, providing workflows from JSON files is even easier.
All you need to do is create a folder called Workflows and add any number of workflow JSON files to it.
Let's try it out:
Setup Elsa Server
Setup an Elsa Server project.
Create Workflow JSON File
Create a new file called HelloWorld.json in the root of the project and make sure it is configured to be copied to the output directory.
{
"id": "HelloWorld-v1",
"definitionId": "HelloWorld",
"name": "Hello World",
"isLatest": true,
"isPublished": true,
"root": {
"id": "Flowchart1",
"type": "Elsa.Flowchart",
"activities": [
{
"id": "WriteLine1",
"type": "Elsa.WriteLine",
"text": {
"typeName": "String",
"expression": {
"type": "Literal",
"value": "Hello World!"
}
}
}
]
}
}
Run the Workflow
Run the workflow using the following curl:
curl --location --request POST 'https://localhost:5001/elsa/api/workflow-definitions/HelloWorld/execute' \
--header 'Authorization: ApiKey {your-api-key}'
Alternatively, start an Elsa Studio container and run the workflow from there.
Summary
In this guide, we've demonstrated configuring an Elsa Server to host workflows from JSON files. We covered loading a JSON file, deserialising it into the Workflow
class, and executing the workflow.
Last updated