我正在尝试对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上强制执行批量删除操作的原子行为的属性,看到我发送的请求中的缺陷,或者有更好的批量删除项目的解决方案?
发布于 2013-07-17 23:27:02
不幸的是,事务是not supported on Sharepoint lists的,根据我的经验,没有简单、通用的方法来实现这种行为。
据我所知,你的问题可以归结为类似的问题,What is the workaround for missing transactions。对于在这里寻找答案的开发人员来说,这可能是一个很好的起点。
https://stackoverflow.com/questions/12047014
复制相似问题