sábado, 18 de janeiro de 2020

Obtendo o estágio dos projetos via Power Automate

Olá pessoal –

Dia desses um cliente me enviou um e-mail com o seguinte requerimento:

Precisamos automatizar alguns processos internos para que, quando o projeto atingir determinado estágio do workflow no Project Online, uma série de e-mails sejam disparados para alguns usuários-chave. Além disso, as informações capturadas no termo de aberta do projeto também deverão ser transferidas para um documento, que será enviado como anexo para o nosso grupo de executivos”.

Mamão com açúcar, pensei. Lá no meu canal no YouTube eu já falei sobre como automatizar o processo de envio de notificações no Project Online com o Power Automate, e também já havia publicado dois vídeos falando sobre como enviar dados do projeto para um documento. Porém, quando fui colocar a mão na massa, esbarrei num cenário inesperado...

Acontece que, ao fazer uma requisição HTTP para o SharePoint, por algum motivo a tabela ProjectWorkflowStageData não oferece suporte para obtenção dos dados relacionados ao estágio dos projetos:


Neste exemplo, após um projeto ser publicado, estamos passando o parâmetro do Id interno do projeto para a requisição HTTP, com o objetivo de obter o estágio atual do projeto publicado. Quando o flow é executado, temos como resposta o seguinte erro:


O erro apresentado é o seguinte:

"The type 'ReportingData.ProjectWorkflowStageData' specified in the URI is neither a base type nor a sub-type of the previously-specified type 'ReportingData.Project'."

O ponto interessante é que, se trocarmos o endpoint para tarefas (Tasks()), o flow consegue obter todas as tarefas do projeto em questão normalmente (comprovando que a lógica e a instrução incluídas no Power Automate estão corretas):



Após quebrar muito a cabeça para entender o motivo de os dados do workflow não estarem disponíveis, decidi fazer uma tentativa usando a api REST do Project Server:


A instrução uri que deve ser utilizada é a seguinte:

/_api/ProjectServer/Projects(‘<parâmetro do id do projeto>’)?$Select=Stage/Name&$Expand=Stage

Ao rodar o flow, temos o resultado esperado:



A partir daí é possível dar continuidade ao flow, determinando todas as ações que devem ser executadas na sequência, de acordo com o estágio em que o projeto se encontra.

Pois é, por hora é isso. Mesmo este sendo um post mais curto e simples, acabou sendo bastante útil pra mim na resolução do requerimento de negócio que tinha. Então, espero que seja útil para você também 😊

Um abraço e até a próxima!