Guia de referência de esquema para a Linguagem de Definição de Fluxo de Trabalho nos Aplicativos Lógicos do Azure

Quando você cria um aplicativo lógico nos Aplicativos Lógicos do Azure, seu aplicativo lógico tem uma definição de fluxo de trabalho subjacente que descreve a lógica real que é executada em seu aplicativo lógico. Essa definição de fluxo de trabalho usa JSON e segue uma estrutura validada pelo esquema da Linguagem de Definição de Fluxo de Trabalho. Esta referência fornece uma visão geral sobre essa estrutura e como o esquema define atributos em sua definição de fluxo de trabalho.

Estrutura de definição do fluxo de trabalho

Uma definição de fluxo de trabalho sempre inclui um gatilho para instanciar seu aplicativo lógico, além de uma ou mais ações que são executadas após o disparo de gatilho.

Aqui está a estrutura de alto nível para uma definição de fluxo de trabalho:

"definition": {
  "$schema": "<workflow-definition-language-schema-version>",
  "actions": { "<workflow-action-definitions>" },
  "contentVersion": "<workflow-definition-version-number>",
  "outputs": { "<workflow-output-definitions>" },
  "parameters": { "<workflow-parameter-definitions>" },
  "staticResults": { "<static-results-definitions>" },
  "triggers": { "<workflow-trigger-definitions>" }
}
Atributo Necessário Descrição
definition Sim O elemento inicial para a definição do fluxo de trabalho
$schema Somente ao fazer referência externa a uma definição de fluxo de trabalho O local do arquivo de esquema JSON que descreve a versão da linguagem de definição de fluxo de trabalho, que você pode encontrar aqui:

https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json
actions Não As definições para uma ou mais ações a serem executadas no tempo de execução do fluxo de trabalho. Para obter mais informações, consulte Gatilhos e ações.



Ações máximas: 250
contentVersion Não O número da versão da definição do fluxo de trabalho, que é "1.0.0.0" por padrão. Para ajudar a identificar e confirmar a definição correta ao implantar um fluxo de trabalho, especifique um valor a ser usado.
outputs Não As definições para as saídas a serem retornadas de uma execução de fluxo de trabalho. Para obter mais informações, consulte Saídas.



Saídas máximas: 10
parameters Não As definições para um ou mais parâmetros que passam os valores a serem usados no tempo de execução do seu aplicativo lógico. Para obter mais informações, consulte Parâmetros.



Parâmetros máximos: 50
staticResults Não As definições para um ou mais resultados estáticos retornados por ações como saídas fictícias quando os resultados estáticos são habilitados nessas ações. Em cada definição de ação, o runtimeConfiguration.staticResult.name atributo faz referência à definição correspondente dentro de staticResults. Para obter mais informações, consulte Resultados estáticos.
triggers Não As definições para um ou mais gatilhos que instanciam seu fluxo de trabalho. Você pode definir mais de um gatilho, mas apenas com a Linguagem de Definição de Fluxo de Trabalho, não visualmente por meio do designer de fluxo de trabalho. Para obter mais informações, consulte Gatilhos e ações.



Gatilhos máximos: 10

Acionadores e ações

Em uma definição de fluxo de trabalho, as triggers seções e actions definem as chamadas que acontecem durante a execução do fluxo de trabalho. Para obter sintaxe e mais informações sobre essas seções, consulte Acionadores e ações de fluxo de trabalho.

Parâmetros

O ciclo de vida da implantação geralmente tem ambientes diferentes para desenvolvimento, teste, preparação e produção. Ao implantar aplicativos lógicos em vários ambientes, você provavelmente deseja usar valores diferentes, como cadeias de conexão, com base em suas necessidades de implantação. Ou, você pode ter valores que deseja reutilizar em todo o seu aplicativo lógico sem hardcoding ou que mudam com frequência. Na seção de definição de parameters fluxo de trabalho, você pode definir ou editar parâmetros para os valores que seu aplicativo lógico usa em tempo de execução. Você deve definir esses parâmetros primeiro antes de poder fazer referência a esses parâmetros em outro lugar na definição do fluxo de trabalho.

Aqui está a estrutura geral para uma definição de parâmetro:

