quinta-feira, 1 de outubro de 2020

Usando variáveis para popular campos personalizados no Project Online via Power Automate

Olá pessoal –

Este é o quarto post em sequência que estou fazendo sobre as diferentes possibilidades para popular campos do Project Online através do Power Automate (tanto campos nativos quanto campos personalizados). Caso você esteja chegando aqui no blog agora, sugiro seguir a trilha abaixo:

1. Atualizando campos nativos no Project Online via Power Automate

2. Atualizando campos personalizados no Project Online via Power Automate (texto livre)

3. Atualizando campos personalizados no Project Online via Power Automate (tabela de pesquisa)

Conforme vimos no último post, para popular campos que são baseados em uma tabela de pesquisa é preciso capturar o Id interno de cada uma das opções disponíveis na tabela, passando então esse parâmetro para o Power Automate. Uma dúvida que fica é: como configurar o flow para popular o campo personalizado no Project Online a depender de um valor que tenha sido escolhido previamente pelo usuário no sistema de origem?

O cenário

Para exemplificar, imagine o seguinte cenário: uma determinada empresa precisa popular um campo personalizado chamado Project KPI, que é baseado em uma tabela de pesquisa contendo três opções: On Track, On Watch e Troubled. O valor a ser populado para cada projeto será controlado em um sistema externo (nesse exemplo usaremos uma lista do SharePoint, entretando poderíamos estar falando de qualquer outro sistema), que é quem deve fornecer os valores a serem automaticamente inseridos no Project Online através do flow.

Configurando o flow

Para configurar o flow a atender esse cenário, a estratégia recomendada é trabalhar com uma variável que possa ser definida de acordo com o resultado obtido do sistema externo. Essa abordagem é adequada porque o código interno de cada valor da tabela de pesquisa é diferente de um para o outro, e assim o valor da variável pode ser definida apenas quando soubermos o valor a ser aplicado para cada projeto individualmente.

Na imagem abaixo temos um exemplo de 5 projetos e seus respectivos status na lista do SharePoint:


O primeiro passo é capturar o Id interno do campo a ser populado. No meu caso, o Id interno do campo é f51e4d4e-fd43-e711-80ce-00155d38bd21:


Em seguida é preciso capturar os Ids internos de cada uma das opções disponíveis na tabela de pesquisa que alimenta o campo. No meu caso, os valores são:

On Track = ba2dc508-fd43-e711-80d7-00155d3ce811

On Watch = bb2dc508-fd43-e711-80d7-00155d3ce811

Troubled = bc2dc508-fd43-e711-80d7-00155d3ce811

Uma vez capturadas as informações que serão utilizadas como entrada no flow, poderemos criá-lo no Power Automate. Neste exemplo, o flow será configurado para rodar periodicamente. Em seguida, as informações de status serão obtidas da lista do SharePoint e então uma nova variável será iniciada:


Então, para cada valor obtido da lista do SharePoint, um conjunto de ações deve ser aplicado. Em primeiro lugar, é preciso encontrar o projeto correspondente no Project Online e colocá-lo em check-out (lembrando que, em um contexto mais avançado, seria necessário primeiro verificar se o projeto está em check-in para só então efetuar o check-out):


Uma vez que o projeto esteja em check-out será preciso definir o valor da variável, de acordo com o status oriundo da lista do SharePoint. Para isso é preciso utilizar a ação de controle Switch, que permite a definição de uma ação de acordo com o valor de uma determinada propriedade. Iremos selecionar como entrada a propriedade Project Status, e no primeiro case iremos compará-la com o texto “On Track”:


Caso para esse projeto o valor da propriedade Project Status seja On Track, então a variável deverá ser definida com o respectivo código (ba2dc508-fd43-e711-80d7-00155d3ce811). Para isso, basta adicionar uma ação nesse case que defina o valor da variável:


E assim será possível criar cases adicionais, de acordo com a quantidade de respostas possíveis:


Uma vez definido o valor da variável poder-se-à criar a ação para atualizar o campo personalizado no Project Online:


Para finalizar, não se esqueça de adicionar a ação para publicar o projeto e fazer o seu check-in.

Espero que ajude


quarta-feira, 23 de setembro de 2020

Atualizando campos personalizados (tabela de pesquisa) no Project Online via Power Automate

Olá pessoal –

Este é o terceiro post da série onde estamos falando sobre como atualizar campos no Project Online através do Power Automate. No post de estréia falamos sobre como atualizar o campo nativo Nome do Projeto, enquanto que no segundo post falamos sobre como atualizar um campo personalizado de digitação livre.

Atualizando campos personalizados baseados em uma tabela de pesquisa

Conforme discutido no segundo post da série, quando precisamos atualizar um campo personalizado no Project Online é preciso especificar o campo a ser populado, através da declaração do seu nome interno.

Se o campo personalizado for do tipo digitação livre, então basta inputar o seu valor livremente na propriedade Value através do script. Porém, se o campo personalizado for baseado em uma tabela de pesquisa, então o input livre do valor não é suportado, sendo necessário não só declarar o nome interno do campo como também o código interno da propriedade que é representada pelos valores da tabela de pesquisa.

Convertendo isso para um cenário do mundo real: suponha que você possua um campo personalizado chamado Project Phase, o qual está associado a uma tabela de pesquisa chamada Project Phase. Você precisa que o Power Automate seja capaz de popular o campo, definindo o seu valor para uma das opções disponíveis na tabela de pesquisa (digamos que o valor desejado seja ’01 – Initiation’).

Nesse sentido, você precisará acessar a tabela de pesquisa e então selecionar o item que deseja utilizar. Ao fazer isso, o Id interno dessa propriedade na tabela de pesquisa será exibida:


Assim você poderá configurar todo o script de atualização do campo, incluindo a referência do código interno do campo personalizado e também da propriedade a ser inputada, com base na tabela de pesquisa:


Abaixo as intruções completas que foram utilizadas no processo de atualização:

……………………………………………………………………….

Site Address: Utilize a URL do seu PWA

Method: POST

Uri: _/api/ProjectServer/Projects(' <Id do projeto> ')/Draft/UpdateCustomFields

Headers:

Content-Type | application/json;odata=nometadata

IF-MATCH | *

X-HTTP-Method | POST

Body:

{

"customFieldDictionary":[

{

"Key":"Custom_<nome interno do campo personalizado>",

"Value":"<código interno da propriedade da tabela de pesquisa>",

"ValueType":"Edm.String"

}

]

}

……………………………………………………………………….

Lembrando que os items destacados em amarelo devem ser substituídos pelos seus respectivos valores.

Por fim, a última ação deverá publicar o projeto e efetuar o check-in, para garantir que todas as atualizações ocorram de maneira adequada.

Espero que ajude!


segunda-feira, 14 de setembro de 2020

Atualizando campos personalizados (texto livre) no Project Online via Power Automate

 Olá pessoal –

Este é o segundo post de uma nova série aqui no blog onde vamos falar sobre como atualizar campos no Project Online através do Power Automate. No post de estréia falamos sobre como atualizar o campo nativo Nome do Projeto.

Atualizando campos personalizados do tipo texto livre

Pegando carona no cenário proposto no primeiro post da série, vamos introduzir hoje uma pequena modificação para que seja possível adequar o nosso flow:

  • Ao invés de combinar o código SAP com o nome do projeto, o Power Automate deverá manter o nome do projeto inalterado, populando o código SAP em um campo personalizado criado exclusivamente para receber essa informação

Abaixo um exemplo do flow que foi criado no Power Automate, contendo todas as principais ações:


Em resumo, a essência do novo flow é exatamente a mesma do anterior – então, caso você não tenha lido o post, certifique-se de voltar uma casa e se familiarizar com o conjunto de ações aplicadas.

A única mudança que iremos aplicar nesse caso acontecerá na ação Send an HTTPS request to SharePoint, pois para que seja possível popular um campo personalizado no Project Online o método a ser utilizado será diferente (POST ao invés de PATCH), assim como o script a ser inserido no corpo. Além disso, como na instrução precisamos especificar qual o campo personalizado a ser populado, é preciso declarar o seu nome interno (nome de sistema) para que a ação seja realizada.

Para descobrir qual o nome interno do campo personalizado, no Project Online, clique em Configurações do PWA > Campos Personalizados e Tabelas de Pesquisa. Clique no nome do campo personalizado e navegue até a área Dados de Identificação do Sistema:


