trabajo flujos flujo ejemplos acciones sharepoint workflow

flujos - Flujo de trabajo de SharePoint: cómo actualizar el elemento sin activar nuevamente el flujo de trabajo



acciones de flujo de trabajo en sharepoint designer 2013 (5)

¿Podría agregar un paso al principio del flujo de trabajo que finaliza el flujo de trabajo si se activó una actualización mediante un cambio en ese campo? (El que se actualiza al usar el servicio).

Puede tener un campo booleano oculto en el elemento de lista que establece en verdadero cuando actualiza la lista usando el servicio. Luego, al comienzo del flujo de trabajo, puede verificar si este campo está establecido en verdadero.

Tengo un flujo de trabajo de SharePoint que se ejecuta cada vez que cambia el elemento . El flujo de trabajo se comunica con un servicio REST externo. Si el servicio devuelve una cadena, quiero actualizar uno de los valores de campo con esa cadena. Lamentablemente, esta actualización activará otra instancia del flujo de trabajo para este elemento una vez que finalice el flujo de trabajo actual. ¡Termino con un ciclo infinito!

¿Cómo puedo evitar que esto suceda? SPListItem tiene los métodos Update (), UpdateOverwriteVersion () y SystemUpdate (), pero ninguno de ellos parece impedir que se desencadenen los siguientes flujos de trabajo.

Pude inspeccionar la última marca de tiempo modificada del artículo y finalizar el flujo de trabajo si la última actualización ocurrió dentro de un intervalo de tiempo determinado, pero estoy buscando una solución más sólida.



Parece que Microsoft ha vuelto a trabajar en esto en SharePoint 2010, EventFiringEnabled y EventFiringDisabled se han vuelto obsoletos.

En su lugar, use una propiedad booleana llamada EventFiringEnabled.


Podría usar algún método de extensión para actualizar el elemento de forma silenciosa.

public static class SPListItemExtensions { /// <summary> /// Provides ability to update list item without firing event receiver. /// </summary> /// <param name="item"></param> /// <param name="doNotFireEvents">Disables firing event receiver while updating item.</param> public static void Update(this SPListItem item, bool doNotFireEvents) { SPItemEventReceiverHandling rh = new SPItemEventReceiverHandling(); if (doNotFireEvents) { try { rh.DisableEventFiring(); item.Update(); } finally { rh.EnableEventFiring(); } } else { item.Update(); } } /// <summary> /// Provides ability to update list item without firing event receiver. /// </summary> /// <param name="item"></param> /// <param name="incrementListItemVersion"></param> /// <param name="doNotFireEvents">Disables firing event receiver while updating item.</param> public static void SystemUpdate(this SPListItem item, bool incrementListItemVersion, bool doNotFireEvents) { SPItemEventReceiverHandling rh = new SPItemEventReceiverHandling(); if (doNotFireEvents) { try { rh.DisableEventFiring(); item.SystemUpdate(incrementListItemVersion); } finally { rh.EnableEventFiring(); } } else { item.SystemUpdate(incrementListItemVersion); } } /// <summary> /// Provides ability to update list item without firing event receiver. /// </summary> /// <param name="item"></param> /// <param name="doNotFireEvents">Disables firing event receiver while updating item.</param> public static void SystemUpdate(this SPListItem item, bool doNotFireEvents) { SPItemEventReceiverHandling rh = new SPItemEventReceiverHandling(); if (doNotFireEvents) { try { rh.DisableEventFiring(); item.SystemUpdate(); } finally { rh.EnableEventFiring(); } } else { item.SystemUpdate(); } } private class SPItemEventReceiverHandling : SPItemEventReceiver { public SPItemEventReceiverHandling() { } new public void DisableEventFiring() { base.DisableEventFiring(); } new public void EnableEventFiring() { base.EnableEventFiring(); } } }


puede usar el campo set en el ítem actual por el elemento de la lista de actualización .

Establecer campo actualizar el elemento de la lista sin desencadenar nuevo evento