C# 编写一个简单的工作流系统

C# 编写一个简单的工作流系统,c#,workflow,workflow-foundation,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) V

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

- 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
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
它将用于asp.net应用程序(C#)

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


有一些资料(即使是stackoverflow),但我不知道如何处理并行性?

我只会使用Windows Workflow,因为它应该相对容易对工作流进行建模,并且您不必担心您不关心的问题,例如跟踪工作流状态等,这些问题不属于您的业务领域


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

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

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


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

工作流引擎是一个看似简单的概念。创建一个健壮的、可管理的实现比看起来要复杂得多。强烈支持现成的,而不是自己制作。看起来符合您的需要。

虽然您的要求是可能的,但基于.NET 3.x工作流运行时滚动您自己的工作流主机并不是一件“简单”的事情。从做过这件事的人那里拿走这个。它将在.NET 4中变得更容易,因此值得考虑的是,您的解决方案将在几个月内过时。p> <>如果您的问题域仅包含基于文档的工作流,我强烈建议您考虑SharePoint解决方案。有关此选项的一些信息,请参见以下链接:


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

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

状态机是一种很好的模式,可以处理文档在各种状态下的移动:

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

示例实现:

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

大概是这样的:

- 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
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
玩弄这些小玩意儿。一旦你掌握了这项技术,你就会更好地理解WF是否合适,或者你应该自己动手。另外,你也可以去看看,但那要重得多