Workflow

Kaldeera – Silverlight edition

SharePoint, Workflows y Silverlight: una plataforma de colaboración, una necesidad para cualquier empresa y una tecnología que nos permite crear herramientas de futuro.

Si hacemos un cóctel con los tres ingredientes y le añadimos usabilidad en abundancia, una pizca de diseño y muchas, muchas horas de trabajo, el resultado se llama Kaldeera Workflow Designer 2009.

El producto ya está en versión final y está a punto de salir a la luz. Adelanto algunas imágenes.

Anuncios

Kaldeera

Durante estos últimos meses he estado participando activamente como director técnico y arquitecto en el desarrollo de una nueva herramienta de edición de flujos llamada Kaldeera Workflow Designer.

Kaldeera nace con el lanzamiento de este editor de flujos para la plataforma SharePoint. Una herramienta gratuita que esperamos sea de gran aceptación y utilidad para la comunidad SharePoint. Luego vienen más cosas, muchas más cosas que aún no puedo adelantar. Tenemos muchas ideas y creo que muy buenas.

En los próximos días dedicaré más tiempo a realizar un review de la herramienta.

Acceder a las propiedades del flujo de trabajo desde una actividad

Cuando desarrollamos una Custom Activity para SharePoint, podemos crearle tantas propiedades (Dependency Properties) como necesitemos. Esto permitirá a los diseñadores de flujos parametrizar nuestra actividad y enlazar sus propiedades con propiedades de otras actividades o con variables del flujo (ActivityBind).

En algunos casos nos puede interesar recuperar el valor de una variable del flujo sin que los diseñadores la hayan enlazado con una de nuestras propiedades o sin, ni siquiera, tener una propiedad específica para ese valor.

La manera de recuperar una variable del flujo es la siguiente:

Primero necesitaremos acceder a la actividad principal del flujo, la RootWorkflowActivityWithData. Esta actividad la crea SharePoint Designer u otros editores de flujos como (Nintex o Kaldeera) y se trata de la actividad principal del flujo, la que incluye el resto de las actividades que se ejecutarán.
Adicionalmente, esta actividad contiene una colección WorkflowFields donde se almacenan todas las variables del flujo.

El siguiente método recursivo muestra como acceder a la actividad principal del flujo.

/// <summary>
/// Returns the root node of the Workflow
/// </summary>
protected Activity getRootActivity(Activity a)
{
    if (a.Parent != null)
        return this.getRootActivity(a.Parent);
    else
        return a;
}   // getRootActivity

Una vez tenemos acceso a la actividad que contiene las variables del flujo, podremos mapear la propiedad o variable que deseemos mediante la clase ActivityBind. Recuperaremos el valor de la siguiente manera:

RootWorkflowActivityWithData rootAct = (RootWorkflowActivityWithData)root;
ActivityBind ab = new ActivityBind(rootAct.Name, "variableName");
string value = ab.GetRuntimeValue(rootAct).ToString();

En el ejemplo, se recupera el valor y se trata como un string. También podemos recuperar el tipo de datos de la variable en cuestión y almacenarla en la variable correspondiente. Para ello podríamos acceder directamente a la definición de la variable:

rootAct.WorkflowFields.GetItem("variableName").Type

Nos retornará el tipo de dato que almacena dicha variable.