Assim você poderá configurar todo o script de atualização do campo:


Abaixo as intruções completas que foram utilizadas no processo de atualização:

……………………………………………………………………….

Site Address: Utilize a URL do seu PWA

Method: POST

Uri: /_api/ProjectServer/Projects(' <Id do projeto> ')/Draft/UpdateCustomFields

Headers:

Content-Type | application/json;odata=nometadata

IF-MATCH | *

X-HTTP-Method | POST

Body:

{

"customFieldDictionary":[

{

"Key":"Custom_<nome interno do campo personalizado>",

"Value":"<campo da lista do SharePoint>",

"ValueType":"Edm.String"

}

]

}

……………………………………………………………………….

Lembrando que os items destacados em amarelo devem ser substituídos pelos seus respectivos valores.

Por fim, a última ação deverá publicar o projeto e efetuar o check-in, para garantir que todas as atualizações ocorram de maneira adequada.

Espero que ajude!


quarta-feira, 26 de agosto de 2020

Atualizando campos nativos no Project Online via Power Automate

 Olá pessoal –

No meu canal no YouTube tenho procurado explorar diferentes cenários de integração do Power Automate com o Project Online, com o objetivo de otimizar e automatizar alguns processos de gerenciamento de projetos que são executados no contexto da solução PPM da Microsoft. É importante lembrar que aqui no blog também há vários posts que complementam os vídeos.

Com base no aprendizado que venho obtendo ao explorar cada um dos cenários, e depois de bater muito a cabeça para descobrir como as coisas se encaixam, resolvi publicar aqui no blog algumas das lições aprendidas durante a jornada, para que fique registrado (caso eu precise pesquisar novamente no futuro 😊) e também para ajudar alguém que eventualmente precise fazer algo parecido.

Nesse sentido pretendo publicar, ao longo das próximas semanas, uma série de posts que contemplem diferentes formas de integração entre o Power Automate e o Project Online.

Atualizando campos nativos: nome do projeto

O primeiro post dessa sequência irá explorar como atualizar campos nativos do Project Online com o Power Automate – no exemplo de hoje iremos atualizar o campo Nome do Projeto. O cenário proposto é o seguinte (inclusive há um vídeo no meu canal no YouTube falando sobre algo muito parecido):

  • Uma determinada empresa possui códigos internos para os projetos, que são gerados no SAP (mas que poderiam ser gerados em qualquer outro sistema)

  • Uma vez gerados os códigos internos, esses são enviados para uma lista do SharePoint

  • Quando um novo projeto for criado no Project Online, o Power Automate deverá pesquisar por esse projeto na lista do SharePoint, para então atualizar o nome do projeto adicionando o número SAP como prefixo (ou seja, combinando o número SAP com o nome com o qual o projeto foi originalmente cadastrado).

É importante ressaltar que esse é um exemplo baseado em um cenário hipotético, com fins meramente ilustrativos. O ideal é que você possa absorver os conceitos e então aplicá-los, ajustando-os conforme as necessidades específicas.

Abaixo um exemplo do flow que foi criado no Power Automate, contendo todas as principais ações:


Em resumo, temos:

1. O gatilho utilizado foi ‘When a new project is created’’. Em seguida estou usando uma ação ‘Delay until’ para pausar o flow por alguns minutos. Como esse é um exemplo para fins didáticos, podemos dizer que é ok, mas é evidente que não poderia ser aplicado em um ambiente produtivo. No mundo real, o mais adequado seria aguardar até que o check-in do projeto fosse efetuado, para termos a garantia de que o criador do projeto preencheu todos os campos e saiu efetivamente do projeto, liberando-o para ser modificado pelo flow

2. Na ação seguinte estou obtendo a lista de projetos cadastrados na lista do SharePoint, filtrando o título dos itens para obter apenas o registro que seja igual ao projeto que acabou de ser criado no Project Online


3. Então, para cada item encontrado na lista do SharePoint, teremos de efetuar o check-out do projeto. Vale reiterar, uma vez mais, que como esse exemplo trata apenas de fins didáticos, estou pulando algumas etapas. Mas se fóssemos considerar o mundo real seria preciso validar se o projeto encontra-se em check-in antes de prosseguir com a ação de efetuar o check-out

