Archive

Posts Tagged ‘Workflow’

Como buscar informações de status do Workflow no SharePoint Online (365)

November 28, 2018 Leave a comment

CENÁRIO:

Olá!

Nas versões antigas (on-premises) do SharePoint Server é bem fácil obter o status do workflow bastando apenas adicionar uma coluna na view que contém o nome do Workflow.

Entretanto, no SharePoint Online (365) é um pouco diferente. Ainda temos a coluna do workflow (WorkflowColumnStatus), mas ela fica “em branco”. Como fazer para verificar, programaticamente, o status do workflow que foi desenvolvido dentro de um SharePoint Add-in?

ERRO:

Colunas em branco:

wfkcolumn

SOLUÇÃO:

Utilizando o SharePoint CSOM ou JSOM (Javascript Object Model) é possível instanciar o WorkflowServicesManager e obter as informações do workflow.

wfkmanageinstance

Em texto:

var workflowServicesManager = new WorkflowServicesManager(ctx, ctx.Web);

 

// connect to the instance service

var workflowInstanceService = workflowServicesManager.GetWorkflowInstanceService();

 

// get all instances

var workflowInstances = workflowInstanceService.EnumerateInstancesForListItem(listId, itemId);

ctx.Load(workflowInstances, i => i.Include(f => f.Id, f => f.LastUpdated, f => f.Status));

ctx.ExecuteQuery();

foreach (var instance in workflowInstances)

{

try

{

if (instance.Status.ToString() != “Completed”)

{

Console.WriteLine(“{0} – {1} – {2}”,

instance.Id.ToString(),

instance.LastUpdated,

instance.Status.ToString());

 

}

}

catch (Exception ex)

{

_telemetry.TrackException(ex);

}

}

. J

Abraço!

 

This task is currently locked by a running workflow and cannot be edited

March 13, 2014 2 comments

Olá! 🙂

Esse post bem rapidinho… O Workflow do SharePoint “trava” as tarefas do tipo de conteúdo “WorkflowTask” para assegurar que a tarefa não seja editada enquanto o processo do Workflow aconcete. E depois que o Workflow termina de rodar, ele tira essa “trava” para que a tarefa seja editável novamente.

Ok! Comportamento esperado… mas, no decorrer do projeto, decidimos que as tarefas não seriam mais utilizadas em um Workflow e passariam as ser simplesmente tarefas atualizadas por outros mecanismos como: Forms Customizados e Event Receivers. Só que nesse caso específico a tarefa em questão herdava o Content Type de “WorkflowTasks” e então eu mesmo preciso tirar essa “trava” que o workflow faz automaticamente.

NOTA: Se sua tarefa herda do Content Type de “Tasks”, isso não é necessário.

Quando for atualizar uma tarefa que herda da “WorkflowTasks” atualize também a coluna do Workflow e assim a tarefa será editável.

item[Microsoft.SharePoint.SPBuiltInFieldId.WorkflowVersion] = 1;
item.Update(); //SPListItem

Pronto, o item será atualizado sem que a mensagem de erro seja apresentada.

Abraço!


		

Não é possível renderizar o formulário. O Serviço de Controle de Sessão do Microsoft SharePoint Server pode estar configurado incorretamente.

January 14, 2011 Leave a comment

Olá! Smile

Overview:

Desta vez, tentei criar um Fluxo de Trabalho nativo do SharePoint, aquele fluxo de Aprovação padrão mesmo.

Ao preencher o primeiro formulário e avançar, deveríamos ir para a tela de configuração da aprovação, puxando um formulário InfoPath. Ao invés disso, nos deparamos com o erro abaixo.

ERRO:

Não é possível renderizar o formulário. O Serviço de Controle de Sessão do Microsoft SharePoint Server pode estar configurado incorretamente.

Esse é o Erro que o usuário viu no browser, mas indo nos LOGS do SharePoint (%CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\LOGS), temos o seguinte:

Microsoft SharePoint State Service is not configured correctly and cannot respond to requests. InfoPath Forms Services relies on Microsoft SharePoint State Service to function correctly. Check the SharePoint Maintenance Engine rules in SharePoint Central Administration for issues with Microsoft SharePoint State Service configuration.

SOLUÇÃO:

Precisamos rodar alguns comandos PowerShell para:

· Criar um State Service;

· Criar um State Service database e associar o State Service criado no passo anterior;

· Criar State Service application proxy no group do Default Proxy da Farm.

 

Não tem segredo, é só executar as três linhas no SharePoint 2010 Management Shell.

 

$serviceApp = New-SPStateServiceApplication -Name “State Service”

New-SPStateServiceDatabase -Name “StateServiceDatabase” -ServiceApplication $serviceApp

New-SPStateServiceApplicationProxy -Name “State Service” -ServiceApplication $serviceApp –DefaultProxyGroup

 

Abraço!

Iniciando um Workflow programaticamente para um item de Lista no SharePoint

December 14, 2010 Leave a comment

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!