【问题标题】:Windows Workflow Dynamic, User-Created WorkflowsWindows 工作流 动态、用户创建的工作流
【发布时间】:2009-10-20 02:51:52
【问题描述】:

我有一位客户对在 Web 驱动的应用程序中使用 Windows Workflow Foundation (WF) 技术感兴趣。我是 .NET 开发人员,但我对 WF 或 SharePoint 工作流都没有经验。客户想要做的大部分事情似乎都是直截了当的,只是他们希望最终用户能够创建/编辑他们自己的自定义工作流程。在我对 WF 的简短研究中,这似乎不是通常的事情。允许用户自己创建工作流是否可行,或者这真的应该是自定义 ASP.NET MVC 应用程序,还是 SharePoint 应用程序?

【问题讨论】:

  • SharePoint 工作流 WF 工作流。
  • 确切地说,SharePoint 工作流是 WF 3 工作流。

标签: .net-3.5 workflow-foundation workflow-foundation-4


【解决方案1】:

让用户能够更改工作流程应该是 WF 的强项之一。然而,对于 WF 3,整个模型非常适合代码生成而不是标记,因此很难做到。并非不可能,因为您可以使用纯标记工作流程,但这很难。

使用 WF 4,故事应该会更好,因为所有工作流程都是纯标记,根本不涉及任何代码。所有代码都在预定义的活动中,这些活动被编译,用户可以根据需要更改工作流程。此外,WF 设计器更容易在您自己的应用程序中重新托管。

PS SharePoint 工作流是 WF 3 工作流,即使在新的 SharePoint 版本中也是如此,而 WF 4 是一个完全不共享任何代码的全新产品。

【讨论】:

    【解决方案2】:

    您可能希望构建一个可以接受来自用户的触发器的状态机。 Nicholas Blumhardt 有一个非常棒的轻量级状态机实现,称为stateless。你可以用一个简单的语句创建一个状态机:

    var stateMachine = new StateMachine<TState, TTrigger>();
    

    来自项目网站:

    var phoneCall = new StateMachine<State, Trigger>(State.OffHook);
    
    phoneCall.Configure(State.OffHook)
        .Permit(Trigger.CallDialed, State.Ringing);
    
    phoneCall.Configure(State.Ringing)
        .Permit(Trigger.HungUp, State.OffHook)
        .Permit(Trigger.CallConnected, State.Connected);
    
    phoneCall.Configure(State.Connected)
        .OnEntry(() => StartCallTimer())
        .OnExit(() => StopCallTimer())
        .Permit(Trigger.LeftMessage, State.OffHook)
        .Permit(Trigger.HungUp, State.OffHook)
        .Permit(Trigger.PlacedOnHold, State.OnHold);
    
    // ...
    
    phoneCall.Fire(Trigger.CallDialled);
    Assert.AreEqual(State.Ringing, phoneCall.State);
    

    如您所见,代码非常简单。您可以通过一个项目完成所有您需要的工作。

    由于 State 和 Trigger 可以是任何类型,因此您可以从数据库(可能是 Step 表)提供状态机,并允许 Approve=1、Reject=2 的触发器。您可以提前与用户一起创建一系列步骤,并允许他们通过呈现一个步骤来选择触发器,然后允许他们根据他们选择的触发器分配下一步。

    【讨论】:

      【解决方案3】:

      在使用 WF(包括 4.0 在内的任何版本)之前,我会仔细检查的是向后兼容性/版本控制,特别是如果您需要长时间运行的工作流程。

      一旦您拥有“正在运行”的工作流实例,就很难对组件(代码活动)进行更改。我见过几种版本控制方法来解决这个问题,但您可能会发现这两种方法在现实中都不实用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多