Criar ordens de trabalho usando o Power Automate

Pode criar automaticamente ordens de trabalho no Dynamics 365 Field Service usando fluxos do Power Automate. Isto é útil quando é necessário criar ordens de trabalho com base em gatilhos externos, como um alerta IoT, submissão de formulários, um pedido de serviço a outro sistema ou uma alteração a um registo relacionado.

Os fluxos do Power Automate utilizam o conector Microsoft Dataverse para interagir com os registos do Field Service. Para informações sobre como criar ordens de trabalho através de código, consulte Criar ordens de trabalho usando a API Web do Dataverse.

Pré-requisitos

  • Uma licença Power Automate (incluída na maioria das licenças Dynamics 365).
  • Pelo menos um dos seguintes direitos de acesso do Field Service atribuído à conta de ligação do fluxo. Saiba mais em Configurar utilizadores e funções de segurança.
    • Field Service — Expedidor
    • Field Service — Administrador
  • Registos existentes para os campos de pesquisa obrigatórios:
    • Conta de Serviço (account entidade)
    • Tipo de Ordem de Trabalho (msdyn_workordertype entidade)
    • Lista de Preços (pricelevel entidade)

Opção 1: Criar uma ordem de trabalho quando um registo Dataverse mudar

Use este padrão para criar uma ordem de trabalho em resposta a uma alteração noutra tabela Dataverse, como quando o estado de um ativo de cliente muda.

Configurar o acionador

  1. Em Power Automate, selecione Create>Automated cloud flow.

  2. Procure e selecione Quando uma linha é adicionada, modificada ou eliminada (conector Microsoft Dataverse).

  3. Quando solicitado, inicie sessão no conector Microsoft Dataverse usando as suas credenciais Dynamics 365. Se já tiver ligação ao seu ambiente, selecione-a no menu pendente. Os campos de configuração do gatilho só são preenchidos após o estabelecimento de uma ligação ativa.

  4. Configure o acionador:

    Campo Value
    Alterar tipo Modificado
    Nome da tabela Ativos do Cliente
    Scope Organização
  5. Opcionalmente, adicione uma condição de linhas de filtro para limitar quando o fluxo é executado. Por exemplo: msdyn_operationalstatus eq 690970001 (Necessita de Serviço).

Tip

Para testar os passos de criação da ordem de trabalho sem alterar um registo do Dataverse, crie uma cópia do seu fluxo e substitua o gatilho do Dataverse por Disparar manualmente um fluxo. Adicione parâmetros de entrada (como entradas de texto para o ID da conta de serviço, ID do tipo de ordem de trabalho e ID da lista de preços) para passar os valores de teste ao executar o fluxo. Depois de verificares se a ordem de trabalho foi criada corretamente, volta ao gatilho do Dataverse no teu fluxo de produção.

