当前位置: 首页>>技术解读>>正文


如何在状态机工作流中使用onWorkflowItemChanged?

webfans 技术解读 , , 去评论

问题描述

我正在使用一个简单的工作流程进行演示:

2010,workflow,sharepoint

Init设置State1。状态1等待项目改变并且设置状态2.状态2等待项目改变并完成工作流程。

问题:在运行此工作流程并更改项目时,工作流程会一直运行到完成状态,但不会在步骤2(stateActivity2)处停止。

我读过onWorkflowItemChanged活动需要工作流相关令牌才能工作。我已经做了一个调整,为每个状态创建一个新的关联标记(通过InitializeWorkflow),并在每个状态中使用该关联标记。这种方式在每种状态下的工作流程”stops”,但这是正确的方式去处理事情?

我只想让状态机工作流程等待项目更改,然后(和一些代码)继续到下一个状态。

基本上我的问题是:如何在状态机工作流中使用onWorkflowItemChanged?


编辑:

试图使用

CallExternalMethod

HandleExternalEvent

方法(见下面或这里的评论:

Capturing OnItemChanged

) – 无济于事,事件根本就没有被调用 – 人们应该能够使用

OnWorkflowItemChanged

活动还有什么用途?

只需补充一点:我在完全不同的SP2010系统上验证了这种行为 – 我在图像中显示的方法必须是错误的,

(这里来的踢球者)它在SP2007中工作(多个州与一个

OnWorkflowActivated

活动)

最佳解决方法

所以我觉得我找到了两个解决方案,解决方法和真正的解决方案:

解决方法:

  1. 在创建列表项时记录开始消息;

  2. 第一次更新列表项时记录一条消息;

  3. 第二次更新列表项时记录另一条消息;

  4. 完成工作流程。

使用此方法下载测试项目:Download(via MSDN forums)

解决方案:相当愚蠢,但我认为这是问题:LogToWorkflowHistory活动。

在我的所有示例工作流程中,我在项目更改后创建了”item changed”日志条目。一旦所有LogToWorkflowHistory活动都被删除(并通过SPWorkflow.CreateHistoryEvent在代码中完成) – 在完成第一个工作后,工作流程不会继续到下一个状态。我假设LogToWorkflowHistory活动以某种方式触发该项目的更新,因此在第一个ItemChanged之后,会激发一个Log条目并且项目发生更改,因此下一个状态也会认为该项目已更改。

在下面的示例中可以看到简单的解决方案,在我的实时工作流程中,我在这里和那里都有一些代码活动 – 但是所有LogToWorkflowHistory都消失了。

2010,workflow,sharepoint


编辑:

我忘了提及:ItemChanged活动的关联标记未设置为workflowToken,而是设置为状态中特别创建的标记。在状态的初始化事件中,有一个WorkflowInitializing活动,我在其中设置自定义标记,然后将此标记用于ItemChangedEvent中。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/1240.html,转载请务必附带本地址声明。