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

¿Cual es la situación?

Cuando se habilita la propiedad de PostBack automático (AutoPostBack="True") dentro del control Data View DropDownlist ocurre lo siguiente:
1. Selecciona un item.
2. El evento hace PostBack,
3. Si se intenta obtener el valor seleccionado este es null o vacío.

¿Que sucede?

La propiedad EnableViewState tiene valor por defecto True, esta propiedad indica si el control del servidor debe mantener su estado de vista.
En otras palabras, esta característica permite que los controles de servidor se vuelvan a llenar automáticamente con sus valores originales en cada postback si necesidad de escribir código adicional.
Dependiendo de la situación puede ser de mucha utilidad. Sin embargo, se se está haciendo un evento en cascada o alguna función que requiera del valor seleccionado del DropDown luego de hacer el postback puede presentar algunos dolores de cabeza. Especialmente si se toma en consideración que la manipulación de código en SharePoint algunas veces es limitada.

¿Como se resuelve?

Cambie la propiedad EnableViewState a False, de esta manera podrá obtener el valor fácilmente.

Referencias:

[1] DevFYI Developer Resource, http://dev.fyicenter.com, 2009
[2] Microsoft, http://msdn.microsoft.com, 2009