4. Daí é que vem o pulo do gato: para atualizar um campo nativo do Project Online (nesse caso, o campo Nome do Projeto), precisaremos fazer uma requisição HTTPS para o SharePoint (falei sobre isso aqui e aqui). Ao fazer a requisição, o método a ser utilizado é o PATCH, onde a variável [ProjectId] é fornecida para que o Power Automate tenha condições de encontrar o projeto correto e realizar sua atualização


Caso você queira aprender mais sobre requisições HTTPS no Project Online, poderá consultar esse link.

Abaixo as intruções completas que foram utilizadas no processo de atualização:

……………………………………………………………………….

Site Address: Utilize a URL do seu PWA

Method: PATCH

Uri: /_api/ProjectServer/Projects(' <Id do projeto> ')/Draft/

Headers:

Content-Type | application/json;odata=nometadata

IF-MATCH | *

Accept | application/json;odata=nometadata

Body:

{

"Name":" <campo da lista do SharePoint> - <nome do projeto> "

}

……………………………………………………………………….

Lembrando que os items destacados em amarelo são os campos obtidos nas ações anteriores do flow.

Por fim, a última ação deverá publicar o projeto e efetuar o check-in, para garantir que todas as atualizações ocorram de maneira adequada.

Espero que ajude!


terça-feira, 18 de agosto de 2020

Project Online: Erro the query string status information is missing or invalid

Olá pessoal –

Semana passada tive que ajudar um cliente na resolução de um problema bem interessante. Ao mover os projetos de uma fase para outra dentro do workflow, o seguinte erro era apresentado:


Em geral, a descrição do erro era a seguinte:

 

The query string “statusinformation” is missing or invalid.

 

Ao trabalhar para tentar encontrar a causa-raiz do problema, conseguimos perceber que o erro acontecia com alguns poucos projetos, enquanto a maioria das demais iniciativas se movia através das fases do workflow sem maiores problemas. Tínhamos então uma pista, e o próximo passo seria tentar descobrir quais as diferenças entre os projetos que apresentavam o problema para aqueles que funcionavam normalmente.

Comparando os nomes dos projetos foi possível perceber que a característica comum entre aqueles que tinham problemas estava no fato de que eles utilizavam o sinal do e comercial ( & ) no seu nome; do outro lado, todos os projetos que não estavam utilizando esse caracter funcionavam normalmente:


A partir daí foi possível descobrir que, por algum motivo interno, o SharePoint Designer não aceita a utilização de caracteres especiais na ação Definir o status atual do estágio. Dentro do workflow que havia sido criado, em cada estágio havia uma ação para definir o status do estágio atual, e as ações estavam configuradas para sempre capturar o nome do projeto utilizado no contexto do fluxo:


Ao verificar as características da mensagem sendo capturada na área de Status Information (justamente o local sinalizado com a descrição do erro) foi possível identificar que a propriedade nome do projeto estava sendo capturada e utilizada:


Uma vez que a propriedade [%Project Data:Project Name%] foi removida, o workflow passou a funcionar corretamente – e os projetos que utilizavam o & puderam continuar a ser criados normalmente.

É estranho e totalmente inesperado encontrar esse tipo de incompatibilidade no SharePoint / Project Online, mas ao menos é algo bastante fácil de resolver.

Espero que ajude!

 

sexta-feira, 31 de julho de 2020

Project Online: Erro 23000(0x59D8)

Olá pessoal –

Recentemente um cliente começou a enfrentar um problema ao tentar publicar um cronograma no Project Online:


Ao clicar em More Info, os detalhes do erro são exibidos:


<?xml version="1.0" encoding="utf-16"?>

<errinfo>

      <general>

             <class name="Microsoft.Office.Project.Server.BusinessLayer.Queue.Message">

                   <error id="23000" name="ProjectPublishFailure" uid="bbe7f23f-d3af-ea11-b0c0-00155dd85201" projectuid="82526c60-91ef-e911-b09a-00155de0cb15" messagetype="Microsoft.Office.Project.Server.BusinessLayer.QueueMsg.PublishProjectMessage" messageID="12" stage="" blocking="Block"/>

             </class>

             <class name="Queue">

                   <error id="26000" name="GeneralQueueJobFailed" uid="bce7f23f-d3af-ea11-b0c0-00155dd85201" JobUID="bb6e6439-d3af-ea11-92f7-5ccd5b0bb796" ComputerName="2af58245-7478-4133-bc68-6f050af4d94b" GroupType="ProjectPublish" MessageType="PublishProjectMessage" MessageId="12" Stage="" CorrelationUID="09f75c9f-c0af-0000-52fa-8920d708dbee"/>

             </class>

      </general>

