gpt4 book ai didi

web-services - 通过 List Webservice 更新列表项来触发 SharePoint 工作流

转载 作者:行者123 更新时间:2023-12-03 14:57:08 52 4
gpt4 key购买 nike

我正在开发一个简单的 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 的文章能够帮助处于相同情况的开发人员。

    谢谢阅读!

    关于web-services - 通过 List Webservice 更新列表项来触发 SharePoint 工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/133953/

    52 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com