Consequências na criação de uma tarefa via workflow
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)”.
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.
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.
- 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.
- 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,