"parameters": {
   "<parameter-name>": {
      "type": "<parameter-type>",
      "defaultValue": <default-parameter-value>,
      "allowedValues": [ <array-with-permitted-parameter-values> ],
      "metadata": {
         "description": "<parameter-description>"
      }
   }
},
Atributo Necessário Type Description
<nome-parâmetro> Sim String O nome do parâmetro que você deseja definir
<tipo-parâmetro> Sim int, float, string, bool, matriz, objeto, securestring, secureobject



Nota: Para todas as senhas, chaves e segredos, use os securestring tipos ou secureobject porque a GET operação não retorna esses tipos. Para obter mais informações sobre como proteger parâmetros, consulte Recomendações de segurança para parâmetros de ação e entrada.
O tipo para o parâmetro
<default-parameter-value> Sim O mesmo que type O valor de parâmetro padrão a ser usado se nenhum valor for especificado quando o fluxo de trabalho for instanciado. O defaultValue atributo é necessário para que o Logic App Designer possa mostrar corretamente o parâmetro, mas você pode especificar um valor vazio.
<array-with-permitted-parameter-values> Não Matriz Uma matriz com valores que o parâmetro pode aceitar
<parâmetro-descrição> Não Objeto JSON Quaisquer outros detalhes do parâmetro, como uma descrição para o parâmetro

Em seguida, crie um modelo do Azure Resource Manager para sua definição de fluxo de trabalho, defina parâmetros de modelo que aceitem os valores desejados na implantação, substitua valores codificados por referências a parâmetros de definição de modelo ou fluxo de trabalho, conforme apropriado, e armazene os valores a serem usados na implantação em um arquivo de parâmetro separado. Dessa forma, você pode alterar esses valores mais facilmente por meio do arquivo de parâmetros sem precisar atualizar e reimplantar seu aplicativo lógico. Para obter informações confidenciais ou que devem ser protegidas, como nomes de usuário, senhas e segredos, você pode armazenar esses valores no Cofre de Chaves do Azure e fazer com que seu arquivo de parâmetros recupere esses valores do cofre de chaves. Para obter mais informações e exemplos sobre como definir parâmetros nos níveis de definição de modelo e fluxo de trabalho, consulte Visão geral: automatizar a implantação de aplicativos lógicos com modelos do Azure Resource Manager.

Resultados estáticos

No atributo, defina o staticResults simulado outputs de uma ação e status que a ação retorne quando a configuração de resultado estático da ação estiver ativada. Na definição da ação, o runtimeConfiguration.staticResult.name atributo faz referência ao nome da definição de resultado estático dentro do staticResults. Saiba como você pode testar fluxos de trabalho de aplicativos lógicos com dados fictícios configurando resultados estáticos.

"definition": {
   "$schema": "<...>",
   "actions": { "<...>" },
   "contentVersion": "<...>",
   "outputs": { "<...>" },
   "parameters": { "<...>" },
   "staticResults": {
      "<static-result-definition-name>": {
         "outputs": {
            <output-attributes-and-values-returned>,
            "headers": { <header-values> },
            "statusCode": "<status-code-returned>"
         },
         "status": "<action-status>"
      }
   },
   "triggers": { "<...>" }
}
Atributo Necessário Type Description
<static-result-definition-name> Sim String O nome de uma definição de resultado estático que uma definição de ação pode referenciar por meio de um runtimeConfiguration.staticResult objeto. Para obter mais informações, consulte Definições de configuração de tempo de execução.

Você pode usar qualquer nome exclusivo que desejar. Por padrão, esse nome exclusivo é acrescentado com um número, que é incrementado conforme necessário.
<saída-atributos-e-valores-retornados> Sim Varia Os requisitos para esses atributos variam com base em diferentes condições. Por exemplo, quando o status é Succeeded, o outputs atributo inclui atributos e valores retornados como saídas fictícias pela ação. Se for status Failed, o outputs atributo inclui o errors atributo, que é uma matriz com um ou mais objetos de erro message que têm informações de erro.
<valores de cabeçalho> Não JSON Quaisquer valores de cabeçalho retornados pela ação
<status-código-retornado> Sim String O código de status retornado pela ação
<status da ação> Sim String O status da ação, por exemplo, Succeeded ou Failed

