Agregar actividades en tiempo de ejecución a un flujo de trabajo (desde el mismo flujo de trabajo) y validar dichos cambios

by Nicolás Ferreira 27. May 2008 00:00

Cuando aplicamos cambios en tiempo de ejecución a un flujo de trabajo, puede que estos cambios contengan errores. Para demostrar esto vamos a crear un nuevo proyecto de tipo Sequential Workflow Console Application al que llamaremos WorkflowSample3.

Arrastramos sobre el diseñador visual de flujos de trabajo una instancia de la actividad CodeActivity y la soltamos en la superficie de diseño. Hacemos clic derecho sobre codeActivity1 y seleccionamos la opción de menú "Generate Handlers".

Igual al artículo anterior ("Agregar actividades en tiempo de ejecución a un flujo de trabajo"), vamos a proceder a crear una instancia de la clase WorkflowChanges y agregar una actividad.

En la vista de código para Workflow1.cs, buscamos el método codeActivity1_ExecuteCode y ponemos lo siguiente:

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            WorkflowChanges lWorkflowChanges = new WorkflowChanges(this);

            CodeActivity lCodeActivity = new CodeActivity();

            lWorkflowChanges.TransientWorkflow.Activities.Add(lCodeActivity);

            this.ApplyWorkflowChanges(lWorkflowChanges);
        }

Como verán, al constructor de WorkflowChanges le pasamos "this" ya que la actividad raíz es el mismo flujo de trabajo en el que estamos codificando (Workflow1 hereda de SequentialWorkflowActivity). Luego, instanciamos y agregamos a las actividades del flujo de trabajo una instancia de la clase CodeActivity. Por último, llamamos al método ApplyWorkflowChanges (también de Workflow1).

Si ejecutamos la aplicación así como está, obtendremos el siguiente error:

Agregar actividades en tiempo de ejecución a un flujo de trabajo (desde el mismo flujo de trabajo) y validar dichos cambios: WorkflowValidationFailedException

Esto se debe a que en este caso, CodeActivity requiere que manejemos el evento ExecuteCode (e intencionalmente no lo hicimos).

Modificamos el código del método codeActivity1_ExecuteCode dejándolo de la siguiente manera:

 

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            WorkflowChanges lWorkflowChanges = new WorkflowChanges(this);

            CodeActivity lCodeActivity = new CodeActivity();

            lWorkflowChanges.TransientWorkflow.Activities.Add(lCodeActivity);

            ValidationErrorCollection lValidationErrorCollection =
                lWorkflowChanges.Validate();
            if (lValidationErrorCollection.Count > 0)
            {
                foreach (ValidationError lValidationError in lValidationErrorCollection)
                {
                    Console.WriteLine(lValidationError.ErrorText);
                }
            }
            else
            {
                this.ApplyWorkflowChanges(lWorkflowChanges);
            }
        }

Si ejecutamos la aplicación, vamos a ver que no tira excepción pero nos deja el siguiente mensaje:

Agregar actividades en tiempo de ejecución a un flujo de trabajo (desde el mismo flujo de trabajo) y validar dichos cambios

Tags:

.NET Development | Windows Workflow Foundation (WF)

Comments

7/28/2010 7:52:46 AM #

Fatman iTube Dock

A mutual associate recommended your site to me. Definitely worth my time! I like how you really dig in and get to the bottom line but can you explain that last part again? Just a little? --Eden

Fatman iTube Dock United States | Reply

8/27/2010 9:57:17 AM #

nude cam

woopwoop nieuwe badpakken gehaalt, toch wel leuker als je 4 maten kwijt bent Laughing nog steeds ziek helaaz Frown

nude cam United States | Reply

8/29/2010 10:59:35 PM #

Best Smokeless Cigarette

Thanks for this brilliant article. I am delighted after reading this. Thank you!

Best Smokeless Cigarette United States | Reply

8/31/2010 11:08:44 PM #

Lemonade Diet Recipe

Very habitually I go to this webpage. It very greatly is satisfying to me. Thanks the author

Lemonade Diet Recipe United States | Reply

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading