segunda-feira, 10 de julho de 2023

Migração de projetos para o Project for the web

 Olá pessoal –

Tenho percebido um número cada vez maior de empresas que tem optado pelo Project for the web como solução definitiva de gerenciamento de projetos, em detrimento ao Project Online. Em alguns casos, empresas que gerenciam seus projetos ativamente no Project Online têm feito planos para migrar seu portfolio para o Project for the web – um indicador de que, no médio/longo prazo, essa plataforma ganhará cada vez mais adeptos.

Recentemente apoiei um cliente em um processo de automação via Power Automate para realizar a migração do portfolio de projetos do Project Online para o Project for the web, e gostaria de documentar aqui minhas descobertas e lições aprendidas. O escopo geral do trabalho seria migrar os projetos em andamento do Project Online para o Project for the web (cerca de 350 projetos no total), englobando apenas as informações de nível de projeto, como nome, proprietário, patrocinador e demais atributos – cronogramas/tarefas não seriam migrados.

É importante ressaltar que os mesmos passos também podem ser aplicados por uma organização que esteja realizando o gerenciamento de projetos em qualquer plataforma ou sistema, como Primavera, Project Server, ou mesmo o velho e bom Excel.

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

Para construir o processo de automação, o primeiro passo é exportar os projetos do Project Online (ou de qualquer que seja o sistema) para uma planilha de Excel, como no exemplo abaixo:


A planilha precisa então ser salva em uma biblioteca do SharePoint, para que seja possível obter os registros (linhas) através do Power Automate.

Outro ponto muito importante é mapear os tipos de campo (atributos) utilizados para categorizar os projetos no Project for the web. Como expliquei nesse vídeo, é possível criar campos de diferentes tipos (como Tabela de Pesquisa, Escolha, Texto Livre, etc.), então cada atributo (coluna) da planilha precisará ser tratado de maneira diferente quando da realização do mapeamento e conversão para sua contra-parte no Project for the web.

Uma vez no Power Automate, inicia-se o novo fluxo (disparado manualmente) e uma das ações iniciais deve ser a de listar as linhas presentes em uma tabela (assim como iniciar as variáveis que serão utilizadas para armazenar cada um dos atributos a serem passados como entrada quando do cadastramento do novo projeto):


Em seguida, para cada registro (linha) obtido da planilha Excel, deve-se tratar individualmente cada um dos seus atributos (colunas). Esse tratamento é necessário para que seja possível realizar a conversão adequada do valor do atributo, de modo que a informação possa estar de acordo com os parâmetros de entrada requeridos pelo Dataverse. A título de exemplo, vamos analisar o atributo (coluna) ProjectDirection da planilha – para melhor organizar os meus fluxos, eu gosto bastante de utilizar a ação Scope do Power Automate, pois isso me ajuda a colocar todas as ações de um determinado tópico em uma espécie de container:


O tratamento de dados a ser realizado na coluna ProjectDirection utilizará a ação de controle Switch do Power Automate para converter o texto oriundo da planilha (que é um texto livre) no valor respectivo da lista de escolha do campo de mesmo nome, o quel foi criado no Dataverse:


Nesse caso, ao observar os valores de escolha do campo Project Direction na tabela Projects, será possível identificar o valor que de fato é armazenado pelo sistema para cada uma das opções disponíveis:


Ou seja: quando o usuário escolhe a opção Information Technology na lista suspensa o Power Apps está, de fato, gravando o valor 884.760.000 na tabela. Dessa forma, a ação de controle Switch deverá ser configurada para converter o texto oriundo da planilha no valor específico correspondente, pois é esse o valor que deverá ser passado como parâmetro de entrada quando do cadastramento do projeto via processo de automação:


Uma lógica parecida se aplica quando da necessidade de realizar o tratamento de informações que são oriundas de uma tabela de pesquisa, como é o caso do campo Sponsor do exemplo atual. Nesse cenário, o atributo Sponsor tem como origem a tabela de pesquisa Users, e sendo assim deve-se pesquisar nessa tabela o usuário que corresponde ao endereço de e-mail informado na planilha:


Uma vez encontrado o usuário correspondente na tabela Users, é necessário registrar o seu ID interno para que este possa ser utilizado pelo processo de automação quando do cadastramento do projeto (note que o que deve ser passado como parâmetro é o ID do usuário, e não seu nome ou endereço de e-mail):


Após realizar o tratamento e o mapeamento dos campos conforme necessário, é chegado o momento de enfim criar o projeto no Dataverse. Porém (e parece sempre haver um porém!)... ao utilizar a ação adicionar uma linha do Power Automate e apontar para a tabela Projects, seremos apresentados a uma lista de campos obrigatórios que devem ser preenchidos para a criação de um novo projeto no Project for the web. Entre eles:

  • Calendar Id
  • Contracting Unit (Organizational Units)
  • Schedule mode
  • Work hour template (Work template)

Eu não fazia ideia de que era preciso ter posse dessas informações para criar um novo projeto no Project for the web via Power Automate 😕. Como não sabia os parâmetros para cada uma dessas informações, fiz o seguinte:
  • Criei um novo fluxo no Power Automate, disparado quando da criação de um novo projeto
  • Adicionei uma ação qualquer (por exemplo, iniciar uma nova variável), pois todo fluxo deve possuir pelo menos uma ação após seu disparo


Com isso, bastou criar manualmente um novo projeto no Project for the web para que esse fluxo auxiliar fosse disparado. Uma vez executado, foi possível colher os resultados do fluxo, os quais contemplam as informações que precisávamos para finalizar o processo de automação original:


De posse dos dados faltantes, basta regressar ao fluxo original para configurar os parâmetros:


Assim, quando tudo estiver pronto, basta iniciar o fluxo de maneira manual para que todos os projetos da planilha sejam devidamente cadastrados no Project for the web, respeitando e mantendo seus respectivos atributos:

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

Confesso que essa não é, definitivamente, uma tarefa simples e corriqueira. Porém, foi muito gratificamente poder cadastrar todos esses 350 projetos de maneira automática – além de todo o aprendizado gerado a partir dessa necessidade.

Espero que esse post tenha sido útil de alguma forma. Até o próximo 😉.