sexta-feira, 18 de fevereiro de 2022

Adicionando membros de equipe ao projeto automaticamente

 Olá pessoal –

No Microsoft Project Online, para que os recursos corporativos tenham condições de acessar os sites de projeto para colaborar através da criação e do gerenciamento de riscos, problemas, documentos, entre outros artefatos, eles precisam obrigatoriamente fazer parte da equipe do projeto.

Recentemente um cliente entrou em contato pois tinha um requisito de negócio importante: o processo de adição dos membros de equipe a um projeto recém criado deveria acontecer de maneira automatizada. Nessa organização, quando um novo projeto é criado, todos os colaboradores devem ganhar acesso ao site de projeto imediatamente, e o fato de os gerentes de projeto terem que adicioná-los manualmente estava causando muitos problemas – pois infelizmente nem todas as pessoas seguem os processos.

Para facilitar a vida dos gerentes de projeto e garantir o cumprimento dos requisitos de negócio, mais uma vez, o Power Automate foi utilizado para automatização dos processos. Nesse post vou detalhar o passo-a-passo caso você precise fazer algo parecido na sua empresa 😉.

Nota: é muito importante ressaltar que, sem a colaboração do meu grande amigo Alisson Scalco, este problema não teria sido resolvido. Então, fica aqui o meu agradecimento público a este grande profissional.

O flow

O gatilho When a new project is created (V2) foi utilizado para determinar quando o flow deve ser iniciado:


Na propriedade Select Query desse gatilho apenas duas colunas foram selecionadas para melhorar a eficiência do flow – são elas ProjectId e ProjectName:


Uma vez disparado o gatilho, foi necessário paralizar o flow por um certo tempo, pois as próximas ações não podem ocorrer imediatamente após a criação do projeto. Essa pausa precisa ser adicionada pois o gerente de projetos pode ainda estar trabalhando com o projeto (ou seja, o projeto pode estar em check-out) ao mesmo tempo em que o Power Automate tenta executar as ações do flow. É difícil determinar com precisão por quanto tempo o flow deve ser paralisado, pois não sabemos exatamente quando o gerente de projetos finalizará suas ações, mas uma boa alternativa é calcular um intervalo até que se atinja um horário fora do expediente de trabalho (por exemplo, até às 22 horas), onde se espera que o gerente de projetos não mais esteja trabalhando com o projeto em questão – e assim, espera-se, o projeto não mais esteja em check-out.

Após configurar a pausa, a próxima ação irá listar o projeto para que seja possível trabalhar com as suas propriedades:


Em seguida é preciso adicionar uma condição para verificar se o projeto está em check-out. Caso a condição seja verdadeira, é possível enviar um e-mail à equipe de PMO ou ao gerente de projetos para informar que não foi possível adicionar os membros de equipe automaticamente:


Entretanto, caso a condição seja falsa (ou seja, o projeto não encontra-se em check-out), será possível prosseguir e adicionar os membros de equipe ao projeto. A primeira coisa a se fazer é efetivamente colocar o projeto em check-out:


Em seguida, será preciso listar todos os recursos ativos da organização para que seja possível adicioná-los como membros de equipe ao projeto. Para listar os recursos adequadamente, foi utilizada a ação Send an HTTP Request to SharePoint, que neste exemplo foi renomeada para ‘Get Resources’ (para saber mais sobre esta ação, veja este link). Perceba que a instrução definida na ação está obtendo a lista de recursos ativos do Project Online, desde que não sejam recursos genéricos:


Aqui a instrução completa:

/_api/ProjectData/[en-us]/Resources()?$Select=ResourceId&$Filter= TypeName eq 'Work Resource' and ResourceIsActive eq true and ResourceIsGeneric eq false

Como a ação ‘Get Resources’ irá trazer a lista de todos os recursos ativos do Project Online, e como cada um deles terá de ser adicionado como membro de equipe no projeto, é necessário utilizar a ação Apply to each para especificar que esta ação deve ser aplicada a todos os registros obtidos (para saber mais sobre esta ação, veja este link). Dentro da ação ‘Apply to each’ é possível utilizar uma expressão para especificar o resultado que deve ser utilizado como entrada:


body('Get_Resources')?['value']

Dessa maneira será possível utilizar mais uma vez a ação Send an HTTP Request to SharePoint para adicionar os recursos como membros de equipe do projeto (perceba que a ação foi renomeada para ‘Add Resources’):


/_api/ProjectServer/Projects('<projectId>')/Draft/ProjectResources/AddEnterpriseResourceById('<enterpriseResourceId>')

Lembre-se de substituir os conteúdos dinâmicos com os resultados obtidos das ações anteriores, conforme destacado acima.

Como ação final, bastará publicar o projeto ao final do loop de adição de recursos para garantir que eles sejam devidamente sincronizados com o site de projeto:


Quando um novo projeto for criado, o flow será disparado, e como consequência os membros de equipe serão devidamente adicionados ao projeto:



....................................................................................................

Como mencionado no início do post, fica aqui minha nota de agradecimento ao Alisson Scalco pela sua fundamental colaboração nesse post. Valeu demais, Alisson!

....................................................................................................

E por hoje é só pessoal. Espero que gostem desse post, e até o próximo!