0

我正在尝试在 SharePoint 2007/2010 上执行批量删除操作。

当我使用 List.asmx -> UpdateListItems 执行以下操作时,我得到了混合行为:

`<Batch OnError="Return" PreCalc="TRUE">
  <Method ID="87c970a3000c4e789a9c49ed43768865" Cmd="Delete">
    <Field Name="ID">18</Field>
    <Field Name="FileRef">
    http://vs-dev-sp2010/list1/DocLib/New
    Document-2.docx</Field>
  </Method>
  <Method ID="46e335183be64367a34c178772a86d92" Cmd="Delete">
    <Field Name="ID">6</Field>
    <Field Name="FileRef">
    http://vs-dev-sp2010/ list1/DocLib /New
    Document.docx</Field>
  </Method>
</Batch>`

第一项的操作成功(被删除),第二项失败(被检出给另一个用户)。这使得回滚事务变得非常困难(不可能?),因为已删除的项目会将版本历史、作者和创建日期/时间带入坟墓。由于 SharePoint 允许您“关闭”回收站,因此已删除的项目可能会永远消失。我希望 SharePoint 回滚失败的操作并返回整个批次的成功或失败;但是我观察到的行为是事务部分成功。

我还观察到,如果上述项目位于容器(文件夹)中,则整个批次都会失败(这是我所期待的行为)。

强制执行悲观并发不是一个选项,因为签出文件无法批处理(批处理中可能有数千个文件)。即使可以批量结帐,结帐操作本身也可能触发自定义工作流程。

有谁知道在 SharePoint 上强制执行批量删除操作的原子行为的属性,看到我发送的请求中的缺陷,或者有更好的批量删除项目解决方案?

4

1 回答 1

1

不幸的是,Sharepoint 列表不支持交易,根据我的经验,没有简单、通用的方法来实现这种行为。

据我了解,您的问题归结为类似的问题,丢失交易的解决方法是什么。对于在这里寻找答案的开发人员来说,这可能是一个很好的起点。

于 2013-07-17T15:27:02.397 回答