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!

segunda-feira, 11 de novembro de 2019

Microsoft Ignite 2019















Olá pessoal –

Para aqueles que, assim como eu, não tiveram a oportunidade de estar em Orlando entre os dias 4 e 8 de Novembro para acompanhar o Microsoft Ignite in loco, é importante lembrar que já estão disponíveis todas as gravações das sessões entregues no maior evento de tecnologia promovido pela Microsoft 😍.

Vou disponibilizar aqui no post os links para as sessões sobre o Microsoft Project, e também alguns outros links adicionais para sessões que estejam relacionados com esse tema:


The future of Microsoft Project is here:

The Power of the new Microsoft Project and Microsoft 365:

Deep dive on the new Microsoft Project:

The new Microsoft Project: Built for teams:

Microsoft Project for the web – Reporting and Dashboards: https://myignite.techcommunity.microsoft.com/sessions/81244

Extending the new Microsoft Project with the Power Platform: https://myignite.techcommunity.microsoft.com/sessions/81245

Automate your tasks with Project, Planner, and Microsoft Flow: https://myignite.techcommunity.microsoft.com/sessions/81296

Intelligent automation with Microsoft Flow:

Automating your business process with Microsoft Flow and Teams integration: https://myignite.techcommunity.microsoft.com/sessions/78651

Become a Microsoft Flow super hero:


Bons estudos!


segunda-feira, 4 de novembro de 2019

Power Platform World Tour | São Paulo

Olá pessoal –

Nos dias 18 e 19 de Novembro irá acontecer na cidade de São Paulo o 'Power Platform World Tour', um dos maiores eventos sobre as soluções da Power Platform (PowerApps, Power BI e Flow).  O conteúdo será entregue 100% em Português, e irá contar com um time estelar de especialistas e líderes técnicos da comunidade. Vale a pena dar uma olhada para saber mais:

https://www.powerplatformworldtour.com/locations/saopaulo


Este será um grande evento, e irei participar para ter a oportunidade de encontrar grandes amigos e melhorar meus conhecimentos em todas as ferramentas que integram o Power Platform.

Nos vemos por lá 🚀

terça-feira, 29 de outubro de 2019

Uma nova era se inicia: o novo Project está oficialmente disponível

Olá pessoal –

Agora é pra valer: a Microsoft acaba de anunciar oficialmente o novo Project for the web – ou simplesmente ‘Project’. Como eu havia comentado no post anterior, trata-se de uma versão reimaginada do software de gerenciamento de projetos mais utilizado em todo o mundo, que foi desenhado do zero a partir da plataforma Power Platform – e que agora estará disponível exclusivamente na web.

Hoje iremos explorar em linhas gerais os recursos e funcionalidades iniciais do Project for the web. Ao final do post irei deixar links e referências da documentação disponibilizada pela Microsoft, caso você queira saber mais detalhes sobre planos, licenciamento, próximos passos e etc.

O que é o project for the web?

De maneira bem simples, podemos dizer que com o lançamento do Project for the web a Microsoft tem como objetivo preencher o vácuo existente entre as duas plataformas de gerenciamento de trabalho e projetos atuais: o Planner e o Project Online. Enquanto o Planner é uma excelente plataforma para o gerenciamento compartilhado de tarefas e pequenos projetos, ele não possui alguns recursos que são muito solicitados pelos usuários, como por exemplo a possibilidade de se estabelecer vínculos entre as tarefas, ou mesmo a possibilidade de utilização do conceito de tarefas e subtarefas, entre outras funcionalidades. Já o Project Online é uma plataforma completa para gerenciamento de portfolios, programas e projetos; entretanto, por muitas vezes é considerado muito “formal” e “burocrático”, e os seus conceitos de check-in, check-out, linha de base, publicação e etc. podem se apresentar como uma barreira para os gerentes de projeto que desejam trabalhar com mais dinamismo e agilidade.

