我正在开发一个简单的SharePoint顺序工作流,它应绑定到文档库。将小工作流程与文档库相关联时,我检查了这些选项
现在我将文档上传到此库并启动工作流程,例如发送邮件。它完成了,一切都很好。
当我在新项目上选择编辑属性并保存更改时,将再次触发工作流程。绝对是我们的期望。
即使在Copy.asmx Webservice的帮助下将新项目复制到库中,工作流程也会正常启动。
但现在我想通过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.
有谁可以证实这种行为?或任何解决方案提示?
我随时向您通报有关此主题的任何进展。
答案 0 :(得分:11)
最后,我们完成了Microsoft的支持服务流程并获得了解决方案!
首先,微软称这是一个错误。这是一个小错误,因为有一个很好的解决方法,所以可能需要一些时间,直到这个错误得到修复(支持技术人员说下一个服务包或下一个版本(!))。
但现在出现了问题。
reaseon
让我们看看我的问题中的CAML代码:
<Method ID='1' Cmd='Update'>
<Field Name='ID'>1</Field>
<Field Name='myDummyPropertyField'>NewValue</Field>
</Method>
由于任何原因,Workflow Manager无法使用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的这篇文章能够帮助处于同样情况的开发人员。
感谢阅读!
答案 1 :(得分:3)
我们在批准工作流程中遇到了类似的问题。 为了解决这个问题,我们编写了自己的事件接收器并将其附加到列表中。 根据项目是否已更新或编辑,我们随后启动了审批工作流程。
希望这会有所帮助......
答案 2 :(得分:0)
我也遇到过这个问题,并发现一旦工作流程启动,无论您如何更新项目,都无法自动重新启动。但是,您可以根据需要多次手动启动工作流程。
答案 3 :(得分:0)
我看到了同样的行为。但随后您会收到posts like this,向人们展示如何每天创建一个来设置电子邮件提醒。