2009-02-19 8 views
6

Ich würde gerne wissen, wie man eine Reihe von Operationen in einem SharePoint-Kontext innerhalb einer Transaktion durchführt. Zum Beispiel würde Ich mag so etwas wie die folgend in der Lage sein zu tun:SharePoint 2007: Wie kann ich eine Reihe von Operationen innerhalb einer Transaktion ausführen?

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

Ich weiß, das ist nicht möglich, mit dem OOTB APIs, aber jemand hat bekommen haben herausgefunden, wie dies zu erreichen. Ist es möglich, einen Verweis auf die Datenbankverbindung zu erhalten, um die Transaktion zu bearbeiten? Oder irgendwelche anderen Ideen?

Antwort

8

Obwohl Sharepoint SQL als Speicher Unterstützung technisch verwendet, werden wir sie behandeln wie eine Datenbank-basierte Anwendung nicht zugelassen. SP erzeugt ein Faux-Dateisystem, mit dem wir über die API interagieren. Aus der Sicht des Entwicklers ist Sharepoint also ziemlich transaktionslos.

Leider ist das so ziemlich alles, was es gibt :) Selbst Denken über den Versuch, mit der Datenbank direkt beteiligt werden in Alt Testament Schmerzen führen. Kleidungsstücke, Heulen und Zähneknirschen;)

+1

Gehen Sie SharePoint. Viele Jahre relationaler Theorie und fein abgestimmter Implementierungen werden trivialisiert. –

4

Wenn Sie Versionierung verwenden, können Sie eine Lösung versuchen, die Ihren Artikel auscheckt, Aktualisierungen durchführt und eincheckt. Wenn ein Rollback erforderlich ist, machen Sie einfach die Kasse rückgängig.

Könnte vielleicht funktionieren ??

1

Eine weitere Option ist Workflow verwendet werden, mentioned here. Wie in How Windows SharePoint Services Processes Workflow Activities erklärte:

Windows Sharepoint Services den Workflow läuft, bis es einen Punkt erreicht, , wo es nicht weitergehen kann, weil es für ein Ereignis wartet auftreten: für Beispiel muss ein Benutzer eine Aufgabe bezeichnen als abgeschlossen. Nur bei diesem „ Punkt begehen“ funktioniert Windows Sharepoint Dienstleistungen verpflichten, die vorgenommenen Änderungen in der vorherigen Windows Sharepoint Dienste spezifischen Workflow-Aktivitäten. Diese Änderungen werden in eine einzelne SQL-Transaktion zusammengefasst.

+2

Das ist irgendwie irreführend. Es bezieht sich auf die Serialisierungs- (Entwässerungs-) Aspekte eines Workflows. Dasselbe kann gesagt werden, dass das Aufrufen von "Update" auf einem SPListItem ein "Festschreibungspunkt" ist. Es ist jedoch eine singuläre Operation, die keine Transaktionen unterstützt. –

6

einfach Recycle() verwenden. Verfolgen Sie die GUID in einer GUID []. Wenn man de RecycleBin offen ausfällt und Wiederherstellen/Löschen von 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

Nein Sharepoint keine SQL-Server wie Transaktionsfähigkeit bereitstellen.

Als Rutger Hemrika geschrieben, das ist eine viel bessere Möglichkeit, es als anyhing anderes zu tun, die ich bis jetzt gesehen habe.