Home > SharePoint - Tips & Tricks, SharePoint Technologies > Iniciando um Workflow programaticamente para um item de Lista no SharePoint

Iniciando um Workflow programaticamente para um item de Lista no SharePoint


Olá! Smile

Overview:

Como muitos sabem, o SharePoint possui a capacidade de automatizar processos usando seus recursos nativos, um deles é o Workflow. Uma ferramenta poderosíssima!

A ideia deste post não é falar sobre Workflows, para isso, consulte este outro post: https://thiagottss.wordpress.com/2010/09/29/workflow-state-machine-no-sharepoint-2010/.

Cenário:

Muitas vezes, desenvolvendo aplicações para SharePoint, utilizamos o Workflow para automatizar alguns processos e/ou ações, coletar informações do usuário, etc. E, em algumas dessas vezes, precisamos iniciar o Workflow programaticamente. Ou seja, em determinada ação da nossa aplicação, é necessário que o Workflow inicie automaticamente.

O SharePoint pode fazer isso para nós se você optar por permitir que o Workflow inicie automaticamente quando um novo item é criado na lista ou para que inicie automaticamente quando algum item sofreu alteração.

Mas, no meu caso, nenhuma dessas ocasiões atendia meu cenário. Preciso iniciar o Workflow via código em determinado momento!

SOLUÇÃO:

Isso é bem simples, vamos ao que interessa!

using (SPWeb web = site.OpenWeb())
                {
                    SPList lista = web.Lists.TryGetList("Nome da Lista");
                   
                    SPListItem itemDaLista = lista.GetItemById(5);

                    foreach (SPWorkflowAssociation wfkAssociation in lista.WorkflowAssociations)
                    {
                        if (wfkAssociation.Name == "Nome do Workflow")
                        {
                            site.WorkflowManager.StartWorkflow(itemDaLista, wfkAssociation, "<root />");
                        }

                        break;
                    }
                }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

A dica aqui, é usar um XML vazio (“<root />”) para o eventData (3º parâmetro). Não tente passar string vazia ou null. Não funciona! 😉

Isso, claro, se você não estiver usando um AssociationForm. Caso contrário, passe a informação do AssociationForm.

É isso aí! =)

Abraço!

Advertisements
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s

%d bloggers like this: