6

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?

Trent
  • 560
  • 4
  • 11

6 Answers6

8

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

Rex M
  • 142,167
  • 33
  • 283
  • 313
  • 1
    Go SharePoint. Many years of relational theory and finely tuned implementations are trivialized. –  Apr 19 '10 at 21:43
6

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):
Marco
  • 22,856
  • 9
  • 75
  • 124
4

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

Johan Leino
  • 3,473
  • 1
  • 26
  • 27
1

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.

Alex Angas
  • 59,219
  • 41
  • 137
  • 210
  • 2
    This is kind of misleading. It refers to the serialization (dehydration) aspects of a Workflows. The same can be said that invoking "Update" on an SPListItem is a "commit point". However, it is a singular operation that supports no transactions. –  Apr 19 '10 at 21:47
0

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.

j0k
  • 22,600
  • 28
  • 79
  • 90
0

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.

LiriB
  • 814
  • 8
  • 12