SharePoint 2007:如何在事务中执行一系列操作?

6

我希望了解如何在SharePoint上下文中执行一系列操作并进行事务处理。例如,我想要像以下这样做:

context.BeginTransaction();
listItemA.Update();
listItemB.Update();
context.CommitTransaction();

我知道使用OOTB APIs无法实现这一点,但一定有人想出了如何完成此操作的方法。是否可以获取对数据库连接的引用以处理事务?或者还有其他的想法吗?
6个回答

8
尽管SharePoint技术上使用SQL作为存储后端,但我们不应将其视为基于数据库的应用程序。SP创建了一种类似于虚拟文件系统的东西,这就是我们通过API进行交互的内容。因此,从开发人员的角度来看,SharePoint几乎没有事务处理。
不幸的是,这几乎就是全部了 :) 即使考虑尝试直接与数据库打交道,也会导致旧约式的痛苦。撕裂衣服,哀号切齿 ;)

1
走向SharePoint。多年的关系理论和精细调校的实现被贬低了。 - user166390

6

只需使用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):

4
如果您使用版本控制,可以尝试一种解决方案,即签出项目、执行更新并签入。如果需要回滚,只需撤销签出即可。
也许可以行得通?

1

另一个选项是使用工作流,在这里提到。如Windows SharePoint Services如何处理工作流活动所述:

Windows SharePoint Services运行工作流,直到它到达无法继续的点,因为它正在等待某些事件发生:例如,用户必须将任务指定为已完成。只有在此“提交点”处,Windows SharePoint Services才会提交先前的Windows SharePoint Services特定工作流活动中所做的更改。这些更改被批处理成单个SQL事务。


2
这有点误导人。它指的是工作流的序列化(脱水)方面。同样可以说,在SPListItem上调用“Update”是一个“提交点”。但是,它是一个支持没有事务的单一操作。 - user166390

0

0

Sharepoint并不提供类似SQL Server的事务处理能力。

正如Rutger Hemrika所发表的,这是迄今为止我见过的最好的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接