Por exemplo, nesta definição de ação HTTP, o runtimeConfiguration.staticResult.name atributo faz referência HTTP0 dentro do staticResults atributo onde as saídas fictícias para a ação são definidas. O runtimeConfiguration.staticResult.staticResultOptions atributo especifica que a configuração de resultado estático está Enabled na ação HTTP.

"actions": {
   "HTTP": {
      "inputs": {
         "method": "GET",
         "uri": "https://www.microsoft.com"
      },
      "runAfter": {},
      "runtimeConfiguration": {
         "staticResult": {
            "name": "HTTP0",
            "staticResultOptions": "Enabled"
         }
      },
      "type": "Http"
   }
},

A ação HTTP retorna as saídas na definição dentro do HTTP0 staticResults. Neste exemplo, para o código de status, a saída simulada é OK. Para valores de cabeçalho, a saída simulada é "Content-Type": "application/JSON". Para o status da ação, a saída simulada é Succeeded.

"definition": {
   "$schema": "<...>",
   "actions": { "<...>" },
   "contentVersion": "<...>",
   "outputs": { "<...>" },
   "parameters": { "<...>" },
   "staticResults": {
      "HTTP0": {
         "outputs": {
            "headers": {
               "Content-Type": "application/JSON"
            },
            "statusCode": "OK"
         },
         "status": "Succeeded"
      }
   },
   "triggers": { "<...>" }
},

Expressões

Com JSON, você pode ter valores literais que existem em tempo de design, por exemplo:

"customerName": "Sophia Owen",
"rainbowColors": ["red", "orange", "yellow", "green", "blue", "indigo", "violet"],
"rainbowColorsCount": 7

Você também pode ter valores que não existem até o tempo de execução. Para representar esses valores, você pode usar expressões, que são avaliadas em tempo de execução. Uma expressão é uma sequência que pode conter uma ou mais funções, operadores, variáveis, valores explícitos ou constantes. Em sua definição de fluxo de trabalho, você pode usar uma expressão em qualquer lugar em um valor de cadeia de caracteres JSON prefixando a expressão com o at-sign (@). Ao avaliar uma expressão que representa um valor JSON, o corpo da expressão é extraído removendo o caractere @ e sempre resulta em outro valor JSON.

Por exemplo, para a propriedade definida customerName anteriormente, você pode obter o valor da propriedade usando a função parameters() em uma expressão e atribuir esse valor à accountName propriedade:

"customerName": "Sophia Owen",
"accountName": "@parameters('customerName')"

A interpolação de cadeias de caracteres também permite que você use várias expressões dentro de cadeias de caracteres que são encapsuladas pelo caractere @ e chaves ({}). Aqui está a sintaxe:

@{ "<expression1>", "<expression2>" }

O resultado é sempre uma cadeia de caracteres, tornando esta capacidade semelhante à concat() função, por exemplo:

"customerName": "First name: @{parameters('firstName')} Last name: @{parameters('lastName')}"

Se você tiver uma cadeia de caracteres literal que comece com o caractere @, prefixe o caractere @ com outro caractere @ como um caractere de escape: @@

Estes exemplos mostram como as expressões são avaliadas:

Valor JSON Result
"Sophia Owen" Devolver estas personagens: 'Sophia Owen'
"matriz[1]" Retorne estes caracteres: 'array[1]'
"@@" Retorne esses caracteres como uma cadeia de caracteres de um caractere: '@'
" @" Retorne esses caracteres como uma cadeia de caracteres de dois caracteres: ' @'

Para estes exemplos, suponha que você defina "myBirthMonth" igual a "January" e "myAge" igual ao número 42:

"myBirthMonth": "January",
"myAge": 42

Estes exemplos mostram como as seguintes expressões são avaliadas:

Expressão JSON Result
"@parameters('meuMêsde Nascimento')" Retornar esta cadeia de caracteres: "janeiro"
"@{parameters('myBirthMonth')}" Retornar esta cadeia de caracteres: "janeiro"
"@parameters('myAge')" Devolver este número: 42
"@{parameters('myAge')}" Retorne este número como uma cadeia de caracteres: "42"
"Minha idade é @{parameters('myAge')}" Devolva esta string: "Minha idade é 42"
"@concat('Minha idade é ', string(parameters('myAge'))" Devolva esta string: "Minha idade é 42"
"Minha idade é @@{parameters('myAge')}" Retorne esta cadeia de caracteres, que inclui a expressão: "Minha idade é @{parameters('myAge')}'

