Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 396
Trent Avatar asked Feb 19 '09 00:02

Trent


4 Answers

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 ;)

like image 182
Rex M Avatar answered Nov 10 '22 20:11

Rex M


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):
like image 39
Rutger Hemrika Avatar answered Nov 10 '22 21:11

Rutger Hemrika


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??

like image 38
Johan Leino Avatar answered Nov 10 '22 20:11

Johan Leino


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.

like image 30
Alex Angas Avatar answered Nov 10 '22 19:11

Alex Angas