Nesse sentido, o posicionamento do Project for the web é justamente esse: funcionar como uma alternativa para as organizações que não queiram ser simplistas demais para usar o Planner, e nem formais demais para usar o Project Online.




Como começar?

Se a sua empresa possui uma assinatura do Project Online com pelo menos uma licença Professional ou Premium, o Project for the web já deve estar disponível. Para iniciar um novo projeto, navegue à página Home do Project – https://project.microsoft.com – e inicie um novo projeto em branco:



Na primeira vez que você iniciar um novo projeto em branco, a página de setup será exibida, e você terá de aguardar alguns segundos:



O Project for the web foi desenhado para ser simples: você pode iniciar um novo projeto sem ao menos ter um nome:



Já em relação às colunas, temos uma surpreendente (e radical) mudança: o Project for the web possui apenas 13 colunas:



Se você é um usuário frequente do Project Online, irá perceber a mudança no nome de algumas colunas:


> Predecessoras chama-se Depende de (antes)
> Sucessoras chama-se Dependentes (depois)
> Trabalho chama-se Tempo necessário
> Trabalho Real chama-se Tempo concluído
> Trabalho Restante chama-se Tempo restante

Isso sem falar na nova coluna Grupo, que importou o conceito de ‘Buckets’ do Planner. Aliás, por falar em Planner, se você é um usuário frequente desta plataforma, irá perceber inúmeras semelhanças dele com o Project for the web, principalmente no que se refere ao aspecto visual (design) e interação (usabilidade). Como exemplo, ao clicar com o botão direito do mouse sobre uma tarefa é possível abrir a sua janela de detalhes, que é muito semelhante à janela de detalhes das tarefas do Planner:



Do mesmo modo, caso você já possua um conjunto de tarefas que componham o cronograma, a opção de clicar com o botão direito do mouse permite que uma série de ações sejam tomadas – como exemplo, é possível definir a estrutura das tarefas resumo e das subtarefas:





Seguindo o conceito de construção de um cronograma, ao utilizar a coluna Depende de (antes) para determinar a relação de vínculo entre as tarefas, a digitação do ID da tarefa já faz com que a plataforma apresente também o seu nome, facilitando a escolha do usuário:



Outro tópico importante é que, no Project for the web, não existe a necessidade de se criar uma equipe de trabalho, como acontece no Project Online. Conforme o projeto vai se desenvolvendo, você poderá começar a atribuir pessoas às tarefas:



Um importante ponto a ser observado é que, quando você tenta atribuir uma pessoa que não você próprio a uma tarefa, terá de criar um novo grupo para o seu projeto no Office 365 (ou então associar o projeto a um grupo existente):



Perceba que, ao tentar atribuir o usuário Daniel a tarefa ‘Configurar o ambiente de testes’ a plataforma irá requerer a definição sobre a criação de um novo grupo ou a associação do projeto a um grupo existente:






Design e interface do usuário (user interface)

Além da visão padrão de tabela, onde é possível adicionar e organizar as tarefas, o Project for the web também possui outras duas visões padrão: Quadro e Linha do Tempo. A visão quadro é muito semelhante a que encontramos no Planner (de novo ele), com a organização vertical das tarefas de acordo com um agrupamento específico (Progresso, Bucket ou Data de Vencimento):



Enquanto isso, a visão linha do tempo apresenta as tarefas no formato do velho e bom Gráfico de Gantt, só que agora com um visual bem mais moderno:



Outro item muito interessante do novo design está relacionado à formatação condicional aplicada automaticamente às tarefas, de acordo com o seu vencimento:




O futuro

Como eu havia comentado no início do post, o Project for the web é uma plataforma completamente nova, que não tem em sua fundação nenhum resquício do nosso velho amigo SharePoint, no qual toda a suíte PPM (Project Server e Project Online) foi baseada até hoje. Ainda referenciando aos primeiros parágrafos do post, o Project for the web foi construído sob a plataforma Power Platform, o que irá abrir um mundo completamente novo de possibilidades para integrações, desenvolvimento de soluções, aplicativos e conectores, que poderão tanto consumir como enviar dados para o novo Project. Acessando os bastidores do CDS (Common Data Service) é possível entender como a plataforma está organizada em entidades:



E ao acessar uma entidade específica (neste exemplo projetos) é possível visualizar todas as propriedades e informações sobre os seus registros:




Mas esse será assunto para os próximos posts e vídeos no canal.

Ok, legal... mas, e agora? Qual o impacto disso?

Imagino que, a partir de agora, as organizações irão começar a se perguntar: nós já utilizamos o Project Online como plataforma de apoio ao nosso portfolio de projetos. O que a introdução do Project for the web significa, e como isso irá nos afetar?

Segundo a própria Microsoft, não há motivo para pânico. O Project Online não será descontinuado, e as empresas não irão perder do dia para a noite todo o investimento realizado na plataforma. A princípio, as operações e a gestão do portfolio poderão acontecer normalmente no Project Online, de modo que as organizações poderão ter um tempo para entender melhor o Project for the web, bem como seus recursos, funcionalidades e qual o contexto de sua utilização. Deste modo será possível estruturar um plano para migração gradual do Project Online para o Project for the web, ao mesmo tempo em que novos recursos, funcionalidades, aplicativos, conectores e soluções são introduzidas/adicionadas à plataforma pela Microsoft e/ou parceiros do ecosistema PPM.

Para entender melhor todos os efeitos da introdução do Project for the web, e como se preparar para essa transição no longo prazo, a leitura da documentação abaixo é fundamental:








segunda-feira, 21 de outubro de 2019

Flow e Project Online: enviando uma Solicitação HTTP ao SharePoint

Olá pessoal –

Para fechar o terceiro post da série sobre os gatilhos e conectores nativos do Project Online e Flow, vamos falar hoje sobre a ação Enviar uma solicitação HTTP ao SharePoint. Como vimos nos dois posts anteriores (post1 e post2) o Microsoft Flow possui gatilhos e ações nativas atreladas ao Microsoft Project Online –  entretanto, podemos dizer que infelizmente esses gatilhos e conectores nativos do Flow possuem certas limitações em relação aos recursos disponíveis para as possíveis automações que queiramos configurar.

Para superar essas limitações, uma excelente alternativa é utilizar a ação Enviar uma solicitação HTTP ao SharePoint, que permite a execução de operações básicas como leitura e obtenção de dados de uma interface REST fornecida pelo SharePoint. Como sabemos, o Project Online é baseado em uma estrutura de sites do SharePoint, o que permite que esta ação seja utilizada para que seja possível automatizar as ações no Microsoft Flow. Uma das maiores vantagens da utilização desta ação no contexto do Project Online é que podemos criar consultas para obter praticamente qualquer dado do banco de dados do Project Online, incluindo campos nativos e também campos personalizados. Caso você queira conhecer em mais detalhes as operações básicas usando os pontos de extremidades REST do SharePoint, você pode visitar esse excelente artigo técnico no site da Microsoft.

Temos uma infinidade de casos de uso que poderiam ser utilizados para obtenção dos dados via interface REST: poderíamos criar uma recorrência para coletar informações sobre projetos com problemas, enviando então um e-mail de notificação para um grupo específico; ou poderíamos capturar as informações dos projetos periodicamente, para criar uma análise de tendência; poderíamos também coletar os dados de um projeto recém criado e então gerar um documento (Business Case) automaticamente.... enfim, os cenários e as possibilidades são inúmeras, e eu tenho falado bastante sobre isso no meu canal do YouTube.

Para utilizar a ação na prática, vamos ao Microsoft Flow para construir um exemplo do zero. Selecione uma recorrência como disparador, e então escolha a ação Enviar uma solicitação HTTP ao SharePoint:


A janela contendo as configurações da ação será apresentada:


Em endereço do site, clique no drop-down para selecionar a URL do seu ambiente do Project Online. Caso não a encontre, você também poderá digitá-la, como nesse exemplo: https://<suaempresa>.sharepoint.com/sites/pwa.

O método a ser utilizado será GET, pois desejamos ler/obter os dados do banco de dados do Project Online.

Em Uri poderemos definir a string/consulta que será utilizada para determinar quais os campos a serem obtidos, e também para que seja possível filtrar os projetos. Neste exemplo, estou utilizando a seguinte string:

/_api/ProjectData/[en-us]/Projects()?$Select=ProjectId,ProjectName,ProjectOwnerName,ProjectPercentCompleted&$Filter=ProjectType ne 7

A ideia é obter alguns campos nativos do Project Online (Id do Projeto, Nome do Projeto, Proprietário e Percentual Concluído), filtrando para que o projeto do tipo 7 não seja incluído na consulta. A boa notícia é que você pode incluir campos personalizados existentes no seu ambiente na consulta caso seja necessário.

Em Cabeçalhos nós não estamos definindo um padrão de colunas que devem eventualment ser utilizadas, por isso o resultado/expressão application/json;odata=nometadata:


Como iremos utilizar os resultados da ação nas próximas ações do nosso Flow, é interessante renomear a ação atual para algo mais simples. Eu gosto bastante de usar a expressão GetProjects nesse contexto:


Uma vez construída a ação, você pode rodar o Flow para visualizar os resultados obtidos e validar que tudo está funcionando conforme esperado:


Uma vez validada a ação de obtenção dos dados, você poderá configurar os passos seguintes com os resultados, de acordo com os seus requisitos de negócio – por exemplo, poderia criar uma tabela HTML para melhor estruturar a lista de projetos obtidos. Como você está obtendo dados via extremidade REST, o ideal é não utilizar os resultados obtidos através da função de Conteúdo Dinâmico; pelo contrário, utilize uma Expressão para que seja possível se referenciar aos valores e resultados da ação anterior, utilizando a expressão body('GetProjects')[ 'Value '):


Os resultados poderão ser observados ao rodar o flow:


E a partir daí você poderia estabelecer mais filtros, obter mais campos e então definir as ações seguintes para  configurar a automatização do seu processo, conforme necessário.


quarta-feira, 16 de outubro de 2019

Introduzindo o Project for the Web

Olá pessoal –

Ontem, dia 15 de Outubro de 2019, a Microsoft oficialmente iniciou a divulgação da nova versão do Project, que irá se chamar ‘Project for the Web’. De acordo com o post publicado, todos os clientes que já possuem ao menos uma licença do tipo Microsoft Project Premium ou Microsoft Project Professional irão também obter acesso ao Project for the Web ainda nesse mês de Outubro.

A princípio não haverá custos adicionais para os clientes no que se refere à introdução do Project for the Web. A tabela abaixo, tirada do post publicado pela Microsoft, exibe os tipos de licença e seus respectivos produtos:


Dois links importantes, que podem auxiliar no entendimento sobre o novo serviço e suas diferenças para o serviço atual do Project Online, também foram compartilhados:



Irei publicar uma série de posts ao longo dos próximos dias/semanas para focar no novo serviço, suas funcionalidades, recursos e principais diferenças se comparado ao serviço atual do Project Online. 

Vamos explorar os cenários de utilização de cada serviço, e entender o Roadmap da Microsoft e como se planejar para implantar o serviço na nossa organização.


Fique ligado aqui no blog e também lá no canal no YouTube.


segunda-feira, 7 de outubro de 2019

Flow e Project Online: Gatilhos e Conectores Nativos (parte 2)

Olá pessoal –

Dando continuidade à parte 1 do vídeo sobre gatilhos e conectores nativos do Flow para o Project Online, vamos falar hoje sobre a ação Listar projetos. Esta é uma ação nativa que tem como objetivo disponibilizar/listar algumas informações dos projetos disponíveis no ambiente do Project Online.

Para simular um cenário real de utilização da ação Listar Projetos, digamos que um administrador do Project Online queira receber semanalmente a listagem dos projetos que foram deixados em check-out.

Para começar, vou iniciar um novo Flow e então definir uma recorrência semanal, sempre às segundas-feiras. Em seguida, a nova etapa utilizará o conector do Project Online que possui a ação Listar Projetos:


Esta ação possui apenas um parâmetro de entrada, que é o endereço do site raiz do Project Online:


Uma coisa que eu gosto bastante de fazer para aprender como o Flow trabalha nos bastidores, e também para descobrir quais são os resultados disponíveis no contexto da ação executada, é executar o fluxo de fato. O objetivo aqui é descobrir se entre os campos retornados na ação Listar Projetos há algo que permita descobrir se o projeto está ou não em check-out. Portanto, vou executar o Flow e descobrir a lista de campos retornados na ação:


Uma vez confirmada a existência da propriedade chamada “IsCheckedOut”, vamos prosseguir. Como o objetivo é listar apenas os projetos em check-out, na próxima etapa vou incluir a ação Matriz do filtro (em inglês, Filter array), que permite a segmentação das informações obtidas através da aplicação de um critério. O filtro será aplicado com base no valor retornado Projetos retornados Foi feito check-out:


A condição deve ser verdadeira (true):


So far so good... temos a nossa lista de projetos em check-out. A questão agora é: como organizá-la? Para enviar a lista por e-mail, uma boa alternativa é convertê-la em uma tabela, para que os dados sejam estruturados adequadamente. Nesse sentido, na próxima etapa vou utilizar a ação Criar Tabela HTML, onde iremos obter o resultado/output do passo anterior como entrada/input:


Aqui é importante notar algo relevante: apesar de o passo anterior estar filtrando apenas os projetos em check-out, todas as propriedades (colunas) estão sendo obtidas... isso significa que a tabela HTML não será estruturada adequadamente caso alguns ajustes não sejam feitos. Desse modo, ainda nesta etapa, clique em Mostrar opções avançadas para que seja possível determinar quais são as informações a serem exibidas na tabela. Perceba que você poderá criar um cabeçalho e então determinar quais propriedades deseja utilizar:



Nesse ponto acabei descobrindo que há um pequeno bug no conector do Flow 😕. Os resultados obtidos na ação Matriz do filtro disponibilizam uma propriedade chamada ‘Nome do Projeto’, que em teoria deveria trazer o nome do projeto conforme filtrado anteriormente. Acontece que, por algum motivo desconhecido, essa propriedade não está relacionada ao nome do projeto, mas sim à propriedade ‘Nome do Tipo de Projeto da Empresa’. Isso que dizer que a tabela não irá conseguir disponibilizar/listar os nomes dos projetos em check-out 😔.

Tenho que confessar que eu fiquei bem frustrado ao descobrir isso, pois o nome do projeto é uma propriedade essencial para o tipo de resultado que desejamos obter nesse exemplo. De qualquer maneira, já reportei o bug à Microsoft, então vamos continuar... ao invés de retornar os nomes dos projetos em check-out, iremos retornar outras três informações:

- O identificado do projeto
- A última data em que o projeto foi salvo
- O Id interno do projeto


Ao rodar o fluxo, teremos o seguinte resultado:


Para finalizar, vou configurar o envio de um e-mail com base nos resultados da tabela HTML. Nas configurações da ação Enviar um email lembre-se de expandir as opções avançadas para determinar que se trata de uma mensagem HTML:


Quando o fluxo rodar na data pré-definida, as notificações serão enviadas conforme exemplo abaixo:


Considerações


Como foi possível observar nesse post e também no post anterior, infelizmente os gatilhos e conectores nativos do Flow com o Project Online parecem não terem recebido a atenção merecida, exigindo certo malabarismo para que seja possível trabalhar com as informações que precisamos. Por este motivo irei dar continuidade a esta série de posts, onde iremos continuar explorando outras alternativas que permitam maior flexibilidade na obtenção dos campos disponíveis na api do Project Online. Fique ligado aqui no blog.

Um forte abraço e até o próximo post!