Escribo este post ya que he notado que muchos desarrolladores al crear flujos de trabajo utilizando Visual Studio 2010 para SharePoint 2010, incluso para Project Server 2010, se quejan que durante la ejecución del flujo de trabajo no tienen acceso al "contexto", es decir no pueden utilizar la instancia de la clase SPContext accediéndola de la manera común Microsoft.SharePoint.SPContext.Current.
Y si bien es cierto que durante la ejecución del flujo de trabajo si intentamos acceder al contexto de SharePoint de esta manera siempre obtendremos null, la solución es crear durante la inicialización del flujo de trabajo una instancia del objeto Microsoft.SharePoint.WorkflowActions.WorkflowContext,
la cual nos permitirá acceder a gran parte de la información del contexto de ejecución de SharePoint desde el flujo de trabajo.
la cual nos permitirá acceder a gran parte de la información del contexto de ejecución de SharePoint desde el flujo de trabajo.
Para inicializar una instancia de la clase WorkflowContext, seguimos los siguientes dos sencillos pasos:
Declaramos una propiedad del tipo WorkflowContext y posteriormente la instanciamos utilizando el constructor sin parámetros que existe.
public Microsoft.SharePoint.WorkflowActions.WorkflowContext WFContext { get; set; } public Workflow1() { WFContext = new Microsoft.SharePoint.WorkflowActions.WorkflowContext(); InitializeComponent(); }
Después inicializamos la propiedad en el evento Invoked de la actividad OnWorkflowActivated que se agrega automáticamente cuando creamos el flujo de trabajo
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e) { WFContext.Initialize(workflowProperties); }
El código completo se vería asi:
using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collections; using System.Drawing; using System.Linq; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.Runtime; using System.Workflow.Activities; using System.Workflow.Activities.Rules; using Microsoft.SharePoint; using Microsoft.SharePoint.Workflow; using Microsoft.SharePoint.WorkflowActions; namespace WorkflowDemo.Workflow1 { public sealed partial class Workflow1 : SequentialWorkflowActivity { public Guid workflowId = default(System.Guid); public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties(); public Microsoft.SharePoint.WorkflowActions.WorkflowContext WFContext { get; set; } public Workflow1() { WFContext = new Microsoft.SharePoint.WorkflowActions.WorkflowContext(); InitializeComponent(); } private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e) { WFContext.Initialize(workflowProperties); } } }
Y eso es todo, ahora podemos acceder al contexto de SharePoint utilizando esta propiedad.
Happy Coding!
0 comentarios:
Publicar un comentario