我正在开发一个简单的 SharePoint 顺序工作流,它应该绑定到文档库。将小工作流程关联到文档库时,我检查了这些选项

  • 允许具有编辑项目权限的经过身份验证的用户手动启动此工作流程。
  • 创建新项目时启动此工作流程。
  • 更改项目时启动此工作流程。

现在,我将文档上传到该库,工作流程开始,例如发送一封邮件。它完成了,一切都很好。

当我选择新项目的“编辑属性”并保存更改时,工作流程将再次触发。绝对符合我们的预期。

即使在 Copy.asmx Web 服务的帮助下将新项目复制到库中,工作流程也会正常启动。

现在 我想更新该项目 通过 SharePoint WebService Lists.asmx.

我的 CAML 转到这里:

<Method ID='1' Cmd='Update'>
  <Field Name='ID'>1</Field>
  <Field Name='myDummyPropertyField'>NewValue</Field>
</Method>

项目正在更新(时间戳已更改,虚拟属性也已更改),但工作流程不会再次启动。

这种行为可以在我们的开发中重现 测试系统。

检查错误日志(C:\ Program Files \ Common Files \ Microsoft Shared \ web server extensions \ 12 \ LOGS)我发现了一条奇怪的错误消息:

09/25/2008 16:51:40.17  w3wp.exe (0x1D94)                           0x1D60  Windows SharePoint Services     General                         6875    Critical    Error loading and running event receiver Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver in Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Additional information is below.  : The object specified does not belong to a list.

有谁可以证实这种行为吗?或者有什么解决办法的提示吗?


我会随时向您通报有关此主题的任何进展。

有帮助吗?

解决方案

最后,我们通过了微软的支持服务流程并得到了解决方案!

首先,微软表示这是一个错误。这是一个小错误,因为有一个很好的解决方法,因此可能需要更长的时间才能修复此错误(支持技术人员在下一个服务包或下一个版本中说了一些话(!))。

但现在问题来了。

其原因

让我们看一下我的问题中的 CAML 代码:

<Method ID='1' Cmd='Update'>
  <Field Name='ID'>1</Field>
  <Field Name='myDummyPropertyField'>NewValue</Field>
</Method>

由于某种原因,工作流程管理器无法使用我们在第二行输入的 ID。奇怪的是,所有其他 SharePoint 命令都使用该 ID,但工作流程管理器则不然。Workflow Manager 使用“完全限定”文档名称。因此,由于我们没有任何线索,也没有输入任何完全限定的文档名称,工作流程管理器默认使用当前文档库的名称。现在错误消息开始有意义:

The object specified does not belong to a list.

当然,对象(文档库)不属于列表,它就是列表。

解决方案

我们必须在 CAML 查询中再添加一行:

<Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field>

FileRef 将完全限定的文档名称传递给工作流程管理器,工作流程管理器现在非常高兴地启动该项目的工作流程。

请注意,您必须包含完整的绝对服务器路径,并省略您的服务器名称(例如在 SPItem 的 ServerRelativePath 属性中找到的名称)。

完整的 CAML 查询:

 <Method ID='1' Cmd='Update'>
    <Field Name='ID'>1</Field>
    <Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field>
    <Field Name='myDummyPropertyField'>NewValue</Field>
  </Method>

未来

也许这种未记录的行为将在即将推出的服务包之一中得到修复,也许不会。Microsoft 支持人员已致歉,并将发布有关此主题的 MSDN 文章。在下个月,我希望 stackoverflow 上的这篇文章能够帮助遇到同样情况的开发人员。

谢谢阅读!

其他提示

我们在审批工作流程中遇到了类似的问题。为了解决这个问题,我们编写了自己的事件接收器并将其附加到列表中。然后,根据项目是否更新或编辑,我们启动审批工作流程。

希望这可以帮助...

我也遇到过这个问题,并发现一旦工作流程启动,无论您如何更新项目,它都无法自动重新启动。但是,您可以根据需要多次手动再次启动工作流程。

我也见过同样的行为。但然后你得到 像这样的帖子, ,向人们展示如何每天创建一个来设置电子邮件提醒。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top