WF Persistense和数据库访问

时间:2012-03-29 19:07:42

标签: asp.net workflow-foundation-4

我对WF很新,并试图学习它。我知道WF的基本知识。希望我能清楚地解决问题。

但是我遇到了一个问题。我正在开发一个演示应用程序来向我的团队证明WF的力量。

现在我知道如何卸载工作流程,然后使用书签恢复工作流程。

现在我正在做一个ASP.NET应用程序。它的作用是什么 -

  1. 获取Empname和年龄。
  2. 启动工作流程并传递数据。
  3. 活动将获取此数据并将其保存到数据库(Employee数据库) 例如,数据库中的行就像
  4. [

    Id      EmpName   Age   Status   WorkflowInstance
    
    1         blah    24    False     {Guid of WorkflowInstanceId}
    

    1. 然后,按顺序执行的下一个活动将从内存中为工作流添加书签和卸载。
    2. 我执行了步骤1到4,添加了10名状态为“False”的员工。
    3. 我可以在WorkflowInstanceSchema中看到10个工作流实例,并且它们都已卸载。
    4. 现在,在恢复每个工作流程之前,我希望有人登录。他将在GridView中看到所有Workflow实例的列表,并带有一个复选框,用于选择网格中的多个记录。

    5. 用户将从网格中选择行并批准并为所选工作流程传递状态“Y”,然后将工作流程再次加载回内存并传入输入并从书签继续。然后工作流程完成。

    6. [现在我的问题是在网格中我正在使用EF对Employee数据库进行查询并获取数据库中的Employee数据。]

      这是获取数据的唯一方法,因为我的数据库查询中没有涉及工作流程。这就像我们通常在我们开发多年的任何应用程序中所做的那样。那么在这种情况下工作流程会提供什么。

      我认为可能是另一种方式 - 我应该将跟踪服务和自定义数据用于每个工作流程。然后查询该数据。但这会重复现实,因为我现在在我的数据库和TrackingStore中都有员工数据。

      我应该如何处理这个问题。

      任何相同的指导都是非常准确的。与此同时,我不断学习如何体验WF的真正力量,并试图找出正确的方法。

2 个答案:

答案 0 :(得分:1)

工作流实例存储不是您要保留事务性或可查询数据的位置。我喜欢将它视为存储支持该过程的数据的地方。如果您需要从工作流外部访问此数据以在单个视图中列出(如网格),那么您应该将其存储在工作流实例存储之外。您不希望恢复所有工作流程只是为了从每个工作流程中获取数据,以便您可以在一个视图中显示它们。但是,如果工作流中的数据仅用于该流程,在工作流外部不可见,并且在流程到达给定点之前处于无效状态,那么我会将其保留在工作流数据中,直到它为事务系统做好准备

您可以使用工作流程提升的属性作为解决方案,但我会建议不要这样做。您想拥有交易数据的架构。工作流程就是您为此过程实现状态机的地方。

我们经常使用跟踪来进行此类业务数据提取,但如果您拥有工作流,我建议您使用显式活动将此数据保存到您自己的表中。至少那时你会在你的过程中做到这一点显而易见,而不是在工作流主机中发生的一些魔法。

答案 1 :(得分:0)

您应该将WorkflowID存储在其他位置,无论是跟踪存储,自定义表,还是用户计算机上的cookie。

以下是一个示例,说明如何使用平面文件保留工作流ID(在WF 3.5中):

http://msdn.microsoft.com/en-us/library/aa353572(VS.90).aspx