编写简单的工作流程系统

时间:2009-09-03 16:30:55

标签: c# workflow workflow-foundation

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

- 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上),但我不知道如何处理并行性?

6 个答案:

答案 0 :(得分:5)

工作流引擎是一个看似简单的概念。创建一个健壮的,可管理的实现比它看起来要多得多。非常喜欢现成的而是自己构建它。 WWF (Windows Workflow Foundation)看起来符合您的需求。

答案 1 :(得分:2)

使用WF Virtual Labs。一旦你掌握了这项技术,你就可以更好地了解WF是否合适,或者你应该自己动手。此外,您可以查看K2,但这更重要。

答案 2 :(得分:0)

我只是使用Windows Workflow,它应该相对容易建模工作流程,你不必担心你不关心的问题,比如跟踪工作流状态,以及类似的东西,在外面您的业​​务领域问题。

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

答案 3 :(得分:0)

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

您可以使用开源BPM解决方案(我已经看过JBPM for java,您可以搜索基于ASP的开源解决方案)。大多数这些解决方案都是基于流程的,换句话说,您可以在xml中定义流程或工作流程file.Each Approver是一个节点,如果只有父节点已经批准,树中的下一个节点就会显示出来。您可以在网上获得关于此的详细文档。

另外  ASP不会是一个问题。对于你自己的解决方案,我建议先创建数据库。基本上你需要一种方法来在数据库中存储树结构。如果两个节点有相同的父节点,可以处理并行,你可以放一个属性比如'has_approved',只有当两个节点都有has_approved = 1时,流量才会进一步增加。

它是一个更广泛的主题,我希望我在这篇文章中很清楚。如果你采用开源BPM解决方案选择最简单的一个,因为你将不得不对代码进行更改以适合你的特定解决方案。

答案 4 :(得分:0)

虽然您所要求的是可能的,但基于.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/

答案 5 :(得分:0)

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

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

状态机是一种很好的模式,可以通过各种状态来处理文档的移动: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