Overview
Workflows são recursos presentes em diversos projetos SharePoint, geralmente são feitos no SharePoint Designer e outros, mais complexos, no Visual Studio.
Neste post vou falar de algumas considerações sobre o desenvolvimento e implantação sobre workflows feitos no Visual Studio, o foco não é explicar como fazer, mas informar sobre alguns cuidados importantes na implantação deles.
Solução
A implantação de novos workflows em ambiente de produção são praticamente iguais a qualquer solução (solution) ou recurso (feature) feitas para o SharePoint 2010, basta “só” instalar o pacote no servidor e associar o workflow à biblioteca.
Até aí não tem muito segredo, mas como fazer quando um workflow estiver sendo executado? Como atualizá-lo? Imaginem o seguinte cenário: a versão 1.0 do workflow está rodando e existem 500 documentos (formulário, documentos, itens, qualquer coisa) que estão executando esse workflow. O worklfow sofre alterações e algumas atividades são adicionadas. Ao liberar a atualização do pacote, sem os devidos cuidados, todas as 500 instâncias que estão em execução irão parar de funcionar.
Por que isso acontece? Porque uma instância de workflow fica grande parte do tempo persistida em banco de dados ao invés de ocupar a memória do servidor – o SharePoint abstrai esse comportamento para nós. Sempre que um workflow está aguardando uma ação de usuário ou resposta de um serviço, a sua instância é serializada e gravada em banco. Quando essa ação acontece, como por exemplo o usuário editar uma tarefa pendente, o workflow é desserealizado, volta para a memória e continua a execução do ponto em que estava.
Agora que já entendemos um pouco mais, fica mais simples de explicar o problema gerado e sua solução. Como o assembly da alteração realizada é diferente da versão original, o .NET não vai conseguir desserializar as instâncias do banco de dados e carregar para a memória, ou seja, todos os processos rodando vão parar de funcionar. É como se a tarefa perdesse a referência com o workflow, ocasionando diversos problemas aos usuários.
A solução para isso é encarar as coisas com uma visão um pouco diferente. Para começar encare que cada alteração no workflow a partir do Visual Studio é um workflow novo que deve ter uma feature com nome e identificadores diferentes, assemblies com versão diferente – o nome das dlls pode ser o mesmo, se eles forem alterados terá muito trabalho desnecessário – e atribuição dos workflows à lista com nomes diferentes. Ao atribuir um workflow novo (versão nova) a uma lista ou biblioteca configure os demais para não iniciarem automaticamente, dessa forma somente a versão nova será iniciada automaticamente.
Isso significa que uma biblioteca terá diversas versões do workflows rodando ao mesmo tempo? Sim, isso mesmo, lembrando que um item terá uma instância do workflow sendo executada, o que não ocasionará problemas no ambiente.
Pensem no assunto e evitem problemas futuros.
Referências
- Developing Workflow Solutions with SharePoint Server 2007 and Windows Workflow Foundation (http://msdn.microsoft.com/en-us/library/cc514224.aspx#MOSS2007DevWorkflowSolutions_SavingWorkflowState)
26/01/2012 às 21:42
Realmente, versionar eh preciso/recomendado na maioria das vezes, ou isto ira acarretar algumas horas extras de trabalho (as vesperas de um feriado) pra corrigir os efeitos colaterais de uma alteracao errada em um WF =/
#TrueStory
06/02/2012 às 20:57
Guilherme, pois é, algumas coisas só aprendemos fazendo errado. Faz parte 🙂
14/02/2012 às 21:50
Olá Fabian André
Encontrei-o ocasionalmente porque ando à procura de uma forma de começar do zero aprender a mexer com o sharepoint, gostaria de começar pelas coisas básicas de construção de um site em charepoint. Que livro recomenda mas de preferência em português ou brasileiro?
Gostaria que me ajudasse uma vez que me pareçe ser uma pessoa que domina já o Charepoint.
Muito obrigada
Melhores cumprimentos
Maria da Graça
16/02/2012 às 21:51
Olá Maria, é muito bom ver gente nova começando a utilizar o SharePoint.
Dê uma olhada no link http://sharepoint.microsoft.com/pt-br/Pages/default.aspx, tem bastante material introdutório e vai ajudar vc a entender melhor os objetivos do SharePoint e como utilizá-lo.
Bom estudo!
21/03/2012 às 13:46
Cara eu estou desenvolvendo workflows em sharepoint, porém alguns fluxos eu preciso que o meu cliente preencha um formulário, como faço para publicar um formulário num site aberto que não precisa fazer login.. e que alimente uma lista dentro do fluxo do meu site que tem login
21/03/2012 às 20:08
Anderson,
Para habilitar o acesso anônimo veja o link http://www.topsharepoint.com/enable-anonymous-access-in-sharepoint-2010.
O resto é fácil, só deixar os usuários acessarem a lista ou biblioteca que o workflow está configurado para rodar.
21/03/2012 às 21:46
[…] futuros, um deles é a constante atulização das dlls do seu workflow no servidor, veja o post Desenvolvimento de Workflows para entender um pouco melhor o trabalho para resolver […]
10/07/2012 às 16:54
Fabian,
tenho um workflow rodando porém, precisei fazer algumas alterações. Como indicado, fiz um novo workflow e instalei. A instalação foi ok, mas quando criei um novo item na lista, mesmo sem atribuir o novo, o anterior não funcionou mais, só de instalar e ativar a feature, deu conflito com o que estava instalado.
Tem ideia do que pode ser?
10/07/2012 às 17:03
Andréa,
Vc também criou uma feature nova com novos nomes e IDs novos? Tudo tem que ser novo.
10/07/2012 às 17:08
Sim, criei sim.
10/07/2012 às 17:11
Criei um novo projeto de workflow no VS2008 e só peguei da versão antiga o código, mas o IDs foram novos, gerados pelo VS.
Não sei se tem alguma relação, mas utilizo o WSPBuilder para gerar o pacote de instalação.
10/07/2012 às 17:15
Andréa,
Que tipo de erro foi gerado no workflow antigo? Descreva melhor por favor.
10/07/2012 às 17:28
Ele não dá necessariamente um erro explícito. Ao terminar de cadastrar um novo item, ele parece que entra no workflow, grava o primeiro texto no histórico e quando efetivamente deveria entrar na primieira condição de if que existe no código, ele grava erro no andamento e escreve no histórico que o ocorreu um erro no workflow mas não detalha qual erro.
Só que quando eu desinstalei os dois e instalei a versão 1, esse funcionou normalmente.
Porém preciso que esteja instalados os dois, v1 e v2, pois o v1 ficaria para os fluxos que já estão em andamento e o v2 para os novos. 😦
11/07/2012 às 14:07
Andréa,
Verifique no log do SharePoint, faça o seguinte, primeiro faça o erro acontecer e depois vá no log do SharePoint e procure por erros de workflow.
13/07/2012 às 17:29
Fabian,
Obrigada pela tentativa, mas ainda não conseguimos resolver.
Estamos em contato com o Wagner Amorim para ver se ele e o pessoal da Done consegue resolver.
Se tiver alguma ideia do que seja, vai ajudar muito.