【问题标题】:Write a simple workflow system编写一个简单的工作流系统
【发布时间】:2009-09-03 16:30:54
【问题描述】:

作为我们应用程序的一部分,我需要编写“简单”的工作流系统,用于支持文档创建生命周期。 它应该支持: - 不同的活动:编辑文档、验证文档(批准、拒绝)、发布文档... - 将此活动分配给不同的人/用户 - “并行拆分和连接”。例如我想支持这样的工作流程:

- begin
1.) Create document
2.) Translate document
2.1) Translate into English
2.1.1) Translate document into English
2.1.2) Verify English translation
2.2) Translate into Italian
2.2.1) Translate document into Italian
2.2.2) Verify Italian translation
3.) Verify complete document
4.) Publish document
- end

它将在 asp.net 应用程序 (C#) 中使用。

最后一部分:我想知道是否有任何模式、库或文章可以帮助我开始这项任务?世界自然基金会适合这个吗?

有一些材料(甚至在stackoverflow上)但我不知道如何处理并行性?

【问题讨论】:

    标签: c# workflow workflow-foundation


    【解决方案1】:

    工作流引擎是一个看似简单的概念。创建一个健壮的、可管理的实现比看起来要复杂得多。强烈支持现成的而不是自己构建。 WWF (Windows Workflow Foundation) 看起来可以满足您的需求。

    【讨论】:

      【解决方案2】:

      玩转WF Virtual Labs。一旦你掌握了这项技术,你就会更好地了解 WF 是否合适,或者你应该自己动手。另外,您可以查看K2,但这是更重量级的。

      【讨论】:

        【解决方案3】:

        我会为此使用 Windows Workflow,它应该相对容易对工作流进行建模,并且您不必担心您不关心的问题,例如跟踪工作流状态以及诸如此类的外部问题您的业​​务领域问题。

        http://msdn.microsoft.com/en-us/library/aa480214.aspx

        【讨论】:

          【解决方案4】:

          几年前,我参与了一个实施工作流系统的项目。这是一个本土解决方案,因为数据库已经存在。基本上,我们为基于可可的解决方案提供了一个 Web 界面。

          您可以使用开源 BPM 解决方案(我看过 JBPM for java,您可以搜索一个好的基于 ASP 的开源解决方案)。这些解决方案大多是基于流程的,换句话说,您在 xml 中定义流程或工作流文件。每个审批者都是一个节点,如果只有父节点已批准,树中的下一个节点就会出现。您可以在网络上获得关于此的良好文档。

          还有 ASP不会有问题。对于您自己的解决方案,我建议先创建数据库。基本上您需要一种在数据库中存储树结构的方法。如果两个节点具有相同的父节点,则可以处理并行,您可以放置​​一个属性像 'has_approved' 并且只有当两个节点都具有 has_approved = 1 时,流程才会进一步发展。

          这是一个更广泛的话题,我希望我在这篇文章中清楚。另外,如果您采用开源 BPM 解决方案,请选择最简单的一个,因为您必须更改代码以适应您的特定解决方案。

          【讨论】:

            【解决方案5】:

            虽然您的要求是可能的,但基于 .NET 3.x 工作流运行时滚动您自己的工作流主机并不“简单”。从做过这件事的人那里拿走这个。在 .NET 4.0 中它会变得更容易,因此值得考虑的是您的解决方案将在几个月后过时。

            如果您的问题域仅包含基于文档的工作流,我强烈建议您考虑使用 SharePoint 解决方案。有关此选项的一些信息,请参阅以下链接:

            http://office.microsoft.com/en-us/sharepointdesigner/HA101005911033.aspx http://channel9.msdn.com/posts/RobertShelton/Building-an-Approval-Workflow-with-SharePointMOSS-2007-and-Visual-Studio-2008/

            【讨论】:

              【解决方案6】:

              实施起来并不难。我发现它很简单,不需要庞大的打包解决方案。

              您需要确定要监控的项目(文档)。然后您需要确定这些文档可以处于什么状态(或状态)。状态记录文档在您的处理过程中的哪个步骤。 (它在您的“工作流程”中的位置)。你已经在你的帖子中做到了。

              状态机是处理文档在各种状态下移动的绝佳模式:http://en.wikipedia.org/wiki/State_machine

              您仍然需要构建一个文档列表,列出文档可能处于的每个状态,以及文档会发生什么以将其移动到新状态。你已经完成了大部分工作。您的作业代码不应超过一两页。

              一个示例实现:

              为每个文档分配一个编号,以便您对其进行跟踪,并为其分配一个状态,以显示它在您的流程中的位置。通常这两个都是用一个数字完成的,但不是必须的。

              类似这样的:

              public class document
              {
                public int documentId;
                public String documentStatus;
              }
              
              // create a new document to track
              document doc = new document();
              doc.documentId = 42;       // arbitrary id#
              doc.documentStatus = "1";  // document is at the start of the process
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-09-01
                • 2013-05-13
                • 1970-01-01
                • 2014-06-06
                • 1970-01-01
                • 1970-01-01
                • 2017-12-16
                相关资源
                最近更新 更多