通过List Webservice更新列表项来触发SharePoint Workflow

时间:2008-09-25 15:22:17

标签: web-services sharepoint workflow autostart

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

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


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

4 个答案:

答案 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,向人们展示如何每天创建一个来设置电子邮件提醒。