En Visual Studio requerimos de un esfuerzo mayor para realizar tareas que en SharePoint Designer se realizan con unos simples clics. Para obtener valores de un campo de una lista se debe realizar lo siguiente:

1. Agregar la siguiente propiedad pública en la clase del flujo de trabajo:

public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties workflowProperties = new Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();

2. Opcionalmente, para manipular los valores de la lista se podrían agregar variables globales por ejemplo:

public string titulo;

3. En el evento de alguna actividad el SharePoint, en mi caso utilicé el onWorkflowActivated (la actividad inicial que debe de agregarse en todo flujo de trabajo) agregar las propiedades:

private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)

{

if (workflowProperties.Item["Title"] != null)

titulo = workflowProperties.Item["Title"].ToString();

else

titulo = "Null";

}

De esta manera podrán obtenerse los valores de la lista y manipularlos dentro del flujo de trabajo.

Para obtener los valores de un formulario de InfoPath se deben realizar una serie de pasos adicionales. Pueden seguir este ejemplo de Nick Swan si necesitan hacerlo SharePoint 2007 Workflow with Visual Studio 2005 + InfoPath 2007. Aunque una alternativa podría ser convertir los valores que se van a necesitar a columnas de SharePoint por medio de los Promoted Properties y hacerlo de la forma mostrarda anteriormente.

Error: System.ArgumentNullException when referencing the WorkflowProperties

En el mensaje de la lista en que está ocurriendo el flujo de trabajo, el error mostrado es “Error Ocurred”, cancelando el flujo de trabajo al no poder obtener los valores de los campos requeridos.

Normalmente ocurre por que dentro del evento OnWorkflowActivated no se ha relacionado con la propiedad WorkflowProperties

Para solucionar lo anterior vaya a las propiedades del OnWorkflowActivated y en WorkflowProperties seleccionar el miembro existente:

Haga clic en OK, y listo. Se podrán obtener los valores normalmente.

Referencias:

[1] WinSmarts, http://blah.winsmarts.com, 2009
[2] David Fekke, http://www.fekke.com, 2009