Workflow Core v1.8 Release Notes
Release Date: 2019-01-19 // over 5 years ago-
Workflow Core 1.8
๐ Elasticsearch plugin for Workflow Core
๐ A search index plugin for Workflow Core backed by Elasticsearch, enabling you to index your workflows and search against the data and state of them.
๐ง Configuration
๐ Use the
.UseElasticsearch
extension method onIServiceCollection
when building your service providerusing Nest; ...services.AddWorkflow(cfg =\>{ ... cfg.UseElasticsearch(new ConnectionSettings(new Uri("http://localhost:9200")), "index\_name"); });
Usage
Inject the
ISearchIndex
service into your code and use theSearch
method.Search(string terms, int skip, int take, params SearchFilter[] filters)
terms
A whitespace separated string of search terms, an empty string will match everything.
0๏ธโฃ This will do a full text search on the following default fields- Reference
- Description
- Status
- Workflow Definition
In addition you can search data within your own custom data object if it implements
ISearchable
using WorkflowCore.Interfaces; ...public class MyData : ISearchable{ public string StrValue1 { get; set; } public string StrValue2 { get; set; } public IEnumerable\<string\> GetSearchTokens() { return new List\<string\>() { StrValue1, StrValue2 }; } }
Examples
Search all fields for "puppies"
searchIndex.Search("puppies", 0, 10);
skip & take
๐ Use
skip
andtake
to page your search results. Whereskip
is the result number to start from andtake
is the page size.filters
You can also supply a list of filters to apply to the search, these can be applied to both the standard fields as well as any field within your custom data objects.
There is no need to implementISearchable
on your data object in order to use filters against it.The following filter types are available
- ScalarFilter
- DateRangeFilter
- NumericRangeFilter
- StatusFilter
These exist in the
WorkflowCore.Models.Search
namespace.Examples
Filtering by reference
using WorkflowCore.Models.Search; ...searchIndex.Search("", 0, 10, ScalarFilter.Equals(x =\> x.Reference, "My Reference"));
Filtering by workflows started after a date
searchIndex.Search("", 0, 10, DateRangeFilter.After(x =\> x.CreateTime, startDate));
Filtering by workflows completed within a period
searchIndex.Search("", 0, 10, DateRangeFilter.Between(x =\> x.CompleteTime, startDate, endDate));
Filtering by workflows in a state
searchIndex.Search("", 0, 10, StatusFilter.Equals(WorkflowStatus.Complete));
Filtering against your own custom data class
class MyData{ public string Value1 { get; set; } public int Value2 { get; set; } }searchIndex.Search("", 0, 10, ScalarFilter.Equals\<MyData\>(x =\> x.Value1, "blue moon"));searchIndex.Search("", 0, 10, NumericRangeFilter.LessThan\<MyData\>(x =\> x.Value2, 5))
Action Inputs / Outputs
โ Added the action Input & Output overloads on the fluent step builder.
Input(Action\<TStepBody, TData\> action);
This will allow one to manipulate properties on the step before it executes and properties on the data object after it executes, for example
Input((step, data) =\> step.Value1 = data.Value1) .Output((step, data) =\> data["Value3"] = step.Output) .Output((step, data) =\> data.MyCollection.Add(step.Output))
๐ฅ Breaking changes
The existing ability to assign values to entries in dictionaries or dynamic objects on
.Output
was problematic,
since it broke the ability to pass collections on the Output mappings..Output(data =\> data["Value3"], step =\> step.Output)
๐ This feature has been removed, and it is advised to use the action Output API instead, for example
.Output((step, data) =\> data["Value3"] = step.Output)
This functionality remains intact for JSON defined workflows.