Commit graph

206 commits

Author SHA1 Message Date
Sipke Schoorstra fefe36f49a
Include $schema when exporting workflow definition (#6056)
* Refactor AdditionalConvertersConfigurator constructor

Simplify AdditionalConvertersConfigurator by using constructor injection directly in the class declaration. Also, annotate the class with [UsedImplicitly] to improve code clarity and maintainability.

* Update workflow serialization to be asynchronous

Refactor the workflow definition serialization to use asynchronous operations, improving efficiency and handling cancellation tokens. This change ensures the schema is correctly included in the serialized output.
2024-10-25 14:51:27 +02:00
Sipke Schoorstra 11f388338a
Add endpoints for activity execution records and summaries (#6018)
* Add endpoints for activity execution records and summaries

Created new classes and endpoints to handle activity execution records and summaries retrieval. Added related models and updated relevant interfaces.

* Rename endpoint classes for clarity

Updated endpoint classes in `ActivityExecutions` and `ActivityExecutionSummaries` to use the name `Endpoint` instead of `List`. This improves readability and consistency in the codebase.
2024-10-11 10:29:40 +02:00
Sipke Schoorstra 7c31332529
Fix variable serialization (#5974)
* Improve dispatched workflow input handling

Addressed input handling in dispatch messages by adding `SerializedInput` property. Also removed initialization logic and moved input deserialization to a helper method, ensuring compatibility with both new and deprecated input property formats.

* Update workflow Docker images and version tags

Changed Docker image tags from v3-2-0-rc3 to v3-2-1-preview across multiple GitHub workflows. Updated the VERSION environment variable in packages.yml to reflect the new versioning scheme. These changes ensure consistency with the new preview release.

* Update versioning to include 'preview' in package workflow

Modified the workflow to append 'preview' to the version number for non-tagged builds. This ensures clearer differentiation between stable and non-stable versions in the CI pipeline.

* Add WorkflowInstanceStorageDriver for workflow variable storage

Introduced a new storage driver, WorkflowInstanceStorageDriver, to store workflow variables directly in the workflow state. Updated relevant classes and methods to incorporate this new storage driver, ensuring seamless read/write/delete operations and extending support for it throughout the codebase.

* Refactor object conversion and update variable retrieval.

Switched from JsonObject to JsonNode for object conversion and corrected a typo in the summary comment. Changed the return type of GetVariablesDictionary method and updated its implementation to use VariablesDictionary.

* Rename 'input' to 'serializedInput' in DispatchWorkflowDefinition.

This change clarifies that the input provided to the workflow should be serialized. It enhances the readability and accuracy of the code documentation, ensuring that developers understand the expected format of the input parameter.

* Add priority and deprecation attributes to storage drivers

Introduced a priority attribute to the `IStorageDriver` interface and implemented it in various storage drivers. Additionally, marked `WorkflowStorageDriver` as deprecated and reordered storage driver listing based on priority.

* Switch MassTransit broker to in-memory and refactor converter

Changed MassTransit broker from AzureServiceBus to in-memory for improved performance in development environment. Simplified PolymorphicObjectConverterFactory by removing redundant constructor and dependencies. Removed unused folder from the project file.
2024-09-19 16:18:56 +02:00
Sipke Schoorstra c8669d1bc1
Add optional refresh parameter (#5876)
* Add optional refresh parameter

Renamed several `RefreshDescriptors` methods to `RefreshDescriptorsAsync` to reflect their asynchronous nature consistently. Added an optional refresh parameter in the `ListActivityDescriptorsRequest` class and updated related endpoints to handle this parameter, triggering a registry refresh if necessary.

* Update version to 3.2.0-rc5 in GitHub Actions

Modified the `packages.yml` workflow to change the version from `3.2.0-rc4` to `3.2.0-rc5` for non-tagged releases. This ensures version consistency with the new release candidate.
2024-08-12 09:42:25 +02:00
Sipke Schoorstra d2fc7fb005
Rework Workflow Context Feature (#5861)
* Refactor workflow context extension structure

Removed unused WorkflowContextWorkflowDefinitionExtensions and renamed several extension and middleware classes for clarity and consistency. Simplified context provider type handling using JsonArray in custom properties.

* Refactor context provider and update email workflow

Refactored `CustomerWorkflowContextProvider` to use constructor parameter directly, removing redundant fields and constructors. Updated comments and list syntax in `CustomerCommunicationsWorkflow`. Improved README.md documentation for workflow contexts and context providers.

* Adjust logging levels and improve workflow logic

Modified `appsettings.json` to reduce the verbosity of logging by adjusting log levels. Updated `CustomerCommunicationsWorkflow` to include a timer activity and simplified the workflow context parameter setting.

* Remove PropertyBag and related functionalities.

Deleted the PropertyBag class and extension methods, and removed all instances where PropertyBag was utilized across various modules. This simplifies the workflow configuration and management by relying solely on CustomProperties for storing metadata.

* Add workflow context management extensions and optimizations

Introduces `WorkflowExecutionContextExtensions` for loading and saving workflow contexts more efficiently. Replaces `JsonArray` usage with `List<object>` for context provider types, simplifying the type management in the workflow execution context. Streamlines `WorkflowContextActivityExecutionMiddleware` by removing redundant service scope creation and enhancing readability.

* Remove redundant timer in CustomerCommunicationsWorkflow

The timer activity that was set to not start the workflow has been removed to streamline the workflow process. Updated the README to include instructions on how to start the CustomerCommunicationsWorkflow using the REST API or Elsa Studio.

* Refactor middleware to streamline context management

Removed dependency on `IServiceScopeFactory` and refactored middleware to directly load and save workflow contexts. Simplified workflow context provider invocation, enhancing code readability and maintainability.

* Remove redundant PropertyBag property

The PropertyBag property was commented out and is no longer needed in the WorkflowDefinition class. This change removes the commented-out code to clean up the class definition.

* Add JsonSerializerOptions for deserialization

Introduce JsonSerializerOptions with camelCase policy and case insensitivity for property names. This ensures consistent deserialization of custom properties in activity workflow context settings.
2024-08-06 22:36:24 +02:00
Sipke Schoorstra 149f91e538
Update API endpoint for Polling Observer (#5787)
* Rename and refactor journal update endpoint

Replaced `/workflow-instances/{id}/journal/has-updates` endpoint with `/workflow-instances/{id}/updated-at` to simplify API responses. Deleted `HasUpdates` related classes and introduced `GetUpdatedAtResponse` for consistency and clarity. Updated client contracts accordingly.

* Remove HasUpdates endpoint and refactor workflow observer

Deleted the HasUpdates endpoint and refactored related code to use an updated timestamp approach instead. Improved nullable handling in WorkflowInstanceDesigner and ensured proper observer disposal to avoid memory leaks. Updated workflow observer factory and observer implementations to support observer names and enhanced logging.

* Rename updated workflow instance endpoint and handle execution state

Renamed the endpoint from "/updated-at" to "/execution-state" to better reflect its purpose. Updated related response models and documentation to capture workflow execution state details such as status, sub-status, and last updated timestamp.

* Enable SignalR for real-time workflows

Add a flag to use SignalR and activate real-time workflows when enabled. Refactor code to wrap SignalR setup in conditional checks based on the new flag. This enhances the application's interactivity through real-time capabilities.

* Remove obsolete endpoints and rename execution state paths

Deleted the outdated Api1 and DynamicWorkflows endpoints under Elsa.Server.Web. Also, renamed paths related to execution state models and endpoint to remove "Journal" from the namespace for better clarity and organization.
2024-07-18 07:51:46 +02:00
Mohamed Ali a0846effae
bugfixing issues related to new PropertyBag in workflow definition (#5778) 2024-07-16 14:54:20 +02:00
raymonddenhaan a96180ed8b
Merge pull request #5751 from elsa-workflows/enh/journal_polling
Added endpoint to poll for journal updates
2024-07-12 08:43:28 +02:00
MariusVuscanNx feb7da4d28
Implemented workflows reload endpoint (#5732)
* Implemented workflows reload endpoint

* Added componenent tests for reload

* Adjusted cache handling

* Made the refresh endpoint return refreshed and not found definitions

* Update test/component/Elsa.Workflows.ComponentTests/Scenarios/WorkflowDefinitionReload/RemoveReloadWorkflowTests.cs

Fix typo

Co-authored-by: raymonddenhaan <155616759+raymonddenhaan@users.noreply.github.com>

---------

Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
Co-authored-by: raymonddenhaan <155616759+raymonddenhaan@users.noreply.github.com>
2024-07-12 08:35:46 +02:00
Raymond den Haan e52d716eaa Used DateTimeOffset instead of DateTime 2024-07-12 08:26:21 +02:00
Raymond den Haan bd3797dea5 Fix datetime conversion when sending datetime to API endpoints 2024-07-11 15:18:17 +02:00
Raymond den Haan 99c0797438 Add endpoint for checking for journal updates 2024-07-11 10:34:09 +02:00
Sipke Schoorstra dc4f904108 Update workflow revert to return summary and location
Enhanced the Revert endpoint to return a summary of the newly created workflow definition and include its location. Adjusted the API contract and endpoint configuration accordingly.
2024-07-10 19:47:50 +02:00
Sipke Schoorstra dc89caefe8
Add ActivityNodeIds filter to journal requests (#5741)
This commit introduces the ActivityNodeIds filter to the journal request models. This enhancement allows filtering logs based on specific activity node IDs, providing more granular control over workflow instance logs. Additionally, unnecessary summary comments have been removed for clarity.
2024-07-10 11:38:09 +02:00
MariusVuscanNx 6110eb561f
Workflow refresh feature (#5713)
* Refactor workflow definition events handling and dispatch

Removed IDistributedWorkflowDefinitionEventsDispatcher interface and related classes in favor of direct message publishing through MassTransit. Introduced new workflow definition refresh endpoints and services for better modularity and responsiveness. Adjusted caching and notification systems to support the new architecture.

* Add comment

* Added workflow definition refresh component test

* Fixed component tests issue

* Fixed id

* Fixed test

* Rename IsRaisedFromConsumer to IsConsumerExecutionContext

Updated the naming for clarity and consistency across the system. This change affects AmbientConsumerScope, related consumers, and condition checks to improve readability and understanding of the consumer context.

---------

Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2024-07-05 18:35:22 +02:00
Sipke Schoorstra 1be3b43c76
Update endpoints for lazy loading (#5681)
* Add workflow ancestor retrieval endpoint

Implemented an API endpoint to retrieve ancestor nodes of a specified child node within a workflow definition. This includes creating models and updating relevant interfaces to support the new functionality.

* Refactor workflow graph processing logic

Refactor to check `workflowGraph.Root` for null and streamline ancestor traversal logic. Ensure segments are processed correctly even when no ancestors are present, enhancing code readability and reliability.

* Fix node lookup error and stack segment order in endpoint

Added a safeguard to handle unknown node IDs by returning an error message. Replaced the segments list with a stack to ensure correct order and adjusted the logic for processing and responding with node ancestors.

* Fix workflow definition container null reference issue

Refactored the container assignment logic to handle cases where no leaf segment is found, ensuring it defaults to `childNode` if ancestors are empty. Additionally, added a TODO comment in DiagramDesignerWrapper.razor.cs for loading activity nodes if not already loaded.

* Refactor segment retrieval logic in Endpoint.cs

Replaced the use of `FirstOrDefault()` with `LastOrDefault()` to correctly identify the leaf segment. This change ensures that the container is set based on the last segment in the sequence, aligning with the intended logic.

* Add support for excluding activity types in filters

Introduced properties to exclude specific activity types in workflow execution log filters. Updated respective APIs and database extensions to utilize these new filtering capabilities, ensuring refined and more customized query operations.

* Refactor comments and add missing annotations

Updated various comments to be more precise and added `[UsedImplicitly]` annotation to `ActivityPathSegment` in `Elsa.Api.Client.Shared.Models`. Also, removed unnecessary folder reference in the `Elsa.Workflows.Api.csproj` file. These changes enhance clarity and maintain consistency across the codebase.

* Refactor workflow type checks and add ActivityExtensions.

Replaced string type checks with type comparisons for Workflow and Flowchart activities. Introduced an extension method in the newly created ActivityExtensions class to streamline flowchart type validation.

* Remove ActivityExtensions and update workflow comments

Deleted ActivityExtensions.cs as it was no longer needed. Updated comments in Models.cs and ActivityPathSegment.cs for clarity and accuracy.
2024-07-01 11:14:04 +02:00
Sipke Schoorstra b5e3af7b85
Lazy loading of subgraphs (#5643)
* Refactor activity serialization process

Refactored the activity serialization process in Elsa workflow API. The changes include addition, modification and deletion of code blocks across various files to accommodate the restructuring. The changes focus primarily on the handling of composite root activities and their serialization. The utility of configuration options for serializer is also implemented.

* Stash

* Add IgnoreChildActivitiesConverter and improve activity JSON conversion

A new JSON converter, IgnoreChildActivitiesConverter, has been introduced to handle specific serialization scenarios. On top of this, improvements have been made to the existing ActivityJsonConverter. This includes more robust handling of synthetic properties and the ability to ignore child activities during serialization. In DiagramDesignerWrapper, an addition has been made to facilitate the handling of embedded activities.

* "Implement activity port tracking in workflow system"

Modified several components of the workflow system to include activity port tracking for better visibility and control over workflow structures. In addition, unnecessary files were deleted, new ones were introduced, and changes were made to existing files to incorporate the new functionality. Notably, IActivityResolver interface now includes GetActivityPortsAsync method to allow retrieving activity ports. This enhances the ability to track actions in complex workflows.

* Add specialized converter check in activity serialization

The commit introduces a check for specialized JSON converters in two serialization methods inside `ActivityJsonConverter.cs` and `ActivityNodeConverter.cs`. If a specialized converter exists for a particular activity type, the serializer now uses it to serialize the activity, enhancing the serialization process's flexibility.

* Ignore serialization of ConfigureSerializerOptions

Added JsonIgnore attribute to the ConfigureSerializerOptions in the ActivityDescriptor class. This will prevent it from being included during the JSON serialization process, ensuring that it is not unnecessarily processed or exposed in serialized data formats.

* Refactor method to find WorkflowDefinition instead of WorkflowGraph

The method FindWorkflowGraphAsync was revised to find WorkflowDefinition rather than WorkflowGraph, reflecting its new purpose in the code. This change has also affected the related variables and logic where this function was called. The rationale for this revision is that the WorkflowGraph is a dynamic entity that should be computed at runtime, and hence cannot be reliably retrieved for static inspection.

* Update API endpoint and simplify request handling in workflow

The API endpoint for fetching workflow definitions graph has been changed from "/workflow-definitions/{definitionId}/graph" to "/workflow-definitions/subgraph/{id}". Similarly, the request handling has been simplified by removing version options and directly passing "Id" to the "FindWorkflowGraphAsync" method.

* Update import statements and remove unused dependencies

Some import/using statements have been adjusted to remove the 'Contracts' suffix in contexts where it's not necessary. A few unused dependencies have also been removed. These changes clean up the code and ensure proper functionality in the Elsa workflows system.

* Update .editorconfig settings

The .editorconfig settings have been revised to enforce inheritance of settings from higher directories. Additionally, the parameter 'file_header_template' has been removed. This update optimizes the configuration settings for better coding standards across C# files.

* Remove App_Data folder from Elsa.Server.Web.csproj

The App_Data folder reference has been removed from the Elsa.Server.Web project file. This change is included as the folder no longer seems necessary for the operation of the project.

* Remove unused namespace in ServiceProviderExtensions.cs

The Elsa.Workflows.Runtime.Options namespace, previously imported in the ServiceProviderExtensions file within the Elsa.Testing.Shared project, has been removed as it is not utilized. This cleanup enhances readability and maintains cleaner code.

* Implement GetActivityPortsAsync method in various classes

Added the implementation of GetActivityPortsAsync method in WorkplaceDefinitionActivityPortResolver, SendHttpRequestActivityPortResolver, OutboundActivityPortResolver, and SwitchActivityPortResolver classes. Changes also include adding inheritdoc comments for these methods, making GetActivityPortsInternal method private and static, and removing unneeded white spaces.

* Remove GetActivitiesAsync method from activity resolvers

The GetActivitiesAsync method has been removed from various activity resolver classes including WorkflowDefinitionActivityPortResolver, SendHttpRequestActivityPortResolver, OutboundActivityPortResolver, and SwitchActivityPortResolver. The corresponding interface IActivityResolver has also been updated to reflect this change. This simplifies the structure by focusing only on the activity ports.

* Simplify workflow definition serialization

Removed the cloning of serializer options and the exclusion of composite activities from being serialized in the workflow definition model. This simplification results in cleaner code with less redundancy and unnecessary operations.

* Refactor workflow definition endpoints, optimize response handling

Major refactor of workflow definition endpoints in the Elsa.Workflows.Api module. Unnecessary serialization processes have been removed. Response handling was also streamlined to use the SendOkAsync method, optimizing resource usage and increasing application performance. Commit also includes removal of some unused namespaces.

* Remove IncludeCompositeRoot property from Models

The IncludeCompositeRoot property has been removed from the Models in the GetByDefinitionId, GetById, and GetManyById endpoints. These changes simplify the code as the property was commented out and not used in current workflow logic.

* Simplify workflow definition publishing process

This commit simplifies the workflow definition publishing process in the Elsa.Workflows.Api module. The code associated with checking if a workflow definition is already published and publishing it if not has been reduced for increased readability and maintainability.

* Refactor code in workflow publish endpoint

Removed unused import for better code clarity and simplified variable declaration for publishing result. The refactoring is carried out to improve code readability and maintainability in the workflow definition publishing endpoint.

* Refactor ActivityPort in Elsa.Workflows module

This commit simplifies the code in the ActivityPort class, part of the Elsa.Workflows module. It includes a significant rework of the comments for better clarity and understanding. Effort has been made to make the code more readable and easier to maintain in this refactor.

* Refactor serialization methods and improve Synthetic Properties handling

This commit refactors the activity serialization methods and improves the handling of synthetic properties. The changes remove the IgnoreChildActivitiesConverter and move synthetic property writing to a separate helper class, SyntheticPropertiesWriter. Various refinements have been made to different converter classes to better handle activity serialization. Furthermore, a function's name was improved from "FindWorkflowGraphAsync" to "GetWorkflowDefinitionAsync" to more accurately reflects its purpose.

* Add ActivityWriter to help serialize workflow activities

This commit introduces a new class ActivityWriter, that handles the serialization of workflow activities to JSON. Other classes such as ActivityNodeConverter and ActivityJsonConverter have been refactored to utilize this new helper. The codebase is now more DRY, avoids duplicate code and increases code maintainability.

* Refactor Json serialization for ignoring specialized converters

Removed 'IActivityRegistry' from 'JsonIgnoreCompositeRootConverter'. Instead, added an 'ignoreSpecializedConverters' argument to the 'WriteActivity' method in 'ActivityWriter'. This adjustment facilitates managing specialized converter behavior more efficiently during JSON serialization.

* Update ActivityNode serialization description

The comments for the ActivityNodeConverter class have been modified to clarify the serialization process. It now explicitly states that it includes descendant nodes based on the specified depth rather than just immediate child nodes. The parameter 'depth' description has been updated to 'the number of levels of descendants to include'.

* Refine workflow serializer and update activity writer parameters

The WorkflowSerializer clone operation has been simplified to directly call GetOptions from the API Serializer. Furthermore, an unnecessary comment was removed. In the ActivityWriter, an additional parameter was introduced for controlling whether to ignore the availability of converters that can handle IActivity objects. A superfluous front slash was removed from the class description comment.

* Add WorkflowJsonStructureTests and related JSON files

This commit introduces the WorkflowJsonStructureTests class which includes tests for the structure of the workflow definition in JSON format. In addition, main.json and sub.json files, containing mock data for testing, were added to the `WorkflowJsonStructures` scenario within the Elsa Workflows Component Tests. Updates to the project file ensure these new files are included correctly.

* Update WorkflowJsonStructureTests with subgraph test

This commit introduces a new test case named 'Requesting_Subgraph_Returns_ExpectedSubgraph' in the WorkflowJsonStructureTests file. It also refactors 'Workflow_ContainingWorkflowActivity_ShouldNotIncludeChildrenOfWorkflowActivity' test to make use of constants for IDs. These changes increase the coverage and maintainability of the code.

* Update max line length in .editorconfig

This commit increases the max line length to 420 characters in the .editorconfig. Additionally, it removes the redundant 'resharper_csharp_max_line_length' setting.

* Replace ActivityNodeConverter with RootActivityNodeConverter

The commit involves a change in serialization strategy for ActivityNode in the Elsa Workflows modules. The ActivityNodeConverter has been replaced with a RootActivityNodeConverter, which changes the approach from serializing the ActivityNode type and its descendants based on specified depth to serializing the ActivityNode type without its children, with activity children now serialized as properties. Corresponding alterations have also been made in the test cases.

* Remove IActivityRegistry parameter from classes

The IActivityRegistry parameter was removed from WorkflowDefinitionActivityProvider and JsonIgnoreCompositeRootConverterFactory classes, simplifying their constructors. This change also affected Elsa.Workflows.ComponentTests where the node access through "root" was adjusted for these updates.
2024-06-25 09:21:50 +02:00
Sipke Schoorstra 551c91bb4f Refactor response handling in workflow API
Simplified the response creation and sending in the `Post` endpoint of `WorkflowDefinitions` in the `Elsa.Workflows.Api` module. Previous logic was replaced with a streamlined approach of creating and sending the JSON response. Additionally, `Response` data model in the same endpoint has been updated to include an `AlreadyPublished` field.
2024-06-07 18:24:20 +02:00
Raymond den Haan e7863da413 Fix naming issues 2024-06-07 14:01:14 +02:00
Raymond den Haan b092d62bcc Added Service for searching through ActivityRegistry
Added Refreshing of registry on miss when searching
2024-06-07 14:01:14 +02:00
Raymond den Haan ef65580d1f Fix naming 2024-06-07 13:13:47 +02:00
Raymond den Haan 1d4d3ea108 Extend publish workflow response
Added IsPublished property to response instead of sending separate message.
2024-06-07 13:13:47 +02:00
Raymond den Haan b05449c031 Do not send error if workflow is already published 2024-06-07 13:13:47 +02:00
Raymond den Haan fb3b5339f4 Made Updating workflow references part of Publish logic 2024-06-07 13:13:47 +02:00
MariusVuscanNx d817d7ccaf
Global read-only and read-only workflows (#5406)
* Implemented global readonly and workflow readonly

* Fixed bug of unfilled versions

* Fixed failing test

* Updated pipeline

* Revert

* Pushed fixes based on the PR comments and fixed history bug

* Implemented changes based on PR comments

* Fixed issue in caused by AuthorizationHandler not being able to receive null resources

* Remove unused Google.Protobuf dependency in Program.cs

An unused Protobuf library import was found in Program.cs file. In order to clean up the code and improve readability, this import statement has been removed. No other changes have been made.

* Refactor code to reduce redundancy and improve readability

Optimize code by removing unnecessary constructor assignments and simplify function calls. The simplification is mainly achieved by directly passing the required services as constructor parameters instead of assigning them to private fields first. This results in a more readable and less redundant code.

---------

Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2024-05-27 10:06:39 +02:00
Sipke Schoorstra a2908960a4
Add Fault Code, Category and Type (#5362)
* Add error handling with fault categories and codes

The code now includes error handling through the introduction of fault categories and codes. New files containing constants for fault categories and codes have been added for different modules. FaultException has also been updated to include these properties. Changes are evident in various files where FaultException is thrown for error handling.

* Add DotSettings file for Elsa.Alterations module

A new DotSettings file is added for the Elsa.Alterations module. This includes configuration for namespace folders to be skipped during CodeInspection.

* Renamed "DefaultFaultKinds" to "DefaultFaultTypes" and updated usages

This commit renames the class "DefaultFaultKinds" to "DefaultFaultTypes" and updates all its references across the project files. The change is made keeping the more accurate naming context i.e., 'Types' suits better in the thrown exception scenarios.
2024-05-10 15:30:32 +02:00
Sipke Schoorstra 406469825c
Add Component Testing Framework (#5261)
* Add application component tests

Multiple new test files were added to deliver application component tests. This move improves testing by adding integration tests that cover overall system behavior and checking end-to-end actions. Ensuring the system functions correctly as a whole. In the process, updating some package versions to maintain compatibility.

* Add RefitSettings helper and revise API client service configuration

The commit introduces a 'RefitSettingsHelper' for Elsa API client and revises the way the API client services are configured. It also makes improvements to the WorkflowServerTestWebAppFactory for component testing. Some endpoint contracts related to workflow execution are also updated to have optional parameters.

* Remove old tests and add new workflow tests

This commit removes old, unnecessary tests and incorporates new workflow tests. It also improves the Elsa API client JSON serializer and adds a helper for HttpResponseMessage. Lastly, the commit introduces changes to properly configure the test logging and to manage application settings.

* Add HttpHelloWorld workflow tests

A new component test scenario, HttpHelloWorldTests, has been created for testing an HttpHelloWorld workflow. This involves asserting if a workflow responds correctly with "Hello World". Furthermore, an HTTP workflow client has been introduced in the WorkflowServerTestWebAppFactory class to provide a base address for workflow API calls.

* Add new test file and update workflow execution tests

This change adds a new test file "fork-1.json" to the Elsa.Workflows.Api.ComponentTests project. Also, updates were made throughout the tests to replace the WorkflowServerTestWebAppFactory with a fixture, allowing the tests to run in parallel. Lastly, unnecessary warning suppression was removed from the Elsa.Workflows.Core extension method.

* Add filter for .json and .elsa files in BlobStorageWorkflowProvider

This change adds a BrowseFilter in the BlobStorageWorkflowProvider options. This filter checks for files that end with .json or .elsa and includes only these files when browsing through the blob storage. This filter helps prioritize specific workflow file types.

* Rename WorkflowServerTestWebAppFactoryFixture and update usage

The old class name "WorkflowServerTestWebAppFactoryFixture" has been replaced with the more accurate "WorkflowServerWebAppFactoryFixture". All references to the previous name in other classes were also updated accordingly. In addition, the directory key in the method "CreateConvoyOptionsBuilder" has been updated from "Workflows" to "Scenarios".

* Update test fixture in workflow tests

The commit updates the test fixture in two test classes: HttpHelloWorldTests and HelloWorldTests. The former test fixture, WorkflowServerTestWebAppFactoryFixture, was replaced by WorkflowServerWebAppFactoryFixture to accurately match the testing needs.

* Update .csproj file paths and reorganize tests

The commit modifies the file paths for several test scenario files in the Elsa.Workflows.Api.ComponentTests.csproj, reflecting a reorganization of the tests. Previously static paths have been updated to new paths under 'Scenarios'. Additionally, two new test files related to 'LogPersistenceModes' have been included in the project.

* Add tests for log persistence modes

This commit introduces two new test scenarios for logging persistence modes and includes a related test called 'HelloWorldWorkflow'. These tests cover scenarios where certain workflow inputs should be stored and others shouldn't, thereby testing the log persistence feature. This ensures that the logging behavior respects the specified persistence mode.

* Add log persistence tests and update LogPersistenceMode enum

The commit contains the addition of new log persistence tests for verifying correctness of log persistence behavior. Furthermore, the LogPersistenceMode enum has been updated, replacing 'Default' with 'Inherit'. This change makes the mode's purpose clearer. Lastly, new test scenarios and test data files were added for more comprehensive testing.

* Remove obsolete component tests and support files

The files removed are no longer necessary for the current state of the application. They include various component tests and their related support files within the Elsa.Workflows.Api.ComponentTests project. By removing these, the project structure is cleaner and only contains relevant tests.

* Add dispatch workflow scenario tests and necessary helper classes

This commit includes two new tests for dispatching workflows, along with the creation of new 'ChildWorkflow' and 'DispatchAndWaitWorkflow' classes. Auxiliary helpers and services have been added to aid in managing workflow events and signals for these tests. The 'ComponentTest' has also been upgraded to support disposal handling.

* Remove ITestOutputHelper dependency from test classes

Removed the dependency on ITestOutputHelper in multiple test classes across various workflow scenarios. This change simplifies the test class constructors by reducing the number of required dependencies, contributing to cleaner and leaner code.

* Add 'Hello World' scenario to WorkflowCompletion tests

The 'Hello World' scenario was moved into WorkflowCompletion tests, along with changes in workflow definition identifiers. As part of these changes, the 'hello-world.json' file was updated; a new file under the same name was created in the WorkflowCompletion area and the workflow identifiers in basic and workflow completion tests were updated accordingly. Additionally, 'fork-1.json' has been renamed to 'fork.json'.

* Add support for cluster hosting tests

This commit introduces a suite of integration tests designed to validate the behaviour of hosting multiple instances of Elsa in a clustered environment. These tests simulate a typical clustered hosting scenario by using 'App', 'Cluster', and 'Infrastructure' objects to emulate different instances of the Elsa workflow engine running on separate servers. Name changes were made to certain classes and methods to reflect their new scopes and roles within the testing environment.

* Add performance tests and improve component tests

Added a new performance tests project scaffold, complete with its own project file, build properties file, and a dummy test. Updated component tests to improve multi-pod testing, primarily through the addition of additional service scopes and asserting activity registry synchronization. These changes also required updates to existing project and props files as well as the solution file.

* Update ActivityRegistrySyncTests and Infrastructure

Added a reference to Services in ActivityRegistrySyncTests and removed unnecessary whitespace in both files. The test component Elsa.Workflows has been modified to import newly added services, ensuring all tests are running with the expected resources and services.

* Fix comment

* Add NOOP implementations for stores

* Update PostgreSQL image and adjust test timings

The PostgreSQL image used for testing has been updated to the latest version from 13.3-alpine. Timeouts in ISignalManager and DispatchWorkflowsTests have been reduced for efficiency. A delay in the ChildWorkflow has also been decreased. Additionally, an 'ImportWorkflowActivity' test in ActivityRegistrySyncTests has been marked as not yet implemented.
2024-04-26 15:49:14 +02:00
jdevillard fefb077678
Clone the Serializer Options to customize for specific context (#5278)
Co-authored-by: Jérémie DEVILLARD <jdevillard@users.noreply.github.com>
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2024-04-25 14:42:53 +02:00
Sipke Schoorstra 2b30b53725 Fix modification of read-only JsonSerializerOptions 2024-04-25 14:32:54 +02:00
raymonddenhaan 4b151ff8af
Feature/cancel dispatched workflows (#5136)
* Made cancel API call dispatch the request

* Added ParentWorkflowInstanceId

* Recursively cancel child workflows

* Made single workflow cancellation include child workflows

* Updated migrations

* Processed comments
2024-03-27 12:07:55 +01:00
Sipke Schoorstra 20d936d3c2
Alterations with Queries (#5032)
* Remove Elsa.Alteration Handlers and implement workflow alteration activities

The Elsa.Alterations.Handlers, Services, and Endpoints have been removed and replaced with Elsa.Alterations.Activities for various steps in executing an alteration plan. These activities include submitting an alteration plan, generating alteration jobs, and dispatching alteration jobs. New models for ActivityFilter, AlterationWorkflowInstanceFilter, and alteration activity summaries are also introduced for better management of alteration plans.

* Add 'PrintMessage' custom activity and update naming rules

A new 'PrintMessage' activity has been added to the custom activities of the ConsoleApp, which simply writes a 'Hello world!' message. On top of this, the naming rules in the code styling settings have been expanded, introducing separate rules for instance and static private fields.

* Remove V3_1 database migration files

The V3_1 database migration files were deleted across all database providers, including MySql, SQL Server, SQLite and PostgreSQL. This is indicative of a rollback or significant revision to the data migration strategy.

* Update product version and modify tables in Elsa DB context

Updated "Elsa" DbSet product version from "7.0.11" to "7.0.14". Additionally, added new properties as well as modified existing ones in tables like "Elsa.KeyValues.Entities.SerializedKeyValuePair" to improve data structure. Also properly ignored certain entities in the Alterations DbContext.

* Add V3_1 migration for Elsa

This commit introduces the V3_1 migration for the Elsa module. Changes involve the introduction of new tables and alteration of existing tables. Specifically, a new 'KeyValuePairs' table was added and several columns on various tables were renamed or altered.

* Remove multiple Elsa.EfCore V3_1 migration files

The commit removes several migration files related to the V3_1 migration in multiple Elsa.EntityFrameworkCore modules including SqlServer, PostgreSQL, and SQLite. These files encompass changes in table structures and alterations.

* Update default value for ArgumentDefinition Type

The default value for the `Type` property in the `ArgumentDefinition` class was updated to `typeof(object)`. The `Type` property of `inputDefinition` in the `WorkflowBuilder` class was also modified to be set as `typeof(T)`. These modifications enable more flexible type handling.

* Refactor SafeSerializer and serialization services

The SafeSerializer service and related serialization services have been comprehensively refactored. This includes the removal of internal notifications, the incorporation of [RequiresUnreferencedCode] attributes, and changes in method signatures. Methods have been simplified to return ValueTasks directly from the JsonSerializer, and the notification sender dependency was removed.

* Add JSON serialization for alterations

Implemented a JSON serializer and a custom converter for the IAlteration interface in the Elsa.Alterations.Core.Serialization namespace. Also, introduced a new IJsonSerializer interface and an implementation for standard JSON serialization in Elsa.Common. These serialization changes enhance modularity and extensibility of JSON operations, and improve handling of IAlteration objects.

* Add "IsSystem" field to Workflow Definitions and Instances

This update introduces a new boolean field "IsSystem" to the Workflow Definition and Workflow Instance models. This field is designed to identify system workflows which aren't meant to be modified by users. Management and Runtime module code, API endpoints, database migrations, and related classes have been updated to include this new field. The MongoDB indices and Dapper migrations have been updated as well, and serialization/deserialization processes for these types have been modified to handle this new attribute.

* Remove outdated database migrations

Deleted database migration files from the MySql, SqlServer, and PostgreSql projects.

* Add V3_1 migration for Elsa.EntityFrameworkCore.Sqlite

This commit introduces the V3_1 migration for the Elsa.EntityFrameworkCore.Sqlite module. It includes changes in Alterations, Runtime, Management, and Identity contexts. These changes involve table alterations, addition of new columns, and creation of new tables. Each context alteration encapsulates relevant changes for specific functionalities of the module.

* Add `IsSystem` property to workflow classes

The `IsSystem` property has been added to several sections of the codebase related to workflows, such as `WorkflowStateMapper.cs`, `ListWorkflowDefinitionsRequest.cs`, `WorkflowDefinitionStore.cs`, and `ListWorkflowInstancesRequest.cs`. This property flag allows us to include or filter system workflows in our queries and results.

* Add 'UsedImplicitly' attribute to Alteration Handlers and Types

The 'UsedImplicitly' attribute from JetBrains.Annotations has been added to all Alteration Handlers and Alteration Types in the Elsa.Alterations module. This change specifies that these classes are being used implicitly and helps tools like ReSharper prevent false unused code detection.

* Update migration script for efcore-3.1

The migration script efcore-3.1.sh has been updated. Module "Alterations" and provider "Sqlite" are added back into the lists while unused elements are removed for cleanup. The script now covers all necessary modules and providers, improving its overall effectiveness.

* Remove PrintMessage class from Elsa.Server.Web bundle

This commit deletes the PrintMessage.cs file that was previously part of the Elsa.Server.Web bundle.

* Refactor MassTransit service configuration

This commit reduces line code length by merging splitted long lines into one, improves maintainability of code. It also updates the Service configuration and removes unused namespaces across files, which help to simplify the codebase. Changes have also been made to switch the MassTransit broker from RabbitMq to memory and adjust the endpoint name formatter configuration.

* Remove extra whitespace in Program.cs

Removed a trailing whitespace on the line declaring the useSqlServer constant in the Program.cs file. No functionality changes were made, simply a minor formatting correction to maintain clean and consistent code.

* Remove AlterationJsonConverter and update other files

The AlterationJsonConverter class has been removed, simplifying the serialization process. The AlterationSerializer.cs file was updated with additional attribute tags, giving more information about serialization expectations. Lastly, the AlterationSerializationOptionConfigurator.cs was simplified by removing unnecessary overrides and the Elsa.Alterations.Core.csproj file was tidied up by removing unused services folder reference.

* Refactor code for improved readability and maintainability

The diff shows changes across multiple files in multiple modules. Primarily, these changes revolve around formatting edits such as removing unnecessary spaces or line breaks and adjusting alignments. A significant change was also made to the MySQL server version in the `DbContextOptionsBuilder.cs` file. These adjustments help improve the readability and maintainability of the code, making it easier to understand and modify in future iterations.

* Remove unnecessary notification files and refactor code

Several files pertaining to workflow serialization notifications were deemed unnecessary and removed. The Endpoint class in the `Elsa.Workflows.Api` module has been refactored for efficient usage of the `IWorkflowDefinitionStore` store, and similarly the `HttpFeature.cs` and `DesignTimeDbContextFactoryBase.cs` files have been slightly refactored for better readability and optimization.

* Refactor HttpFeature class on variable types order

The variable types order within the HttpFeature class in the Elsa Http module has been reorganized for cleaner code. No functional changes have been made - only the order of the types has been rearranged. This refactoring contributes to better readability and code maintenance.

* Add 'issue/*' branch to GitHub workflow triggers

This update includes 'issue/*' branches in the trigger configuration of GitHub workflows. Now, these branches will trigger specified GitHub actions, facilitating more effective issue tracking and resolution.

* Change version option in WorkflowDefinitionManager

The version option in the WorkflowDefinitionManager has been updated. Previously it was set to "LatestAndPublished", but this has been changed to "LatestOrPublished", adjusting the way the manager handles workflow versions.

* Update GitHub Actions to remove duplicate branch pattern

Removed the duplicated 'issue/*' entry from the branch trigger list in packages.yml to prevent redundancy in GitHub Actions workflow triggers. This ensures workflows are triggered correctly and efficiently for branch patterns intended for CI processes.

* Refactor job generation in GenerateAlterationJobs

Refactored the GenerateAlterationJobs activity to enhance code readability and maintainability. Broke down the ExecuteAsync method into smaller, purpose-specific private methods and added the missing `Elsa.Alterations.Core.Models` namespace.

* Refactor consumer concatenation logic in MassTransitFeature

Removed the commented-out code that filtered temporary queues, simplifying the concatenation of consumer types with workflow message consumers.

* Refactor whitespace and improve readability

Removed extraneous whitespaces and reformatted the `IsEmpty` property for better code readability. This enhances the code structure without affecting functionality.

* Refactor MassTransitFeature configuration

Moved transport configuration logic into the dedicated `ConfigureInMemoryTransport` method and removed unused usings to simplify the `MassTransitFeature` class setup. This streamlines setting up MassTransit in-memory transport and improves code maintainability.

---------

Co-authored-by: Raymond den Haan <raymond.den.haan@nexxbiz.io>
Co-authored-by: Marius Vasile Vușcan <marius.vuscan@nexxbiz.io>
2024-03-13 20:34:46 +01:00
Sipke Schoorstra c4543848ae
Refactor workflow instance listing and enum parsing (#5069)
Refactor the endpoint for listing workflow instances to use a more robust enum parsing method and improve validation. Update models to accept string collections for statuses and sub-statuses, which enables validating and parsing these enums directly within the endpoint.
2024-03-13 19:00:44 +01:00
Isaac Hayes 5aa1ce85e6
Fix Security Bug: No permissions applied to version endpoints (#5008)
List,Delete, and Revert endpoints for editing endpoints by version were set to allow anonymous, meaning no authorisation policies were applied.

I have changed these to apply permissions as per the rest of the API.
2024-02-28 13:23:43 +01:00
raymonddenhaan 937398e351
Added workflow instance and bulk cancellation to the UI (#4965)
* Fixed issue where updated and finished date where not set when cancelling a workflow

* Single instance cancellation

* Updated bulk cancellation to allow multiple options

* Fixed counting of bulk cancellation

* Added proto actor implementation for batch cancellation

* Moved bulk cancellation method to separate service

---------

Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2024-02-23 10:26:13 +01:00
Sipke Schoorstra 5f47cd0aab
Implement distributed lock for registry population (#4983)
* Implement distributed lock for registry population

Added distributed lock in 'PopulateRegistriesHostedService' to prevent concurrent registry updates. Also implemented a semaphore in 'DefaultWorkflowDefinitionStorePopulator' to control access to shared resources during add or update operations. This change helps to ensure the integrity and consistency of the workflow registries.

* Refactor dependency injection for IDistributedLockProvider

* Refactor option classes to parameter classes in workflow runtime

This refactoring enhances the clarity of the Elsa Workflow runtime by renaming "options" classes to "parameters" classes. The name "options" misrepresented the classes' role and created confusion, as they are used to parameterize method calls rather than to configure services. The change applies to various workflow methods and tests across the project.
2024-02-22 19:37:03 +01:00
Sipke Schoorstra c80f80fd81
Enhanced Workflow Instance Filters (#4957)
* Add timestamp filtering for workflow instances

Implemented a new feature in the workflow instances' querying API, enabling filtering based on timestamps. The changes include adding a new TimestampFilter class and modifying existing classes accordingly. This new filter supports various operators such as greater than and less than, providing flexibility in filtering workflow instances.

* Improve timestamp filtering efficiency and update UI in WorkflowInstanceList

Timestamp filtering within WorkflowInstanceList is refactored using System.Linq.Dynamic.Core for more compact expression. This change results in simpler and more efficient code, reducing repetitive code lines. The UI updates include changing the MudGrid structure to table for timestamp filters display, offering a more organized view. Also, protection against null or minimum date values during parsing and comparisons is added, increasing stability and safety of operations.

* Refactor HTTP verbs and routes configuration in Endpoint.cs

The previous Get and Post method calls for handling '/workflow-instances' have been replaced with a Verbs method for HTTP verbs and a Routes method for setting the route.

* Update WorkflowInstanceFilter to use nullable HasIncidents

The HasIncidents property in WorkflowInstanceFilter has been updated from a bool to a nullable bool so that it can represent three states (true, false, or null) instead of only two. This allows not only to filter workflow instances that have incidents, but also those that don't have any, enhancing the flexibility of the filter in the process.

* Improve search functionality and UI in WorkflowInstanceList

Updated search term comparison in WorkflowInstanceFilter to use "Contains" instead of "Equals" to improve search flexibility. Also, enhanced the user interface in WorkflowInstanceList by adding debounce interval for the search input for performance reasons and by adding a Close button for convenience.

* Add input validation to WorkflowInstances endpoint

The code modifies the API endpoint for WorkflowInstances. It now checks that the input provided in the request is valid before proceeding. Furthermore, a new file called 'RequiredMembers.cs' has been added, which introduces two new attributes 'RequiredMemberAttribute' and 'CompilerFeatureRequiredAttribute'.

* Update src/modules/Elsa.Workflows.Management/Models/TimestampFilter.cs

Co-authored-by: Béchir BEN AMEUR <32399944+bbenameur@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Management/Models/TimestampFilter.cs

Co-authored-by: Béchir BEN AMEUR <32399944+bbenameur@users.noreply.github.com>

* Update src/modules/Elsa.Workflows.Management/Models/TimestampFilter.cs

Co-authored-by: Béchir BEN AMEUR <32399944+bbenameur@users.noreply.github.com>

---------

Co-authored-by: Béchir BEN AMEUR <32399944+bbenameur@users.noreply.github.com>
2024-02-18 23:40:03 +01:00
Béchir BEN AMEUR f7e224eb64
feature: add created date time to filter (#4932)
Co-authored-by: BEN AMEUR <Bechir.BEN-AMEUR.ext@sodexo.com>
2024-02-17 09:37:23 +01:00
Sipke Schoorstra ef3431c57a
Implement dispatch channels (#4949)
* Add DispatchWorkflowOptions and update MassTransit configuration

Introduced a new class `DispatchWorkflowOptions` to provide workflow dispatch options. Updated MassTransit configuration to include NET6.0 and NET7.0 support, and ensure correct MassTransit version usage per target framework version.

* Add support for configurable MassTransit message dispatching

Implemented a feature which allows for configurable MassTransit message dispatching. Added support for specifying channels and message brokers. Message dispatching code was massively refactored and relevant endpoints and response models were updated to support new message dispatching features.

* Add IEndpointChannelFormatter interface and implementation

An interface for formatting channel queue names, 'IEndpointChannelFormatter', has been added, along with its default implementation 'DefaultEndpointChannelFormatter'. The code that uses hardcoded queue name formatting has been modified to use the new formatter instead, making it more configurable and reusable. The implementation of the formatter uses the 'Humanizer' library to kebab-case the channel names.

* Add channel dispatch option to workflow activities

Introduced `WorkflowDispatcherChannelOptionsProvider` to provide dropdown channel options for workflow dispatch-related activities. Updated `DispatchWorkflow` and `BulkDispatchWorkflows` activities to include a new dropdown input for specifying a dispatch channel. Also, included the selected channel name in the `DispatchWorkflowOptions` during workflow dispatching process.

* Update MassTransit configurations and remove unused code

The MassTransit setup in Elsa.MassTransit module has been simplified by removing conditional code for different .NET versions. Additionally, unused parameter '__X_Channel' in 'DispatchWorkflowDefinition' was removed. Lastly, the MassTransit broker in Elsa.Server.Web was switched from RabbitMq to AzureServiceBus.

* Refactor dispatch workflow classes and methods

Simplified the class, method and variable names related to workflow dispatching in the Elsa.Workflows.Runtime module. For example, the 'WorkflowDispatcherChannelDescriptor' class was renamed to 'DispatcherChannel'. This refactoring was performed to make code more readable and maintainable by removing redundant wording in the naming convention.

* Update GitHub Workflow to support feature and issue branches

The workflow changes add support for feature and issue branches. Now, it extracts the branch name and verifies the commit exists in the given branch rather than just 'main'. The versioning scheme is also modified to include the branch name and not just the run number.

* Add 'bug/*' to triggering branches in packages workflow

The 'bug/*' pattern was missing from the triggers that initiate the GitHub actions within our packages workflow. This update includes any branch with a 'bug/' prefix to the list, allowing bug-related branches to start jobs in our CI/CD pipeline.

* Remove 'issue/*' and 'bug/*' branches from packages workflow

The 'issue/*' and 'bug/*' branches have been removed from the GitHub action workflow for packages. This change was made to simplify the workflow and optimize the triggering of package building.

* Update GitHub workflow to handle main branch versioning

This commit modifies the GitHub workflow script to accommodate changes when the branch name is "main." If the branch name is "main", a preview version is used. It also updates script execution to print the branch name for easier debugging and verifies commit existence on the correct branch instead of dispatch channels.

* Enclose branch names in quotes in packages.yml

The update modifies the branch names in the packages.yml GitHub Actions workflow file. The change consists of enclosing the branch names 'main' and 'feature/*' in single quotes, ensuring compatibility and preventing potential string interpretation issues.

* Update GitHub workflows package configuration

The workflows package configuration has been updated to specifically watch for changes on 'feature/dispatch-channels' rather than on all feature branches. This change will prevent unnecessary builds on less relevant feature branches.

* Update trigger branches in packages workflow

The triggering branches in the packages workflow have been updated. Previously, only changes in the 'main' and 'feature/dispatch-channels' would trigger the workflow, now any 'feature/*' branch will. This will cause more frequent and comprehensive testing.

* Add 'patch/*' to workflow trigger branches

This update adds 'patch/*' to the list of branches in .github/workflows/packages.yml that can trigger the workflow. It will allow the workflow to be initiated not just for main and feature branches, but also for patches.

* Add 'preview/*' to workflow triggers

This commit adds a new trigger for the GitHub Actions workflow. It now also responds to push events on 'preview/*' branches, allowing for automated testing and building of these preview branches.

* Update branch name extraction in GitHub Actions

The extraction of the branch name has been slightly modified in the packages.yml GitHub workflow file. This alteration ensures the correct branch name is obtained for further processing within the workflow without any discrepancy.

* Update branch name extraction in packages.yml

Corrected the syntax for extracting the branch name within the packages.yml github workflow file. Added an extra line to print out the ref which might be useful for debugging.

* Update branch name extraction in GitHub workflow

The commit simplifies the way the branch name is being extracted from the GitHub ref in the packages.yml workflow file. The new method employs straightforward string manipulation, making it easier to understand and debug in case of potential issues.

* Add extraction of branch name in workflow

Added a new line in the GitHub workflow file (.github/workflows/packages.yml) to extract the last part after the final slash from the branch name. This enhancement allows cleaner naming conventions, especially in cases where branches are named feature/issue-123, as it will only retain 'issue-123'.

* Update package naming in Github workflow

The Github workflow has been updated to handle package naming more effectively. Previously, the branch name was used directly for package versioning. Now, the last part of the branch name is extracted and used as the package prefix. If the branch name is "main", the package prefix is set to "preview".

* Move and add environment variable assignments

The placement of the assignment for BRANCH_NAME environment variable was moved for better readability. Additionally, the PACKAGE_PREFIX environment variable was also added. These environment variables are crucial for subsequent steps in the GitHub workflow.

* Add workflow dispatch validation and response handling

Removed several specific dispatch response classes and consolidated all types of dispatch responses into a single DispatchWorkflowResponse class. Added a new ValidatingWorkflowDispatcher service to validate dispatch requests before they're sent. Updated several classes to work with these changes, including the BackgroundWorkflowDispatcher, MassTransitWorkflowDispatcher, and the API endpoint class.

* Handle dispatch workflow failures with exceptions

The DispatchWorkflow and BulkDispatchWorkflows activities now throw a FaultException when the dispatch operations fail. Previously, these operations were not checking for success and could fail silently. Now, an unsuccessful dispatch response results in a FaultException with an error message from the dispatch response.
2024-02-16 10:56:30 +01:00
raymonddenhaan c409414152
Workflow cancellation (#4813)
* Removed duplicate entries

* Prevented workflows and activities from starting when the parent workflow is being cancelled

* Added cancellation to execution contexts

* Added store for workflow execution contexts

* Added cancellation to workflowRuntime

* Removed calling BookmarkPersistedHandler when persisting bookmarks.

* Added endpoint for bulk cancelling tasks

* Added tests for cancelling workflows

* Prevented cancelling the cancellation process since it could have unwanted effects

---------

Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2024-01-23 12:05:03 +01:00
Sipke Schoorstra c601076437 Add workflow serialization and new export endpoint
Implemented a functionality to serialize workflow definitions. This involved modifying the WorkflowSerializer service and the WorkflowDefinitionMapper. Furthermore, a new endpoint (`/export-dynamic-workflow`) for exporting serialized dynamic workflows was created. The changes aim to provide better workflow management and improve application capabilities.
2024-01-07 21:07:14 +01:00
Sipke Schoorstra 8e73d7a5d7 Refactor conditionals and class names
Adjusted logical conditions in ParameterizedQueryBuilderExtensions and For activity to work as expected. The former's conditional for IsLatestAndPublished now correctly uses 'and' while the latter properly increments currentValue. Renamed BulkCancel Endpoint class in WorkflowInstances to more accurately represent its purpose.
2024-01-03 14:15:08 +01:00
jdevillard 9175322774
Add a more generic UIHandler to customize how inputAttributes can be handle by UI (#4688)
* add a more generic UIHandler to customize how inputAttributes can be handle by the ui

* Add IPropertyUIHandlerResolver and update PropertyUIHandlerResolver

Introduced a new interface, IPropertyUIHandlerResolver, to resolve UI options for a property. Refactored PropertyUIHandlerResolver to implement this interface and removed the unnecessary partial class structure. Also, cleaned up some unnecessary usings in various files for better code organization.

* Refactor variable name and description in InputDescriptor

The 'uISpecifications' variable in the InputDescriptor model is renamed to 'uiSpecifications' for better readability. Additionally, the associated comment was revised to explain that the dictionary is used by the UI.

* "Refactor codebase for improved organization and cleaner architecture"

The codebase has been significantly refactored, moving several classes to more appropriate namespaces for improved organization and cleaner architecture. This includes shifting UI hint handlers, activities, and memory-related components, amongst others. The changes should improve code readability and maintainability, but as this is a broad refactoring effort, thorough regression testing is advised.

* Add CheckList UIHint with associated handler and provider

This update introduces a new UIHint called CheckList to the Elsa.Workflows.Core. This includes the necessary handler and provider classes. The handler is registered in the WorkflowsFeature.cs, and the CheckList UIHint key has been added to the InputUIHints.cs. Various associated files have been created in both the Elsa.Api.Client and Elsa.Workflows.Core project to support this new UIHint.

---------

Co-authored-by: Jérémie DEVILLARD <jdevillard@users.noreply.github.com>
Co-authored-by: Sipke Schoorstra <sipkeschoorstra@outlook.com>
2023-12-26 18:56:29 +01:00
Sipke Schoorstra 683f0ee6d8
Add Bulk Dispatch Workflow activity (#4683)
* Initial version of BulkDispatchWorkflow

* Update comments

* Refactor options models for running workflows and add Properties

* Fix resumption

* Add ability to provide arguments when evaluating expressions

* Update args syntax for JS

* Fix ProtoActor Runtime Properties mapping

* Use default constructor

* Provide completed workflow instance ID as input to BulkDispatchWorkflows

* Implement ChildFaulted port

* Switch to Publish to make Memory service bus work

* Update input evaluation and activity output retrieval

Refined the input evaluation process to only consider inputs with AutoEvaluate set to true. Added a comment to clarify the purpose of the GetActivitiesWithOutputs method. Removed the unnecessary check for AutoEvaluate from the EvaluateInputPropertyAsync method.
2023-12-06 22:32:08 +01:00
Sipke Schoorstra 48e9963d6e Split import endpoints
This fixes an issue where the import of JSON content returns 415.
2023-11-24 21:54:08 +01:00
Sipke Schoorstra c10e1b4232 Update TriggerIndexer to return modifiable lists 2023-11-22 20:47:15 +01:00
Sipke Schoorstra 225a99f39d
Bulk Import + Export of Workflow Definitions and Instances (#4643)
* Implement bulk export of workflow definitions

* Update Import endpoint with support for file uploads

* Update Import endpoint to return imported workflow count

* Implement workflow instance (bulk) export

* Implement workflow state, bookmark, workflow + activity execution export

* Remove globally imported usings
2023-11-22 14:31:48 +01:00
jdevillard 17f5218285
Change endpoint to Post (#4619)
* Change endpoinit to Post

* change Post for Api Client

---------

Co-authored-by: Jérémie DEVILLARD <jdevillard@users.noreply.github.com>
2023-11-15 20:50:56 +01:00
Sipke Schoorstra e4d6ad22c4
Decouple Expression Types (#4622)
* Refactor Expressions model

* Enable expression type filtering

* Implement dynamic enablement of satelite dependencies
2023-11-14 20:44:42 +01:00
jdevillard 1b48305418
Enhancement/runtime options provider#4491 (#4614)
* add Endpoint to fetch data from options provider

* add Api Client Contract

* add context object in Endpoint

* Update Api Client Contract for Context

---------

Co-authored-by: Jérémie DEVILLARD <jdevillard@users.noreply.github.com>
2023-11-09 13:01:51 +01:00
Sipke Schoorstra 67c16a3c4c
Add WorkflowContext client API (#4585) 2023-10-29 11:36:01 +01:00