| Gustavo님의 프로필Gustavo Bonansea블로그리스트 | 도움말 |
|
12월 19일 Windows Workflow Foundation - Ejemplo simpleLuego de varios intentos fallidos por instalar WWF, esto es debido a que hay varias versiones de WinFX, Visual Studio Extensions, WinFX Runtime Components, WinFX SDK, etc,etc, y alguno de los que instalé no se llevaba bien con algún otro, opté por desinstalar todo de nuevo y arrancar de cero. Fue así como instalé solo dos cositas y todo terminó feliz:
Microsoft® Windows® Software Development Kit (SDK) for the November 2005 WinFX® Runtime Components Community Technology Preview (CTP) Windows Workflow Foundation Beta 1.2 for Office "12" (Beta 1) Luego de bajar algunos ejemplos y que ninguno funcione correctamente (al menos en mi máquina) me decidí a hacer mi propio ejemplo. Paso a compartir con Uds. mi experiencia. Creación de un proyectoCuando instalamos las Visual Studio Extensions para WWF se agregan varios templates al VS para ayudarnos a crear nuestros proyectos de workflow.En este caso crearemos un Sequential Workflow Console Application como muestra la imagen abajo: ![]() Esto crea por defecto un proyecto con un archivo Module1.vb que contiene el código de inicialización del workflow: Imports System Imports System.Collections.Generic Imports System.Text Imports System.Threading Imports System.Workflow.Runtime Imports System.Workflow.Runtime.Hosting
Module Module1 Class Program Shared WaitHandle As New AutoResetEvent(False)
Shared Sub Main() Dim workflowRuntime As New WorkflowRuntime() workflowRuntime.StartRuntime()
AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted
Dim type As System.Type = GetType(Workflow1) workflowRuntime.StartWorkflow(type)
WaitHandle.WaitOne()
workflowRuntime.StopRuntime() End Sub
Shared Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs) WaitHandle.Set() End Sub
End Class End Module
Crea además un archivo Workflow1.vb que contiene la definición del workflow cuya declaración de clase es la siguiente: Partial Public Class Workflow1 Inherits SequentialWorkflow Esta clase está ligada a la ejecución del workflow, cada actividad que agregemos en el diseñador, eventos que manejemos y demás tendrán su correspondiente código aquí. Diseño del flujo
Este workflow utiliza dos tipos de actividades: "Code" e "IfElse". La actividad del tipo Code está ligada a la ejecución directa de código. Veamos el ejemplo de la actividad codeGetInt: Esta actividad tiene en la propiedad ExecuteCode el procedimiento que se va a ejecutar cuando el flujo llegue a la misma, que en este caso es "codeGetInt_ExecuteCode": Private Sub codeGetInt_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs) DecisionValue = Integer.Parse(Console.ReadLine()) End Sub El procedimiento lee una línea de la consola, la convierte en un entero y guarda el valor en una variable a nivel de clase denominada "DecisionValue". La siguiente instrucción en una del tipo IfElse denominada ifValueDecision que tiene dos caminos posibles (pueden agregarse más). El primer camino posee una condición de evaluación que en caso de ser verdadera hace que el flujo alcance las actividades que se encuentran en esa rama. En caso de ser falsa se procesan las actividades del brazo alternativo.propiedades del branch de la izquierda
Cada uno de los brazos posee una actividad de tipo Code que escribe un mensaje en la consola: Private Sub codeLess_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs) Console.ForegroundColor = ConsoleColor.Green Console.WriteLine("The number is lower than 100") End Sub
Private Sub codeMore_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs) Console.ForegroundColor = ConsoleColor.Blue Console.WriteLine("The number is equal or greater than 100") End Sub Luego termina el flujo. Adicional a las ejecuciones de las actividades se sobreescribieron dos eventos del workflow, el de inicialización y de terminación: Private Sub Workflow1_Initialized(ByVal sender As System.Object, ByVal e As System.EventArgs) Console.WriteLine("Write a number") End Sub
Private Sub Workflow1_Completed(ByVal sender As System.Object, ByVal e As System.EventArgs) Console.ResetColor() Console.WriteLine("Press ENTER to End") Console.ReadLine() End Sub Flujo para excepciones
Es posible definir un flujo para controlar las excepciones que se producen durante la ejecución. En el presente caso se agregó una actividad "ExcepcionHandler" para que capture las excepciones del tipo "System.FormatExcepcion" que es el error en el cual se incurriría si intentamos parsear como entero algo que no lo es. Cuando el Integer.Parse falla y produce una excepción la ejecución pasa a la actividad exBadValue y luego a la actividad codeInvalidValue que procesa el siguiente código: Private Sub codeInvalidValue_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs) Console.ForegroundColor = ConsoleColor.Red Console.WriteLine("You must type an integer") Console.ResetColor() Console.WriteLine("Press ENTER to End") Console.ReadLine() End Sub Luego termina la ejecución. TestVeamos ahora que pasa cuando ejecutamos el ejemplo:
Código:
댓글 (2개)
트랙백이 블로그의 트랙백 URL은 다음과 같습니다. http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!547.trak 이 블로그를 참조하는 웹 로그
|
|
|