Adicionar a ação Criar ordem de trabalho

  1. Selecione + Novo passo e procure por Adicionar uma nova linha (conector Microsoft Dataverse).

  2. Seleciona a mesma ligação Dataverse que usaste para o gatilho. O campo nome da tabela só aparece depois de uma ligação ser selecionada.

  3. Defina o nome da Tabela para Ordens de Trabalho.

  4. Preencha os campos obrigatórios:

    Campo Value
    Número da Ordem de Serviço Insira a expressão guid() como um marcador de lugar. O campo Número da Ordem de Intervenção é exigido pela IU do conector do Dataverse, mas o plug-in de numeração automática do Field Service atribui automaticamente o número correto da ordem de intervenção sequencial quando o registo é guardado. Para introduzir uma expressão, selecione o campo, mude para o separador Expressão no painel de conteúdo dinâmico, escreva guid(), e selecione OK.
    Conta de Serviço Selecione a conta usando o campo de pesquisa, ou introduza a expressão concat('/accounts(', 'service-account-guid', ')') no separador Expressões se precisar de usar um GUID codificado fixamente ou dinâmico. Veja abaixo como encontrar isto.
    Tipo de Ordem de Serviço Selecione o tipo de ordem de trabalho usando o campo de pesquisa, ou introduza a expressão concat('/msdyn_workordertypes(', 'work-order-type-guid', ')') no separador Expressões se precisar de usar um GUID codificado fixamente ou dinâmico. Veja abaixo como encontrar isto.
    Tabela de Preços Selecione a lista de preços usando o campo de pesquisa, ou introduza a expressão concat('/pricelevels(', 'your-price-list-guid', ')') no separador Expressão se precisar de usar um GUID codificado fixamente ou dinâmico. Se obter a lista de preços dinamicamente utilizando uma ação Listar linhas dentro de um ciclo Para cada, utilize concat('/pricelevels(', items('YourLoopName')?['pricelevelid'], ')') em vez disso, substituindo YourLoopName pelo nome do seu ciclo. Veja abaixo como encontrar isto.
    Estado do sistema 690970000 (Não agendado)
    Tributável false
    Instruções Use conteúdo dinâmico do gatilho, por exemplo o nome do ativo

    Conta de Serviço: Escreva o nome da conta diretamente no campo da Conta de Serviço para procurar e selecionar. Se o gatilho for uma alteração no Ativo do Cliente e o ativo estiver ligado a uma conta, pode em vez disso selecionar Conta (Recursos do Cliente) no painel de conteúdo dinâmico. Se necessitar de usar um GUID diretamente, vá à área de Serviço, >Clientes>Contas no Field Service, abra a conta e copie o ID do registo do URL do navegador (o valor entre %7B e %7D, ou o GUID simples se o URL não estiver codificado).

    Tipo de Ordem de Trabalho: Digite o nome do tipo de ordem de trabalho diretamente no campo Tipo de Ordem de Trabalho para o procurar e selecionar. Se precisar de utilizar um GUID diretamente, aceda à área Definições em >Ordem de Intervenção>Tipos de Ordem de Intervenção no Field Service, abra o tipo de ordem de intervenção e copie o ID do registo a partir do URL do browser.

    Lista de Preços: Escreva o nome da lista de preços diretamente no campo Lista de Preços para pesquisar e selecionar. Se precisares de usar um GUID diretamente, vai a Definições>Geral>Listas de Preços no Field Service, abre a lista de preços e copia o ID do registo a partir do URL do navegador.

    Observação

    O conector do Dataverse exige que os campos de consulta utilizem um caminho de referência da entidade OData (por exemplo, /accounts(guid)) em vez de um GUID simples. Introduzir um GUID simples causa uma ODataUnrecognizedPathException no runtime. As concat expressões acima constroem o formato de caminho correto.

  5. Guardar e testar o fluxo.

Opção 2: Criar uma ordem de trabalho a partir de um pedido HTTP

Use este padrão para criar uma ordem de trabalho a partir de um sistema externo, como um portal de clientes, sistema de tickets ou plataforma IoT.

Configurar o acionador

  1. No Power Automate, selecione Criar>Fluxo de nuvem instantâneo.

  2. Nomeie o fluxo e selecione Quando um pedido HTTP é recebido como gatilho.

  3. Selecione Criar.

  4. No campo Request Body JSON Schema , cole o seguinte esquema:

    {
      "type": "object",
      "properties": {
        "serviceAccountId": { "type": "string" },
        "workOrderTypeId": { "type": "string" },
        "priceListId": { "type": "string" },
        "instructions": { "type": "string" }
      },
      "required": ["serviceAccountId", "workOrderTypeId", "priceListId"]
    }
    
  5. Para quem pode desencadear o fluxo, selecione uma das seguintes opções:

    Opção Quando utilizar
    Apenas utilizadores no meu tenant Recomendado para produção. Os chamadores devem autenticar-se com o Microsoft Entra ID e apresentar um token portador OAuth válido. Utilize isto para sistemas internos ou para principais de serviço fidedignos.
    Qualquer pessoa O próprio URL atua como credencial — não é necessário um cabeçalho adicional de autenticação. Utilize apenas quando o sistema que chama não conseguir obter um token do Entra ID e pode garantir que o URL está armazenado de forma segura.

    Saiba mais sobre como proteger fluxos desencadeados por HTTP em Adicionar autenticação OAuth para disparadores de pedidos HTTP.

  6. O campo URL HTTP é apenas leitura — não o preenchas. O Power Automate preenche-o automaticamente quando guardas o fluxo pela primeira vez.

  7. Salve o fluxo. O campo URL HTTP é agora preenchido com o URL do endpoint. Copie este URL e forneça-o a quem configurar o sistema externo (como um programador ou administrador de sistema). O sistema externo desencadeia o fluxo enviando um pedido HTTP POST para esta URL com um corpo JSON que corresponde ao esquema que definiste. Por exemplo:

    POST <paste the HTTP URL here>
    Content-Type: application/json
    
    {
      "serviceAccountId": "<account record GUID>",
      "workOrderTypeId": "<work order type record GUID>",
      "priceListId": "<price list record GUID>",
      "instructions": "Reported issue: equipment not functioning"
    }
    

    Cada vez que o sistema externo envia este pedido, o Power Automate executa o fluxo e cria uma ordem de trabalho no Field Service.

