sábado, 4 de febrero de 2012

Iniciar un Flujo de Trabajo programáticamente - Modelo de Objetos

El siguiente fragmento de código crea primero una instancia (SPListItem) de un elemento en una Lista o Biblioteca, luego encuentra el GUID de un Flujo de Trabajo que ya se ha configurado en la Lista (llamado "FlujoPrueba"), encuentra la asociación del flujo y finalmente lo inicia con parámetros por defecto:

SPListItem item = otherWeb.Lists["nm3"].Items[0];
Guid approvalworkflowId = item.Web.WorkflowTemplates.GetTemplateByName("number02", CultureInfo.InvariantCulture).Id;

if (approvalworkflowId != Guid.Empty)
{
    foreach (SPWorkflowAssociation workflowAssociation in item.ParentList.WorkflowAssociations)
    {
        if (workflowAssociation.BaseId == approvalworkflowId)
        {
            item.Web.Site.WorkflowManager.StartWorkflow(item, workflowAssociation, workflowAssociation.AssociationData, true);
            break;
        }
    }
}

El tercer parámetro del método StartWorkflow es una enumeración del tipo SPWorkflowRunOptions que puede tener tres valores: sincrónico, asincrónico o sincrónico posponiendo todas las operaciones en ejecución.

Si es necesario insertar parámetros de iniciación, el parámetro "eventData" del tipo string puede contenerlos definidos en formato xml de la siguiente forma:

String data = String.Format("<dfs:myFields
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
xmlns:dms=\"http://schemas.microsoft.com/office/2009/documentManagement/types\"
xmlns:dfs=\"http://schemas.microsoft.com/office/infopath/2003/dataFormSolution\"
xmlns:q=\"http://schemas.microsoft.com/office/infopath/2009/WSSList/queryFields\"
xmlns:d=\"http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields\"
xmlns:ma=\"http://schemas.microsoft.com/office/2009/metadata/properties/metaAttributes\"
xmlns:pc=\"http://schemas.microsoft.com/office/infopath/2007/PartnerControls\"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">
<dfs:queryFields></dfs:queryFields><dfs:dataFields>
<d:SharePointListItem_RW>
<d:NombreCampo>ValorCampo</d:NombreCampo>
</d:SharePointListItem_RW></dfs:dataFields>

Cada parámetro debe ser especificado como "<d:Nombre>Valor</d:Nombre>" después del parámetro "<d:SharePointListItem_RW>".

Nota: Flujos de Trabajo no se pueden iniciar con una cuenta de sistema, deben ser siempre iniciados por cuentas de usuarios de SharePoint

 

Fuente: http://www.gavd.net/servers/sharepointv4/spsv4_item.aspx?top=1&itm=1408

No hay comentarios:

Publicar un comentario