2009-09-03 66 views
3

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

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

回答

4

工作流引擎是一个看似简单的概念。创建一个健壮的,可管理的实现比看起来更有效。强烈倾向于现成,而不是自己构建。 WWF (Windows Workflow Foundation)看起来适合您的需求。

0

几年前,我曾经对实现工作流system.It项目工作是一个家庭长大的解决方案,该数据库已经existed.Basically我们提供了一个Web界面基于可可的解决方案。您可以使用开源BPM解决方案(我曾经见过JBPM for Java,您可以搜索一个好的基于ASP的开源解决方案)。这些解决方案基本上都是基于流程的,换句话说,您可以定义一个流程或工作流程xml文件。每个批准者都是一个节点,如果只有父节点已经批准,树中的下一个节点会出现在图片中。您可以在网上获得关于此的良好文档。

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

它是一个更广泛的主题,我希望我在本文中清楚。如果您采用开源BPM解决方案选择最简单的一个,因为您必须对代码进行更改以适应您的特定解决方案。

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/

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 
2

WF Virtual Labs玩。一旦你掌握了这项技术,如果WF合适或者你应该推出自己的技术,你将会有更好的理解。此外,你可以检查出K2,但这是更重量级。