16

我正在开发一个简单的 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.

谁能证实这种行为?或任何解决方案提示?


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

4

4 回答 4

11

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

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

但现在解决问题。

原因

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

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

出于任何原因,Workflow Manager 无法使用该 ID,我们在第二行中输入了该 ID。奇怪的是,所有其他 SharePoint 命令都使用 ID,但不是 Workflow Manager。Workflow Manager 使用“完全限定”的文档名称。因此,由于我们没有任何线索并且没有输入任何完全限定的文档名称,Workflow Manager 默认使用当前文档库的名称。现在错误消息开始变得有意义:

The object specified does not belong to a list.

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

解决方案

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

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

FileRef 将完全限定的文档名称传递给 Workflow Manager,它现在非常高兴 - 启动项目的工作流。

请注意,您必须包含完整的绝对服务器路径,省略您的服务器名称(例如在您的 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 的文章能够帮助处于相同情况的开发人员。

谢谢阅读!

于 2008-12-15T14:13:59.060 回答
3

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

希望这可以帮助...

于 2008-10-08T09:25:21.100 回答
0

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

于 2008-09-28T06:28:05.133 回答
0

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

于 2008-11-18T23:18:11.620 回答