2009-02-19 9 views
6

Me encantaría saber cómo realizar una serie de operaciones en un contexto de SharePoint dentro de una transacción. Por ejemplo, me gustaría ser capaz de hacer algo como lo siguiente:SharePoint 2007: ¿Cómo puedo realizar una serie de operaciones dentro de una transacción?

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

Sé que esto no es posible con las API OOTB, pero alguien tiene que haber descubierto la manera de lograr esto. ¿Es posible obtener una referencia a la conexión de la base de datos para manejar la transacción? ¿O alguna otra idea?

Respuesta

8

Aunque SharePoint técnicamente utiliza SQL como respaldo de almacenamiento, no debemos tratarlo como una aplicación basada en bases de datos. SP crea un falso sistema de archivos, que es con lo que interactuamos a través de la API. Entonces, desde la perspectiva del desarrollador, Sharepoint prácticamente no tiene transacciones.

Lamentablemente, eso es casi todo :) Incluso pensando en tratar de involucrarse directamente con la base de datos dará lugar a un dolor en el Antiguo Testamento. Desgarro de prendas, gemidos y crujir de dientes;)

+1

Vaya a SharePoint. Muchos años de teoría relacional e implementaciones finamente sintonizadas son triviales. –

4

Si utiliza el control de versiones, puede probar una solución que verifique su artículo, realice actualizaciones y realice el check-in. Si se necesita deshacer, simplemente deshaga el pago.

¿Podría funcionar quizás?

1

Otra opción es utilizar el flujo de trabajo, mentioned here. Como se indica en How Windows SharePoint Services Processes Workflow Activities:

de Windows SharePoint Services se ejecuta el flujo de trabajo hasta que llega a un punto donde no puede proceder porque es la espera de que se produzca algún evento: para ejemplo, un usuario debe designar una tarea como completado Solo en este "commit point" los servicios de Windows SharePoint confirman los cambios realizados en las actividades previas del flujo de trabajo de Windows SharePoint . Esos cambios se agrupan en una transacción de SQL simple .

+2

Esto es un poco engañoso. Se refiere a los aspectos de serialización (deshidratación) de un flujo de trabajo. Lo mismo puede decirse que invocar "Actualizar" en un SPListItem es un "punto de confirmación". Sin embargo, es una operación singular que no admite transacciones. –

6

Simplemente use Recycle(). Mantenga un registro del GUID en un GUID []. Si uno falla abierta de RecycleBin y restaurar/borrar todo por 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

Sin Sharepoint no proporciona el servidor SQL como la capacidad de transacción.

Como lo publicó Rutger Hemrika, esa es una forma mucho mejor de hacerlo que cualquier otra cosa que haya visto hasta ahora.

Cuestiones relacionadas