Por Alexandre Alves / Daniel Aguiar

Consequências da personificação na criação de uma tarefa por meio de um fluxo de trabalho feito no Sharepoint Designer 2007

Como documentado no artigo “Collect data from a user in a workflow” e acredito ser ciente de muitos que ao criarmos uma tarefa por meio de um fluxo de trabalho feito no Sharepoint Designer 2007, esta tarefa é personificada por meio daquele que atribuiu a tarefa, ou seja, aquele que iniciou o fluxo de trabalho.

Mas qual é o problema com esse comportamento? Mostrarei um simples exemplo para tornar a explicação mais clara.

Cria-se um workflow com a ação “Coletar dados de um usuário(Collect data from user)”.

clip_image002

Neste caso a ação o workflow atribuirá uma tarefa ao usuário mauricio que ao aprová-la finalizará o fluxo de trabalho. Simples não? Sim, mas as consequências gerada trarão um pouco de trabalho para controlar a segurança na aprovação da tarefa.

O meu workflow está configurado para iniciar ao criar um item dentro da biblioteca de documentos e assim enviará a tarefa para aprovação ao usuário mauricio e assim acontece sem problemas. Aonde está o problema então? Veja uma imagem da tarefa gerada abaixo.

clip_image004

Como falado anteriormente, a criação da tarefa é personificada e aparece como sendo criada pelo usuário teixeira que é quem iniciou o workflow criando um documento dentro da biblioteca de documentos. O problema é que mesmo a tarefa estando atribuída ao usuário mauricio ela pode ser aprovada por qualquer usuário que tenha permissão para editar a tarefa(Edit Items) dentro da lista de tarefas inclusive por quem submeteu para aprovação.

Pensariam todos então o seguinte para contornarmos o problema.Só alterarmos as definições avançadas da lista de tarefas na opção acesso de leitura para “Apenas deles próprios” e apenas aquele a quem a tarefa está atribuida visualizaria a tarefa, correto? Errado! O valor “Apenas deles próprios” controla a visualização ou edição do item de acordo com a coluna “Criado por” e não pela coluna “Atribuida a”, ou seja, o único que conseguiria visualizar a tarefa seria o próprio usuário criador dela, neste caso o usuário teixeira.

Qual a solução então para a aprovação da tarefa ser feita apenas pelo usuário a quem a tarefa está atribuida? Tenho duas sugestões por meio de event handler,não tão simples, mas que podem ajudar com certeza.

  1. Um event handler que toda vez que um item é criado dentro da lista de tarefas este altera o valor do campo “criado por” pelo valor definido em “atribuido a” e assim definindo as opções “Acesso de Leitura” e “Acesso de edição” para “Apenas deles próprios” faria com que somente o usuário a quem a tarefa está atribuída pudesse aprová-la.
  2. Um event handler que toda vez que um item é criado dentro da lista de tarefas este quebra a herança de permissões da lista de tarefas e remove todas as permissões, atribuindo apenas as seguintes permissões:
  • Usuário criador (no meu exemplo teixeira): Read
  • Usuário aprovador (no meu exemplo mauricio): Contribute

Nota: o usuário criador da tarefa precisa de nível de permissão no item de pelo menos Read para poder ler a status da aprovação e dar seguimento nas outras ações do workflow que irão trabalhar de acordo com a resposta da tarefas de aprovação enviada, caso contrário o workflow é concluído inesperadamente.

Segue abaixo alguns links úteis:

Espero ter ajudado alguns que já se depararam com esta situação e aqueles que certamente ainda estarão nesta situção.

Abraços,