【问题标题】:WF4: Validate that all exit statuses of activity has transitions to other activitiesWF4:验证活动的所有退出状态是否已转换到其他活动
【发布时间】:2012-10-28 10:38:30
【问题描述】:

我们正在尝试更改我们的业务流程,以便通过 WF4 实施。 我们的业务流程如下所示:

  • 有许多处理程序。
  • 每个处理程序都有多个输出状态。
  • 处理程序作为活动实现
  • 设计人员将支持这些活动的输出状态,以便
    • 我们可以轻松查看哪些状态会导致接下来的活动
    • 我们可以在编译时验证每个活动的所有状态都与其他活动相关联。

我们如何在 WF4 中实现这一点?

【问题讨论】:

  • 您可以使用 .NET 4.5 中的state machines。但是,我不知道如何完成转换验证,因此这是一条评论。如果有人可以回答您如何验证所有状态是否相互关联,那么他们就有您的答案。
  • 谢谢你,Will,我已经在使用 .net 4.0.1 和它的状态机。但问题的核心是验证。
  • 我对 StateMachine 不熟悉,但设计时的验证是通过活动约束实现的。我的猜测是 StateMachines 没有什么不同。查看我对this 问题的回答以获取介绍和示例。
  • 谢谢@Jota,我一定会看你的回答。

标签: .net workflow-foundation-4 state-machine


【解决方案1】:

也许您可以在处理程序活动中定义所需的属性(转换活动)。然后在处理程序的 CacheMetadata 覆盖中,您可以验证是否提供了它们。在处理程序活动的 Execute 方法结束时,您可以使用工作流运行时安排分配的转换活动。类似于以下内容:

public sealed class MyHandlerActivity : NativeActivity
{
    public MyHandlerActivity NextHandler
    {
        get;
        set;
    }

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        // Ensure next handler is supplied.
        if (this.NextHandler == null)
        {
            metadata.AddValidationError("Next handler is not assigned.");
            return;
        }

        // Let the workflow runtime that this activity could schedule another activity (the handler activity).
        metadata.AddChild(this.NextHandler);
    }

    protected override void Execute(NativeActivityContext context)
    {
        // TODO: Handler should do something here.

        // Schedule the next handler.
        context.ScheduleActivity(this.NextHandler);
    }
}

【讨论】:

  • 其实我不想让我的活动知道接下来应该安排什么活动。还有,当有几个下一个活动时,我应该怎么做,我们应该在状态机的某个条件下只从中选择一个?
猜你喜欢
  • 2019-11-11
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2016-11-11
  • 1970-01-01
相关资源
最近更新 更多