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

时间:2009-02-19 00:18:02

标签: sharepoint transactions moss wss transactionscope

我很想知道如何在事务中的SharePoint上下文中执行一系列操作。例如,我希望能够执行以下操作:

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

我知道使用OOTB API是不可能的,但是有人必须弄清楚如何实现这一点。是否可以获取对数据库连接的引用以处理事务?还是其他任何想法?

6 个答案:

答案 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中。