SharePoint 2007: How can I perform a series of operations within a transaction?

冷暖自知 提交于 2019-12-09 18:08:21

问题


I would love to know how to perform a series of operations in a SharePoint context within a transaction. For example, I would like to be able to do something like the following:

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

I know this isn't possible with the OOTB APIs, but someone has got to have figured out how to accomplish this. Is it possible to get a reference to the database connection in order to handle the transaction? Or any other ideas?


回答1:


Although SharePoint technically uses SQL as a storage backing, we're not supposed to treat it like a database-based application. SP creates a faux-filesystem of sorts, which is what we interact with via the API. So from the developer perspective, Sharepoint is pretty much transaction-less.

Unfortunately that's pretty much all there is to it :) Even thinking about trying to get involved with the database directly will result in Old Testament pain. Rending of garments, wailing and gnashing of teeth ;)




回答2:


Simply use Recycle(). Keep track of the GUID in a GUID[]. If one fails open de RecycleBin and restore/delete all by 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):



回答3:


If you use versioning you could try a solution that checks out your item, performs updates and checks in. If rollback is needed, just undo the checkout.

Could work maybe??




回答4:


Another option is to use workflow, mentioned here. As stated in How Windows SharePoint Services Processes Workflow Activities:

Windows SharePoint Services runs the workflow until it reaches a point where it cannot proceed because it is waiting for some event to occur: for example, a user must designate a task as completed. Only at this "commit point" does Windows SharePoint Services commit the changes made in the previous Windows SharePoint Services-specific workflow activities. Those changes are batched into a single SQL transaction.




回答5:


No Sharepoint does not provide SQL server like transaction capability.

As Rutger Hemrika posted, thats a far better way of doing it than anyhing else that I have seen until now.




回答6:


Sharepoint does not offer transaction support out of the box. Here is a good resource on Building a System.Transactions resource manager for SharePoint Though I would save the effort and store any critical data directly into a RDB.



来源:https://stackoverflow.com/questions/563465/sharepoint-2007-how-can-i-perform-a-series-of-operations-within-a-transaction

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!