我希望了解如何在SharePoint上下文中执行一系列操作并进行事务处理。例如,我想要像以下这样做:
context.BeginTransaction();
listItemA.Update();
listItemB.Update();
context.CommitTransaction();
我知道使用OOTB APIs无法实现这一点,但一定有人想出了如何完成此操作的方法。是否可以获取对数据库连接的引用以处理事务?或者还有其他的想法吗?
我希望了解如何在SharePoint上下文中执行一系列操作并进行事务处理。例如,我想要像以下这样做:
context.BeginTransaction();
listItemA.Update();
listItemB.Update();
context.CommitTransaction();
只需使用Recycle()函数。在GUID[]数组中跟踪GUID。如果一个操作失败,打开回收站并按GUID恢复/删除所有内容。
GUID[] guids = new GUID[];
SPWeb web;
SPListItem item;
SPList list;
try
{
foreach item in list
GUID current = item.Recycle()
guids.add(current);
item.Delete();
}
catch{
if one fails : web.RecycleBin.Restore(guids);
}
if all succeed : web.RecycleBin.Delete(guids):
另一个选项是使用工作流,在这里提到。如Windows SharePoint Services如何处理工作流活动所述:
Windows SharePoint Services运行工作流,直到它到达无法继续的点,因为它正在等待某些事件发生:例如,用户必须将任务指定为已完成。只有在此“提交点”处,Windows SharePoint Services才会提交先前的Windows SharePoint Services特定工作流活动中所做的更改。这些更改被批处理成单个SQL事务。
SharePoint默认不提供事务支持。这里有一个很好的资源,介绍如何为SharePoint构建System.Transactions资源管理器(Building a System.Transactions resource manager for SharePoint)。虽然我建议将任何关键数据直接存储到RDB中,以避免不必要的麻烦。
Sharepoint并不提供类似SQL Server的事务处理能力。
正如Rutger Hemrika所发表的,这是迄今为止我见过的最好的方法。