1

我有一个相当直接的顺序批准工作流,它有一个 EnableModificationActivity,它几乎适用于整个工作流。我的修改表单是一个 ASPX 页面,它使用户能够启用/禁用工作流中尚未发生的批准步骤。由于工作流可以多次修改,我希望表单能够反映工作流的当前状态,这意味着它应该显示当前启用或禁用了哪些活动。

我为此提出了一个笨拙的解决方案,稍后我将分享,但我必须相信有一个干净的方法可以解决这个问题。

4

1 回答 1

0

所以这是我最终采取的方法......

  1. 我创建了一个普通的旧 CLR 对象 (POCO) 类,专门用于保存能够被 XML 序列化的特定工作流的状态信息。我将把它称为未来的“状态对象”。

  2. 我创建了一个名为“WorkflowStateManager”的可重用类,它能够为给定的 SPWorkflow 加载和保存单个状态对象。工作流和修改表单都可以访问此类。

    • 保存状态实现:
      1. XML 将对象序列化为字符串
      2. 在 SPWorkflow 列表项的属性包上设置序列化字符串并调用属性包的 Update() 方法
    • 加载状态实现(本质上与保存状态实现相反)
      1. 从 SPWorkflow 列表项的属性包中获取序列化字符串
      2. XML 将字符串反序列化为状态对象
  3. 当工作流被激活时,我构造一个新的状态对象,初始化它的各种属性,并使用 WorkflowStateManager 保存它。

  4. 随着工作流程的进行,我会根据需要通过以下方式加载和更新状态对象:

    • 使用 WorkflowStateManager 加载当前状态对象
    • 根据状态对象的值做出工作流决策
    • 对状态对象进行所需的更改
    • 使用 WorkflowStateManager 保存状态对象
  5. 现在,我的修改表单还能够使用 WorkflowStateManager 加载、操作和保存状态对象,进而向用户公开工作流的当前状态。

我希望这可能对某人有益。

于 2009-01-19T18:29:15.760 回答