</errinfo>


Enquanto é difícil saber o que efetivamente estaria causando o erro (muito provavelmente esse caso se trata de um cronograma corrompido), a boa notícia é que é possível corrigi-lo. Mas, para entender o processo de correção, é preciso entender um pouco da estrutura e do esquema dos bancos de dados do Project Online.

No Project Online, os projetos podem estar salvos em até 3 bancos de dados diferentes: Draft, Published e Archived. O banco de dados Published tem como responsabilidade armazenar os projetos conforme eles foram publicados – ou seja, aquilo que o usuário visualiza na Central de Projetos é oriundo desse banco de dados (em resumo, são as informações mais recentes e representam a última atualização do projeto).

Enquanto isso, o banco de dados Draft tem como objetivo armazenar as informações dos projetos que foram modificados e salvos, mas que ainda não foram publicados. Por exemplo: um gerente de projetos acessa o cronograma via Project Professional, efetua algumas modificações nas tarefas, salva o arquivo mas não efetua a publicação. Dessa maneira, o que os usuários irão visualizar na Central de Projetos não será as modificações realizadas pelo gerente de projetos, mas sim as informações do projeto com base na última vez em que ele foi publicado. Daí, quando o projeto é finalmente publicado, as informações do banco Draft são espelhadas no banco Published.

Pois bem, voltando à correção do erro, para resolver o problema de publicação foi necessário acessar a área de exclusão de projetos (Administração do Banco de Dados e Fila > Excluir Objetos da Empresa) e escolher a opção de exclusão de apenas projetos publicados:


Perceba que você NÃO deve marcar a opção de excluir os Sites do SharePoint conectados.

Dessa forma, o projeto será removido do banco de dados Published, mas continuará ativo no banco de dados Draft. Então, bastará pedir para o gerente de projetos abrir o cronograma novamente a partir do Microsoft Project e publicar o projeto 😊.

Espero que ajude!


domingo, 26 de julho de 2020

Configurando a data de término nas views do Project for the web

Olá pessoal –

Dando continuação aos posts que estão complementando os vídeos sobre o Project for the web, hoje irei falar um pouco sobre o último vídeo publicado no meu canal sobre essa série, que trata da criação de views:


Eu não sei se vocês já chegaram a notar, mas ao acessar uma view padrão do Project for the web a partir do Dynamics 365, a coluna da data de término é apresentada no formato data e hora, diferentemente da coluna data de início, que é exibida apenas no formato data (perceba a diferença entre as colunas Start Date e Finish Date na imagem abaixo):


Essa situação acontece em virtude da maneira como o campo Data de Término foi configurado no Project for the web: ao acessar o campo a partir do Dynamics 365, podemos verificar que o seu tipo é Date and Time:


No exemplo do meu vídeo lá no YouTube, é latente a divergência entre as colunas de início e término:


Se isso te incomodar (e confesso que me incomoda um pouco 😊), é possível resolver o problema através da criação de um novo campo personalizado no Project for the web.

Navegando nos bastidores da solução, é possível criar um novo campo personalizado do tipo Date Only; perceba que o Dynamics 365 permite a criação do campo com o mesmo nome de um campo nativo existente (como o meu ambiente está em inglês, resolvi chamar o novo campo de Finish Date):


Como esse campo não irá permitir a entrada manual dos valores (uma vez que ele deve ser a representação do campo nativo data de término), basta configurá-lo como uma fórmula, de modo que ele esteja associado ao campo data de término:


Perceba que o Dynamics 365 irá salvar o nome dos campos e também seus atributos de maneira diferente, permitindo a rápida identificação e diferenciação do campo nativo e do campo personalizado:


Dessa forma você poderá modificar suas views para que exibam o campo personalizado ao invés do campo nativo, de modo que as colunas de início e término exibam o mesmo tipo de informação:


Penso que se trata de uma solução simples, porém é bem eficiente!

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



