Para comenzar a desarrollar nuestra actividad, crearemos un nuevo proyecto en Visual Studio 2005 o superior.
Este proyecto deberá ser de tipo Class Library. Aquí definiremos el nombre del proyecto, la ubicación en donde se creará dicho proyecto y el nombre de la solución.
En nuestro ejemplo, ambos, el nombre del proyecto y nombre de la solución, los definimos como CustomActivities.
Procederemos a renombrar el archivo generado por defecto "Class1.cs", lo llamaremos "MyActivity.cs".
A continuación pasaremos a desarrollar la funcionalidad de nuestra actividad en tiempo de ejecución para lo cual deberemos:
namespace Tycon.Labs.CustomActivities
{
/// Definimos que al hacer doble clic sobre nuestra actividad en el Designer se abrirá la pantalla de configuración
/// definida en la clase MyActivityDesigner que definiremos en el Paso 5.
[System.ComponentModel.Designer("Tycon.Labs.CustomActivities.MyActivityDesigner, CustomActivities")]
/// Definimos la imagen a mostrar para la actividad en la caja de herramientas del Designer.
[System.Drawing.ToolboxBitmap(typeof(MyActivity), "MyActivityIcon.png")]
public class MyActivity : Tycon.BIZUIT.Activities.TyconActivity
{
public override void Run(System.Workflow.ComponentModel.ActivityExecutionContext context)
{
//Este metodo sera ejecutado de manera automatica por el motor de worklfow de BIZUIT
// Obtiene en un XML el valor de la estructura de entrada (cuyo XSD esta definido en la propiedad InputSchema)
// Este XML contendrá los valores que se hayan mapeado en el Paso 4 del Asistente de Configuracion
// Ese XML es almacenado en la propiedad InputXml
Tycon.BIZUIT.WorkflowHelper helper = new Tycon.BIZUIT.WorkflowHelper();
InputXml = helper.ExecuteTransformation(this, context);
// Cargo los parametros de entrada.
// En nuestro ejemplo, los parametros recibidos tienen la forma:
//<MyActivity>
//<MyValue1>VALORENVIADO1</MyValue1>
//<MyValue2>VALORENVIADO2</MyValue2>
//</MyActivity>
//Debido a que definimos que la propiedad InputSchema tendria esa forma.
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(InputXml);
// Obtengo los valores que me interesan de los parametros recibidos, y hago lo que tiene que hacer la actividad.
// En nuestro caso, concatenar los dos valores recibidos y devolverlos en una estructura <Reponse>VALORCONCATENADO</Response>
// Porque asi lo definimos en la propiedad OutputSchema
System.Xml.XmlElement docElem = doc.DocumentElement;
string valor1 = doc.SelectSingleNode("//MyValue1").InnerText;
string valor2 = doc.SelectSingleNode("//MyValue2").InnerText;
string result = "<Response>" + valor1 + valor2 + "</Response>";
// Guardo el resultado de la operacion en la propiedad OutputXml
OutputXml = result;
// Una vez realizada la ejecución, ejecuto los eventuales mapeos definidos en el Paso 5 del Asistente de Configuracion
helper.ExecuteOutputParameter(this, context);
}
}
}
El paso siguiente, será registrar las propiedades de dicha actividad, las cuales almacenarán los valores ingresados en la interfaz de configuración permitiendo su serialización y deserialización.
En nuestro ejemplo requeriremos de dos propiedades: MyValue1 y MyValue2, las cuales se definen de la siguiente manera:
public static System.Workflow.ComponentModel.DependencyProperty MyValue1Property = System.Workflow.ComponentModel.DependencyProperty.Register("MyValue1", typeof(System.String), typeof(MyActivity));
[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)]
[System.ComponentModel.Browsable(true)]
public string MyValue1
{
get { return ((string)(GetValue(MyValue1Property))); }
set { SetValue(MyValue1Property, value); }
}
public static System.Workflow.ComponentModel.DependencyProperty MyValue2Property = System.Workflow.ComponentModel.DependencyProperty.Register("MyValue2", typeof(System.String), typeof(MyActivity));
[System.ComponentModel.DesignerSerializationVisibility(System.ComponentModel.DesignerSerializationVisibility.Visible)]
[System.ComponentModel.Browsable(true)]
public string MyValue2
{
get { return ((string)(GetValue(MyValue2Property))); }
set { SetValue(MyValue2Property, value); }
}