2009-02-19 11 views
6

Chciałbym wiedzieć, jak wykonać serię operacji w kontekście programu SharePoint w ramach transakcji. Na przykład chciałbym być w stanie coś zrobić jak poniżej:SharePoint 2007: Jak wykonać serię operacji w ramach transakcji?

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

wiem, nie jest to możliwe z API OOTB, ale ktoś musi się zorientowali się, jak tego dokonać. Czy możliwe jest uzyskanie odniesienia do połączenia z bazą danych w celu obsługi transakcji? Lub jakieś inne pomysły?

Odpowiedz

8

Chociaż SharePoint technicznie używa SQL jako podkładu magazynowego, nie powinniśmy traktować go jak aplikacji bazującej na bazie danych. SP tworzy fałszywy system plików, z którym współpracujemy za pośrednictwem interfejsu API. Z punktu widzenia programisty, Sharepoint jest praktycznie pozbawiony transakcji.

Niestety to wszystko, co do niego należy :) Nawet myślenie o próbie bezpośredniego zaangażowania się w bazę danych spowoduje ból starotestamentowy. Wyrzucanie ubrań, płacz i zgrzytanie zębów;)

+1

Przejdź do SharePoint. Wiele lat teorii relacyjnej i precyzyjnie dostrojonych implementacji są banalizowane. –

4

Jeśli używasz wersji, możesz wypróbować rozwiązanie, które sprawdzi Twój produkt, wykona aktualizacje i sprawdzi się. Jeśli konieczne jest wycofanie, po prostu cofnij kasę.

Czy praca może?

1

Inną opcją jest użycie przepływu pracy, mentioned here. Jak stwierdzono w How Windows SharePoint Services Processes Workflow Activities:

Windows SharePoint Services prowadzi obieg aż osiągnie punkt gdzie nie może kontynuować, ponieważ jest czekając wystąpić pewne zdarzenie: na przykład, użytkownik musi wyznaczyć zadanie jako zakończony. Tylko w tym punkcie "commit " usługi Windows SharePoint zatwierdzają zmiany wprowadzone w poprzednich Windows SharePoint związanych z usługami działań związanych z przepływem pracy. Te zmiany są grupowane w pojedynczej transakcji SQL .

+2

To wprowadza w błąd. Odnosi się do aspektów serializacji (odwodnienia) przepływów pracy. To samo można powiedzieć, że wywołanie "Update" na SPListItem jest "punktem zatwierdzenia". Jednak jest to pojedyncza operacja, która nie obsługuje żadnych transakcji. –

6

Po prostu użyj Odzyskuj(). Śledzenie GUID w GUID []. Jeśli jeden nie otwarty de RecycleBin i przywracania/delete wszystkim 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): 
0

Nie Sharepoint nie przewiduje możliwości serwera SQL jak transakcyjnej.

Jak napisał Rutger Hemrika, jest to o wiele lepszy sposób niż jakikolwiek inny, który widziałem do tej pory.

Powiązane problemy