2011-05-25 81 views
11

我们目前正在构建一个使用非简单审批流程的应用程序,该流程涉及多个级别的审批,返回,审核,通知等。什么是采用WF的Web应用程序的最佳设计?

由于上述要求,我们被要求使用的工作流框架也可以促进流程的透明度。

在我们已成功纳入工作流中的原型,它工作正常。但是,我们无法确定应该向用户提供的操作。例如,我有以下接收操作:create(),managerApprove(),RAApprove(),ORMApprove()..现在如果我按顺序调用它们,使用正确的用户名,那么它们将工作。显然,如果我不按顺序调用它们,那么它将抛出一个FaultException,因为它没有处于正确的状态。问题是,我怎么会知道哪些功能可在用户界面中暴露 - 比方说,如果目前正在等待经理批准然后就显示了管理员的批准按钮...

作为一种变通方法,我创建另一个WCF服务,它从数据库中检索相同的数据,然后确定正确的UI状态(用户可以执行哪些操作)。我认为这是逻辑的重复,因为这已经在WF中了。

而且,如果WF改变那么我单独的WCF服务可能可能会破坏。例如,如果我在工作流中切换批准订单,那么我需要更新WCF服务中的逻辑。否则,它将显示无效的页面状态,并且单击批准将调用错误的方法并导致FaultException。

任何帮助将非常感激......我真的很新WF4。

UPDATE:

我的同事把我的问题是这样的:

什么是一个Web应用程序,采用WF最好的设计?

为什么WF正在考虑 的主要原因 - 所涉及的工作流程长时间运行 - 工作流是人工工作流 - 他们需要协调真实的人 的行动 -

而且过程的透明度,应该如何工作流程整合与用户界面? - UI如何知道应该在哪个状态以及哪些页面显示哪些用户?

回答

5

工作流本身不直接公开信息。它在那里,因为每个未决的Receive都是一个已命名的书签,书签名称包含它支持的SOAP操作以及服务协定和命名空间。解决这个问题的最简单方法是将SqlWorkflowInstanceStore添加到WorkflowServiceHost并使用待处理书签检查列。这并不完美,因为这会给你提供上次持续的信息,这些信息不一定是当前的状态,但它在许多应用程序中都适用于我。只要确保将TimeToPersist设置为相当低的值并在战略性地点添加一些Persist活动即可。

+0

我想这是一种方式。但它有点像黑客。 – Mel 2011-05-26 06:12:01

+0

你是对的,因为它是。无论如何没有好的方法来完成工作。 – Maurice 2011-05-26 07:16:52

+0

我一直希望有更好的办法......我开始觉得WF实际上是在伤害设计......感觉我们通过使用WF来做正确的事情,但也被迫做了“错误”的事情作为副作用。 – Mel 2011-05-26 07:54:44

0

一个非常简单的方法是通过管理审批的状态来模拟工作流程。假设您有不同的按钮/页面供不同的用户批准审批流程的不同阶段(“创建”,“经理审批”,“RA审批”等)。这是一个非常古老的学校方法。

如果使用这种方法,你将需要分发您的工作流程(逻辑/处理)进行的跨不同的地方(页)。显然,这是这个问题的一个缺点,特别是当你的工作流程变化很大或者你的解决方案需要运行不同版本的工作流程时。

如果您想使用Workflow Foundation,最简单的方法就是Maurice建议的方法。

另一种选择是使用其他工具,这些工具可以比WF扩展更多且更灵活。我已经使用WF(不是最新发布的),BizTalk和SharePoint。

如果您的解决方案需要与其他应用程序交互,我将使用BizTalk推荐。

相关问题