我正在尝试在 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 上强制执行批量删除操作的原子行为的属性,看到我发送的请求中的缺陷,或者有更好的批量删除项目解决方案?