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.