问题
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