Acceder a las propiedades del flujo de trabajo desde una actividad

By Pau Codina

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.

Escribe un comentario