Adicionar a ação Criar ordem de trabalho

  1. Selecione + Novo passo e procure por Adicionar uma nova linha (conector Microsoft Dataverse).

  2. Inicie sessão no conector Microsoft Dataverse ou selecione uma ligação existente. O campo nome da tabela só aparece depois de uma ligação ser selecionada.

  3. Defina o nome da Tabela para Ordens de Trabalho.

  4. Mapeie os campos do corpo do pedido HTTP para os campos da ordem de intervenção:

    Campo de ordem de trabalho Value
    Número da Ordem de Serviço Insira a expressão guid() como um marcador de lugar. O campo Número da Ordem de Intervenção é exigido pela IU do conector do Dataverse, mas o plug-in de numeração automática do Field Service atribui automaticamente o número correto da ordem de intervenção sequencial quando o registo é guardado. Para introduzir uma expressão, selecione o campo, mude para o separador Expressão no painel de conteúdo dinâmico, escreva guid(), e selecione OK.
    Conta de Serviço concat('/accounts(', triggerBody()?['serviceAccountId'], ')')
    Tipo de Ordem de Serviço concat('/msdyn_workordertypes(', triggerBody()?['workOrderTypeId'], ')')
    Tabela de Preços concat('/pricelevels(', triggerBody()?['priceListId'], ')')
    Estado do sistema 690970000 (Não agendado)
    Instruções @{triggerBody()?['instructions']}
  5. Opcionalmente, adicione uma ação de Resposta para devolver o novo ID da ordem de trabalho ao sistema que chama:

    1. Selecionar + Novo passo e procurar Resposta (no conector Pedido).
    2. Defina o código de estado para 200.
    3. No campo Corpo, selecione o ícone de conteúdo dinâmico e escolha msdyn_workorderid no passo Adicionar uma nova linha. Este é o ID único da ordem de trabalho que acabou de ser criada.

    Sem este passo, o sistema que chama não recebe resposta e o pedido HTTP expira após a espera. Se adicionar este passo, o sistema que chama recebe uma resposta 200 com o ID da ordem de intervenção assim que o fluxo termina.

Valores do conjunto de opções de estado do sistema

Use estes valores inteiros ao definir o Estado do Sistema numa chamada de fluxo ou API.

Etiqueta Value
Não Agendado 690970000
Agendado 690970001
Em Curso 690970002
Concluídos 690970003
Lançado 690970004
Cancelado 690970005

Considerações

Propriedade da conta de ligação de fluxos

As ordens de intervenção criadas por um fluxo são propriedade da conta de ligação utilizada no conector do Dataverse. Certifique-se de que esta conta tem o direito de acesso correto e que as ordens de intervenção criadas pelo fluxo aparecem nas vistas e filas esperadas.

Registos subordinados

A ação Adicionar uma nova linha cria apenas o cabeçalho da ordem de trabalho. Para adicionar produtos de ordens de intervenção, serviços ou tarefas de serviço, adicione os passos Adicionar uma nova linha para cada tabela subordinada (msdyn_workorderproduct, msdyn_workorderservice, msdyn_workorderservicetask) e defina o campo de pesquisa Ordem de Intervenção para o ID devolvido pelo passo de criação.

Limites de taxa de API

Os fluxos do Power Automate estão sujeitos aos limites da API do Dataverse. Para cenários de grande volume, considere utilizar o ponto final do lote da API Web do Dataverse ou distribuir execuções de fluxos utilizando um acionador agendado com processamento em lote.

Evitar ordens de trabalho duplicadas

Se um fluxo é executado frequentemente no mesmo gatilho, adicione uma condição para verificar se uma ordem de trabalho já existe antes de criar uma nova. Use uma ação Lista de linhas filtrada pelo ID do registo de origem para verificar ordens de trabalho existentes.

Tratamento de erros

Para fluxos de produção, encapsule o passo Adicionar uma nova linha numa ação Âmbito e adicione um ramo paralelo configurado para executar falhou. Use este ramo para registar o erro ou enviar uma notificação. Para fluxos acionados por HTTP, adicione sempre uma ação Resposta para que o sistema que chama receba um código de estado de sucesso ou falha em vez de exceder o limite de tempo.

Próximos passos