quinta-feira, 2 de julho de 2020

MVP renovado: 2020-2021



Olá pessoal,

 Todo começo de Julho é sempre uma grande expectativa para todos os MVPs. Afinal, é nesse período em que a Microsoft faz uma avaliação das contribuições dos MVPs ao longo do último ciclo anual para então decidir quem será renovado e quem não mais fará parte do programa.

Uma coisa que pouca gente sabe é que o MVP é uma premiação dinâmica: ela se baseia no seu último ano de contribuições, e não em todo o seu histórico ao longo do tempo em que você está no programa. Isso quer dizer que um MVP de longa data pode não renovar caso não tenha contribuído significativamente nos últimos 12 meses – o que é muito bom, já que privilegia e reconhece quem é ativo junto à comunidade. Outra coisa boa que acontece em virtude desse critério é que sempre há espaço para novas pessoas chegarem, de forma que o programa MVP não se torna um grupo exclusivo e restrito sempre às mesmas pessoas.

Pois hoje sinto-me muito honrado e feliz em saber que fui renovado como MVP de Project, indo assim para o meu quinto ano consecutivo no programa. Para se ter uma ideia, na área da minha premiação existem apenas cerca de 30 profissionais reconhecidos como MVP em todo o mundo – sendo que 4 deles são brasileiros (além de mim, há os véios de guerra Allan Rocha e André Xavier e o Mário Trentim).

Então é isso pessoal... é um prazer enorme e uma responsabilidade maior ainda em fazer parte de um time com tantas feras. Meu dever agora é continuar o trabalho, compartilhando conhecimento e contribuindo com a comunidade do Microsoft Project, Project Online, Planner, Project for the web e muito mais!

Vamos juntos que tem muita coisa pela frente!


domingo, 28 de junho de 2020

Configurando os conjuntos de opções no Project for the web

Olá pessoal –

Como comentei no último post, recentemente iniciei uma playlist no meu canal do YouTube onde estou gravando vídeos para falar com um pouco mais de profundidade sobre as possibilidades de extensão do Microsoft Project for the web. No vídeo número #003 da série abordei o tópico de como criar formulários personalizados através da interface do Power Apps, para que seja possível coletar e exibir os atributos personalizados dos projetos:

Na medida em que vou publicando novos vídeos no YouTube, irei também escrever alguns complementos aqui no blog com dicas e truques sobre como potencializar as personalizações.

Conforme discutido no vídeo, os formulários deverão conter os campos personalizados que fazem parte do ciclo de vida do processo de gerenciamento de projetos em vigor na organização. Um recurso bem bacana que pode ser implementado é o de configurar os campos do tipo ‘Conjunto de Opções’ para que apresentem um visual mais moderno em relação à sua visualização padrão, permitindo aos usuários visualizar todos os valores de uma única vez e então selecionando o valor desejado, ao invés do convencional drop-down. Como é difícil explicar em palavras, vou usar os exemplos de imagens que falam por si só.

Usando como exemplo o campo personalizado ‘Prioridade’, essa é a maneira como o campo é apresentado de maneira padrão em um formulário:


Como podemos ver, trata-se de um campo de seleção baseado em drop-down, com o qual já estamos acostumados.

Com a configuração personalizada que pode ser aplicada ao campo, teríamos o seguinte resultado:


Para configurar o campo dessa forma, basta seguir os passos abaixo:

1. Acesse o formulário a ser configurado e coloque-o em modo de edição

2. Em seguida, na barra superior, clique em Switch to classic

3. Na página clássica do Power Apps, selecione o campo desejado (no exemplo atual o campo Prioridade) e então efetue duplo-clique sobre o campo (ou então clique na opção Change Properties, disponível na Faixa de Opções)

4. Clique então na aba Controls e clique em Add Control. Selecione a opção Option Set


5. Marque as opções para que este controle seja utilizado nos formulários que pretende utiliza (Web, telefone, tablet) e então clique OK.

6. Para finalizar salve e publique o formulário

Desse modo, ao cadastrar novos projetos pela interface do Dynamics 365 (aplicativo do Project) a nova visualização estará disponível para os usuários 😊

Importante: a configuração do conjunto de opções para os campos personalizados, até o presente momento, só funciona com campos de até 3 opções.

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