微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Elsa Workflow 2.0 如何创建基于 HttpEndpoint 的活动

如何解决使用 Elsa Workflow 2.0 如何创建基于 HttpEndpoint 的活动

我们正在尝试将 Elsa 用于一个项目,但我们现在面临一些困难,因此非常需要建议。我们要做的一件事是基于现有的 HttpEndpoint 创建一个 Activity。但是,由于源代码来自 https://github.com/elsa-workflows/elsa-core,在 google 上搜索了一些文档和示例后,我们一直无法弄清楚。

这正是我们正在尝试做的事情。

  • 基于 HttpEndpoint 创建一个新的 Activity
  • 让路径认包含 WorkflowInstanceId
  • 我们的场景需要更多的自定义

期待建议和指导。谢谢!

解决方法

您可以执行类似于 Webhooks 模块正在执行的操作。而不是

HttpEndpoint 继承而来,它使用 IActivityTypeProvider 实现,该实现可动态生成重用 HttpEndpoint 的新活动类型。

在您的情况下,您的活动类型提供程序只需要生成一个活动类型(例如 MyEndpoint),它可以预先配置您想要的任何和所有方面,包括默认的 Path 属性值.

直接从 HttpEndpoint 派生新的活动类型也可以。您必须实现自己的书签提供程序来提供 HttpEndpointBookmark 对象 - HttpEndpoint 活动的 HTTP 中间件依赖于此。

示例:

public class MyEndpointBookmarkProvider : BookmarkProvider<HttpEndpointBookmark>
    {
        public override bool SupportsActivity(BookmarkProviderContext context) => context.ActivityType.TypeName == nameof(MyEndpoint);

        public override async ValueTask<IEnumerable<BookmarkResult>> GetBookmarksAsync(BookmarkProviderContext context,CancellationToken cancellationToken)
        {
            var path = await context.ReadActivityPropertyAsync<MyEndpoint,PathString>(x => x.Path,cancellationToken);
            var methods = (await context.ReadActivityPropertyAsync<MyEndpoint,HashSet<string>>(x => x.Methods,cancellationToken))?.Select(ToLower) ?? Enumerable.Empty<string>();

            BookmarkResult CreateBookmark(string method) => Result(new(path,method),nameof(HttpEndpoint));
            return methods.Select(CreateBookmark);
        }
        
        private static string ToLower(string s) => s.ToLowerInvariant();
    }

当被编入索引的活动类型为 "MyEndpoint" 时,上述书签提供程序为您的自定义活动提供书签。

或者,您可以完全采用不同的路线,并简单地实现一个 API 端点(ASP.NET Core 控制器、中间件或路由端点),该端点根据您的自定义活动触发工作流。我在这里写了一些关于这个过程的文档:https://elsa-workflows.github.io/elsa-core/docs/next/guides/guides-blocking-activities

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?