我很想知道如何在事务中的SharePoint上下文中执行一系列操作。例如,我希望能够执行以下操作:
context.BeginTransaction();
listItemA.Update();
listItemB.Update();
context.CommitTransaction();
我知道使用OOTB API是不可能的,但是有人必须弄清楚如何实现这一点。是否可以获取对数据库连接的引用以处理事务?还是其他任何想法?
答案 0 :(得分:8)
尽管SharePoint在技术上使用SQL作为存储支持,但我们不应将其视为基于数据库的应用程序。 SP创建了一个各种各样的虚假文件系统,这是我们通过API进行交互的方式。因此,从开发人员的角度来看,Sharepoint几乎没有交易。
不幸的是,这几乎就是它的全部内容:)即使思考关于试图直接参与数据库也会导致旧约痛苦。衣服的撕裂,嚎叫和咬牙切齿;)
答案 1 :(得分:6)
只需使用Recycle()。跟踪GUID []中的GUID。如果一个失败打开de RecycleBin 并通过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):
答案 2 :(得分:4)
如果您使用版本控制,您可以尝试检查项目,执行更新和签入的解决方案。如果需要回滚,只需撤消结帐。
可以工作吗?
答案 3 :(得分:1)
另一种选择是使用工作流程mentioned here。如How Windows SharePoint Services Processes Workflow Activities中所述:
Windows SharePoint Services运行 工作流程直到达到某一点 因为它是无法继续的地方 等待某事件发生:for 例如,用户必须指定任务 完成了。只有在这个“提交 点“做Windows SharePoint 服务提交所做的更改 以前的Windows SharePoint 特定于服务的工作流活动。 这些变化被分成了一个 单个SQL事务。
答案 4 :(得分:0)
No Sharepoint不提供类似事务功能的SQL服务器。
正如Rutger Hemrika所说,这是一个比我迄今为止所看到的其他方式更好的方式。
答案 5 :(得分:0)
Sharepoint不提供开箱即用的交易支持。这是Building a System.Transactions resource manager for SharePoint上的一个很好的资源。虽然我会节省工作量并将任何关键数据直接存储到RDB中。