SharePoint 2010: Como iniciar automáticamente un flujo de trabajo!

Una pregunta que me han realizado últimamente es la de si se puede iniciar de forma programática un flujo de trabajo desplegado en un sitio de SharePoint sin esperar a que tenga lugar un cierto evento. Por ejemplo, estoy pensando en iniciar un flujo utilizando una simple aplicación de consola, un servicio de Windows o un Timer Job de SharePoint. La respuesta a la pregunta es que sí, ya que el modelo de objetos nos proporciona lo necesario para instanciar un cierto workflow desplegado en nuestro sitio e iniciarlo. Por ejemplo, el código siguiente muestra como asociar automáticamente un flujo de trabajo de sitio a un sitio en el momento de creación y nos da las pistas para ver como podemos hacer lo mismo en los escenarios mencionados. Como veis, todo pasa por:

  • Crear una instancia de SPWeb, que en este caso obtenemos a partir de las propiedades del manejador.
  • Crear las listas de tareas e historial para el flujo de trabajo si este las necesita.
  • Crear una instancia del flujo de trabajo, para lo que necesitaremos su ID y definir un objeto de tipo SPWorkflowTemplate.
  • Definir la asociación del workflow mediante un objeto de tipo SPWorkflowAssociation.
  • Añadir el workflow en este caso al sitio.
  • Y finalmente arrancar el flujo.
   1: static readonly Guid TemplateID =

   2:     new Guid("abd1d6cc-72a8-4c2f-a567-3118d28f5862");

   3:  

   4: public override void WebProvisioned(SPWebEventProperties properties)

   5: {

   6:  

   7:     SPWeb newSite = properties.Web;

   8:     Guid taskListID = newSite.Lists.Add(

   9:         "Tasks for auto-start workflow", "",

  10:         SPListTemplateType.Tasks);

  11:     Guid historyListID = newSite.Lists.Add(

  12:         "History for auto-start workflow", "",

  13:         SPListTemplateType.WorkflowHistory);

  14:  

  15:     SPWorkflowTemplate template = newSite.WorkflowTemplates[TemplateID];

  16:     SPWorkflowAssociation association =

  17:          SPWorkflowAssociation.CreateWebAssociation(template,

  18:             "Auto-start workflow",

  19:             newSite.Lists[taskListID],

  20:             newSite.Lists[historyListID]);

  21:     newSite.WorkflowAssociations.Add(association);

  22:     newSite.Site.WorkflowManager.StartWorkflow(

  23:          newSite,

  24:          association, "", SPWorkflowRunOptions.Synchronous);

  25:  

  26: }

Finalmente, os dejo una serie de enlaces relacionados con este tema:

Publicado por

Juan Carlos González

Juan Carlos es Ingeniero de Telecomunicaciones por la Universidad de Valladolid y Diplomado en Ciencias Empresariales por la Universidad Oberta de Catalunya (UOC). Cuenta con más de 12 años de experiencia en tecnologías y plataformas de Microsoft diversas (SQL Server, Visual Studio, .NET Framework, etc.), aunque su trabajo diario gira en torno a SharePoint & Office 365. Juan Carlos es MVP de Office Servers & Services desde 2015 (anteriormente fue reconocido por Microsoft como MVP de Office 365 y MVP de SharePoint Server desde 2008 hasta 2015), coordinador del grupo de usuarios .NET de Cantabria (Nuberos.Net, www.nuberos.es), co-fundador y coordinador del Grupo de Usuarios de SharePoint de España (SUGES, www.suges.es), así como co-director de la revista gratuita en castellano sobre SharePoint CompartiMOSS (www.compartimoss.com). Hasta la fecha, ha publicado 8 libros sobre SharePoint & Office 365 y varios artículos en castellano y en inglés sobre ambas plataformas.

4 comentarios en “SharePoint 2010: Como iniciar automáticamente un flujo de trabajo!”

  1. Do you mind if I quote a couple of your posts as long as I provide credit and sources back to your site? My blog site is in the very same area of interest as yours and my users would definitely benefit from a lot of the information you present here. Please let me know if this okay with you. Appreciate it!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *