quinta-feira, 31 de março de 2022

Integração do Project Online com o Microsoft Teams - Adaptative Cards

 Olá pessoal –

Por aqui continuamos a todo vapor na exploração de soluções automatizadas que permitam às equipes trabalhar de maneira mais produtiva, com o objetivo de facilitar a comunicação e a colaboração, tornando o gerenciamento de projetos mais eficaz e inteligente.

Atualmente, um número muito grande de organizações utiliza o Microsoft Teams para possibilitar que as diferentes equipes de trabalho possam se comunicar e colaborar de maneira simples e eficiente, e por muitas vezes há o desejo de que tal cenário possa ser, de certa forma, estendido à gestão de projetos disponível na plataforma PPM – uma vez que os recursos e funcionalidades padrão do Teams não possuem uma integração nativa com o Project Online.

Para dar início à exploração das possibilidades de integração entre o Project Online e o Microsoft Teams, decidi começar pelos Adaptative Cards: de maneira bem resumida, eles são cartões abertos que podem ser formatados para exibir informações nos mais variados formatos, a depender das necessidades apresentadas. Para conhecer um pouco mais sobre os adaptative cards, sugiro que você dê uma olhada na galeria de exemplos e templates disponibilizada pela Microsoft. Você encontrará coisas muito legais 😎


A ideia aqui é começar pelo básico: na minha empresa fictícia foi criado um novo time no Microsoft Teams, com o objetivo de que seja utilizado pelos membros do escritório de projetos, gerentes de projetos e demais interessados para troca de informações, aconselhamento e esclarecimento de dúvidas, armazenamento dos modelos utilizados pelas equipes (documentos, planilhas, apresentações e etc.), disponibilização de processos, procedimentos e treinamentos e todos os demais aspectos e artefatos que estejam relacionados à gestão de projetos na organização.

Dessa forma, nosso objetivo será o de desenvolver um fluxo automatizado no Power Automate para que uma publicação seja feita no Microsoft Teams (através de um adaptive card) sempre que um novo projeto for criado no Project Online.

O flow

O flow é relativamente simples: assim que um novo projeto for criado, algumas informações devem ser coletadas e um novo post deve ser feito no Microsoft Teams:


Para começar, utilizei o gatilho nativo do Project Online When a new project is created. Em seguida, mais duas ações: a) iniciar uma variável para capturar a URL do ambiente do PWA; b) uma pausa de 30 segundos, para garantir que todas as informações tenham sido processadas adequadamente antes de efetivamente postar a mensagem no Teams.

Em seguida utilizei a ação Send an HTTP request to SharePoint, da qual já falei inúmeras vezes aqui no blog, para capturar as informações do projeto recém criado:


Uma vez capturadas as informações desejadas, é necessário utilizar a ação Post adaptative card in a chat or channel para passar as intruções a respeito de como o cartão deverá ser configurado:


Abaixo vou deixar a instrução completa do exemplo que utilizei para construir o meu adaptative card. Vou destacar em amarelo os itens que você precisará ajustar, de acordo com o que desejar exibir:

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

{

    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",

    "type": "AdaptiveCard",

    "version": "1.0",

    "body": [

        {

            "type": "TextBlock",

            "text": "Novo projeto: <insira o nome do projeto aqui>",

            "id": "ProjectName",

            "spacing": "Medium",

            "horizontalAlignment": "Center",

            "size": "Large",

            "weight": "Bolder",

            "color": "Accent"

        },

        {

            "type": "TextBlock",

            "text": "Um novo projeto foi criado. Abaixo você poderá visualizar os detalhes",

            "id": "Subheader",

            "separator": true

        },    

        {

            "type": "TextBlock",

            "text": "<insira o título do seu campo personalizado aqui>",

            "id": "Campo1Header",

                "weight": "Bolder",        

            "wrap": true

        },

            {

            "type": "TextBlock",

            "text": "<insira o campo desejado aqui>",

            "id": "Campo1",

            "wrap": true,

                "separator": true 

        },

            {

            "type": "TextBlock",

            "text": "<insira o título do seu campo personalizado aqui>",

            "id": "Campo2Header",

                "weight": "Bolder",        

            "wrap": true     

        },

            {

            "type": "TextBlock",

            "text": "<insira o campo desejado aqui>",

            "id": "Campo2",

            "wrap": true,

                "separator": true 

        },

            {

            "type": "TextBlock",

            "text": "<insira o título do seu campo personalizado aqui>",

            "id": "Campo3Header",

                "weight": "Bolder",

            "wrap": true

        },

            {

            "type": "TextBlock",

            "text": "<insira o campo desejado aqui>",

            "id": "Campo3",

            "wrap": true,

                "separator": true 

        },

            {

            "type": "TextBlock",

            "text": "Projeto criado por: <insira o nome do proprietário do projeto aqui>",

            "id": "CriadoPor",

            "wrap": true

        }

     ]

}

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

Assim, quando um novo projeto for criado, a postagem será feita no canal especificado no Microsoft Teams:


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

E aí, o que achou? Deixe seu feedback pra eu saber se você gosta desse tipo de conteúdo 😉

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

terça-feira, 29 de março de 2022

Como forçar o check in de projetos

 Olá pessoal –

Os leitores mais atentos desse blog já devem ter percebido que, na maioria dos cenários em que é necessário construir um processo de automação do Project Online através do Power Automate, a realização do check out dos projetos é obrigatória.

Tal obrigatoriedade é observada porque, sempre que uma interação com o Project Online tenha como objetivo editar/modificar um parâmetro (seja ele um parâmetro da entidade Projects – como por exemplo um campo personalizado; seja ele um parâmetro da entidade Tasks – como a data de término de uma tarefa do cronograma) o projeto deve primeiramente ser bloqueado para edição, impedindo que outros usuários tenham condições de manipular o objeto (projeto) ao mesmo tempo.

Porém, e se durante o processo de automação o projeto já se encontrar bloqueado por outra pessoa? O que devemos fazer caso algum gerente de projeto se esqueça de efetuar o check in do projeto ao finalizar o seu trabalho, mantendo assim o objeto bloqueado no servidor?

Faz uns 2 anos, eu fiz um vídeo com o MVP Renato Romão ensinando como obter a relação de projetos em check out no Project Online via Power Automate.


Em teoria, ao obter a relação de projetos bloqueados, alguém poderia agir de maneira proativa, seja conversando com os gestores para que efetuem o check in dos projetos, seja forçando o check in por conta própria...

Porém, para um cliente com o qual venho trabalhando atualmente, essa abordagem ainda seria insuficiente. Esse cliente roda todo sábado um processo automatizado que tem como objetivo obter informações de um sistema financeiro (ERP) para então alimentar algumas tarefas no Project Online, atualizando os custos do cronograma com base nos lançamentos realizados pelo time de controladoria. E, para garantir que o processo possa acontecer independentemente de o projeto encontrar-se em check in ou não, a decisão foi radical: no momento da execução do fluxo, caso algum projeto esteja em check out, o check in deve ser forçado para que as tarefas possam ser atualizadas corretamente.

 Para forçar o check in de um projeto no Project Online através do Power Automate, é possível utilizar a ação Send an HTTP request to SharePoint, conforme print abaixo:


A instrução Uri deverá explicitar que o check in será forçado para cada projeto encontrado em check out:

/_api/ProjectServer/Projects('<projectId>')/Draft/checkIn(true)

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

Dessa forma, toda vez que o fluxo é acionado será possível garantir que todos os projetos serão atualizados, mesmo que algum gerente de projetos tenha esquecido de efetuar o check in ao finalizar a atualização do cronograma.

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

É importante destacar que você deve utilizar esse recurso apenas em casos extremos, pois ao forçar o check in de um projeto a sessão ativa será encerrada e o gerente de projetos poderá eventualmente perder todo o seu trabalho caso não o tenha salvo.

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

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