我正在开发一个简单的 SharePoint 顺序工作流,它应该绑定(bind)到文档库。将小工作流与文档库相关联时,我检查了这些选项
由经过身份验证的用户启动
具有编辑项目权限。
当一个新项目是这个工作流
创建的。
一个项目被改变了。
现在我将一个文档上传到这个库,工作流程开始,例如发送一封邮件。它完成了,一切都很好。
当我在新项目上选择编辑属性并保存更改时,再次触发工作流。完全符合我们的预期。
即使在 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.
谁能证实这种行为?或任何解决方案提示?
我会随时通知您有关此主题的任何进展。
请您参考如下方法:
最后,我们通过了 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>
future
也许这种未记录的行为将在即将推出的服务包之一中得到修复,也许不会。 Microsoft 支持部门已致歉,并将发布有关此主题的 MSDN 文章。在接下来的一个月里,我希望这篇关于 stackoverflow 的文章能够帮助处于相同情况的开发人员。
谢谢阅读!