Ao trabalhar visualmente no designer de fluxo de trabalho, você pode criar expressões usando o editor de expressões, por exemplo:

A captura de tela mostra o designer de fluxo de trabalho e o editor de expressão.

Quando terminar, a expressão aparecerá para a propriedade correspondente em sua definição de fluxo de trabalho, por exemplo, a searchQuery propriedade aqui:

"Search_tweets": {
  "inputs": {
    "host": {
      "connection": {
        "name": "@parameters('$connections')['x']['connectionId']"
      }
    }
  },
  "method": "get",
  "path": "/searchtweets",
  "queries": {
    "maxResults": 20,
    "searchQuery": "Azure @{concat('firstName','', 'LastName')}"
  }
},

Saídas

Na seção , defina os dados que seu fluxo de trabalho pode retornar quando terminar a outputs execução. Por exemplo, para controlar um status ou valor específico de cada execução, especifique que a saída do fluxo de trabalho retorna esses dados.

Nota

Ao responder a solicitações de entrada da API REST de um serviço, não use outputso . Em vez disso, use o Response tipo de ação. Para obter mais informações, consulte Acionadores e ações de fluxo de trabalho.

Aqui está a estrutura geral para uma definição de saída:

"outputs": {
  "<key-name>": {
    "type": "<key-type>",
    "value": "<key-value>"
  }
}
Atributo Necessário Type Description
<nome-chave> Sim String O nome da chave para o valor de retorno de saída
<tipo-chave> Sim int, float, string, securestring, bool, array, objeto JSON O tipo para o valor de retorno de saída
<valor-chave> Sim O mesmo que <o tipo de chave> O valor de retorno de saída

Para obter a saída de uma execução de fluxo de trabalho, revise o histórico de execução e os detalhes do seu aplicativo lógico no portal do Azure ou use a API REST do Fluxo de Trabalho. Você também pode passar a saída para sistemas externos, por exemplo, o Power BI para que possa criar painéis.

Operadores

Em expressões e funções, os operadores executam tarefas específicas, como fazer referência a uma propriedade ou a um valor em uma matriz.

Operador Task
' Para usar um literal de cadeia de caracteres como entrada ou em expressões e funções, envolva a cadeia de caracteres somente com aspas simples, por exemplo, '<myString>'. Não use aspas duplas (""), que entram em conflito com a formatação JSON em torno de uma expressão inteira. Por exemplo:

Sim: length('Hello')
Não: length("Olá")

Quando você passa matrizes ou números, não precisa de pontuação de encapsulamento. Por exemplo:

Sim: comprimento([1, 2, 3])
Não: comprimento("[1, 2, 3]")
[] Para fazer referência a um valor em uma posição específica (índice) em uma matriz ou dentro de um objeto JSON, use colchetes, por exemplo:

- Para obter o segundo item em uma matriz:

myArray[1]

- Para acessar as propriedades dentro de um objeto JSON:

Exemplo 1:
setProperty(<object>, '<parent-property>', addProperty(<object>['<parent-property>'], '<child-property>', <value>)

Exemplo 2:
lastIndexOf(triggerBody()?['subject'],'some string')
. Para fazer referência a uma propriedade em um objeto, use o operador dot. Por exemplo, para obter a name propriedade de um customer objeto JSON:

"parameters('customer').name"
? Para fazer referência a propriedades nulas em um objeto sem um erro de tempo de execução, use o operador null-ignore (?). Por exemplo, para manipular saídas nulas de um gatilho, você pode usar a seguinte expressão:

coalesce(trigger().outputs?.body?['<someProperty>'], '<property-default-value>')

Funções

Algumas expressões obtêm seus valores de ações de tempo de execução que podem ainda não existir quando a definição do fluxo de trabalho começar a ser executada. Para fazer referência ou trabalhar com esses valores em expressões, você pode usar funções fornecidas pela Linguagem de Definição de Fluxo de Trabalho.

Próximos passos