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

将活动输出绕过切换案例中的活动

如何解决将活动输出绕过切换案例中的活动

我喜欢活动输入和输出的想法,并且比在工作流上下文中设置值更喜欢它们。但是,我现在在使用 switch case 时坚持使用这种方法。我的工作流程如下所示:

builder
  .ReceiveHttpPostRequest<ImportProducts>("/import")
  .Then<ExtractHttpRequestBodyActivity>()
  .Then<GetShopDataActivity>()
  .Switch(cases => cases
    .Add(
      context => context.GetInput<ShopData>()!.ShopType == "ShopType1",@case => @case
        .Then<GetShopType1ProductsActivity>()
        .Then<FilterShopType1ProductsActivity>()
        .Then<ConvertShopType1ProductsActivity>()))
  .Then<DebugActivity>();

如果没有 switch case,GetShopType1ProductsActivity 的输入是 GetShopDataActivity输出,但是使用 switch case 的输入是 null

有没有办法绕过输出到案例的第一个活动?

编辑:我使用的是 Elsa 2.0.0-preview7.1545

解决方法

没有办法绕过 Elsa 表单将活动输出自动发送到另一个活动作为输入。

话虽如此,是否使用输出/输入取决于您

你能做的是:

  1. GetShopDataActivity 指定一个名称(使用 .WithName)。例如。 "GetShopDataActivity1"
  2. 使用 GetShopDataActivity Directly 的输出作为 GetShopType1ProductsActivity 的输入。

要使用命名活动的输出,请使用以下代码:

context.GetOutputFrom<ShopData>("GetShopDataActivity1");

另一种方法是将 GetShopDataActivity 的输出存储在一个变量中,然后您可以在其他活动中使用该变量。

提示:在开发自定义活动时,尝试公开它们的输入。例如,如果 GetShopType1ProductsActivity 需要来自 GetShopDataActivity 的输出,而不是直接从该活动中的活动上下文读取输入,请考虑使用“输入”属性公开必要的数据,如下所示:>

[ActivityInput] public ShopData ShopData { get; set; }

然后您可以按如下方式更新您的工作流程:

builder
  .ReceiveHttpPostRequest<ImportProducts>("/import")
  .Then<ExtractHttpRequestBodyActivity>()
  .Then<GetShopDataActivity>().WithName("GetShopDataActivity1")
  .Switch(cases => cases
    .Add(
      context => context.GetInput<ShopData>()!.ShopType == "ShopType1",@case => @case
        .Then<GetShopType1ProductsActivity>(a => a.Set(x => x.ShopData,context => context.GetOutputFrom<ShopData>(""GetShopDataActivity1)))
        .Then<FilterShopType1ProductsActivity>()
        .Then<ConvertShopType1ProductsActivity>()))
  .Then<DebugActivity>();

这可以通过在您的 GetShopType1ProductsActivity 类(更具体地说,在名为 ISetupActivity<GetShopType1ProductsActivity>WithShopData 上)添加几个扩展方法来稍微清理一下。

此外,如果您需要在多个地方 GetShopDataActivity 的输出(就像您已经在至少两个地方所做的那样),请考虑创建一个提供此信息的扩展方法。

例如:

public static class ShoppingWorkflowExtensions
{
   public static ShopData GetShopData(this ActivityExecutionContext context) => context => context.GetOutputFrom<ShopData>(""GetShopDataActivity1)!; 
}

然后您可以像这样更新您的工作流程:

builder
  .ReceiveHttpPostRequest<ImportProducts>("/import")
  .Then<ExtractHttpRequestBodyActivity>()
  .Then<GetShopDataActivity>().WithName("GetShopDataActivity1")
  .Switch(cases => cases
    .Add(
      context => context.GetShopData().ShopType == "ShopType1",@case => @case
        .Then<GetShopType1ProductsActivity>(x => x.WithShopData(context => context.GetShopData()))
        .Then<FilterShopType1ProductsActivity>()
        .Then<ConvertShopType1ProductsActivity>()))
  .Then<DebugActivity>();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?