Compartilhar via


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 fluxo de trabalho de aplicativo lógico nos Aplicativos Lógicos do Azure, o fluxo de trabalho tem uma definição de JSON (JavaScript Object Notation) subjacente que descreve a lógica real que executa o fluxo de trabalho. A definição do fluxo de trabalho segue uma estrutura validada no esquema de Linguagem de Definição de Fluxo de Trabalho. Esta referência fornece uma visão geral sobre essa estrutura e sobre como o esquema define atributos na definição de fluxo de trabalho.

Estrutura da definição de fluxo de trabalho

Uma definição de fluxo de trabalho sempre inclui um gatilho que cria uma instância do fluxo de trabalho, além de uma ou mais ações executadas após o gatilho ser acionado.

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>" }
}
Attribute Required Description
definition Yes O elemento inicial da definição de fluxo de trabalho
$schema Somente ao referenciar uma definição de fluxo de trabalho externamente O local do arquivo de esquema JSON que descreve a versão da Linguagem de Definição de Fluxo de Trabalho, que pode ser encontrado aqui:

https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json
actions No As definições de uma ou mais ações a serem executadas no runtime de fluxo de trabalho. Para saber mais, confira Gatilhos e ações.



Máximo de ações: 250
contentVersion No O número de versão da definição de 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 No As definições das saídas a serem retornadas de uma execução do fluxo de trabalho. Para obter mais informações, consulte Saídas.



Máximo de saídas: 10
parameters No As definições para um ou mais parâmetros que passam os valores a serem usados no runtime do aplicativo lógico. Para obter mais informações, confira Parâmetros.



Máximo de parâmetros: 50
staticResults No 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 atributo runtimeConfiguration.staticResult.name faz referência à definição correspondente dentro de staticResults. Para obter mais informações, consulte resultados estáticos.
triggers No As definições de um ou mais gatilhos que criam uma instância do fluxo de trabalho. É possível definir mais de um gatilho, mas apenas com a Linguagem de Definição de Fluxo de Trabalho, e não visualmente por meio do designer de fluxo de trabalho. Para saber mais, confira Gatilhos e ações.



Máximo da gatilhos: 10

Gatilhos e ações

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

Parameters

O ciclo de vida da implantação geralmente tem ambientes diferentes para desenvolvimento, teste, preparo e produção. Ao implantar aplicativos lógicos em vários ambientes, provavelmente convém usar valores diferentes, como cadeias de conexão, com base nas suas necessidades de implantação. Ou talvez você tenha valores que deseja reutilizar em todo o fluxo de trabalho sem codificação ou que mudem com frequência. Na seção da definição de fluxo de parameters trabalho, você pode definir ou editar parâmetros para os valores que o fluxo de trabalho usa em runtime. Você deve definir esses parâmetros primeiro para poder referenciá-los em outro ugar na sua definição de 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>"
      }
   }
},
Attribute Required Tipo Description
< nome do parâmetro> Yes String O nome do parâmetro que você deseja definir
< tipo de parâmetro> Yes int, float, string, bool, array, object, securestring, secureobject



Observação: para todas as senhas, chaves e segredos, use ou securestringsecureobject digite porque a GET operação não retorna esses tipos. Para saber mais sobre como proteger os parâmetros, confira Recomendações de segurança para parâmetros de ação e de entrada.
O tipo do parâmetro
< default-parameter-value> Yes O mesmo que type O valor de parâmetro padrão a ser usado se nenhum valor for especificado ao criar uma instância do fluxo de trabalho. O defaultValue atributo é necessário para que o designer de fluxo de trabalho possa mostrar corretamente o parâmetro, mas você pode especificar um valor vazio.
< array-with-permitted-parameter-values> No Array Uma matriz com valores que o parâmetro pode aceitar
< parameter-description> No Objeto JSON Quaisquer outros detalhes do parâmetro, como uma descrição para ele

Em seguida, crie um modelo do Azure Resource Manager para sua definição de fluxo de trabalho, defina os parâmetros de modelo que aceitam os valores desejados na implantação, substitua os valores codificados por referências aos parâmetros de definição de modelo ou de fluxo de trabalho, conforme apropriado, e armazene os valores a serem usados na implantação em um arquivo de parâmetroseparado. Dessa forma, você poderá alterar esses valores com mais facilidade, sem precisar atualizar e reimplantar o 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 Azure Key Vault e fazer com que seu arquivo de parâmetro 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 de fluxo de trabalho, confira Visão geral: automatizar a implantação para aplicativos lógicos com modelos do Azure Resource Manager.

Resultados estáticos

No atributo staticResults, defina outputs e status fictícios de uma ação, que esta retornará quando a configuração de resultado estático dela for ativada. Na definição da ação, o atributo runtimeConfiguration.staticResult.name faz referência ao nome da definição de resultado estático dentro de staticResults. Saiba como testar aplicativos lógicos usando 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": { "<...>" }
}
Attribute Required Tipo Description
< static-result-definition-name> Yes String O nome de uma definição de resultado estático que uma definição de ação pode referenciar por meio de um objeto runtimeConfiguration.staticResult. Para obter mais informações, consulte Configurações de runtime.

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

Por exemplo, nessa definição de ação HTTP, o atributo runtimeConfiguration.staticResult.name faz referência a HTTP0 dentro do atributo staticResults, onde as saídas fictícias para a ação são definidas. O atributo runtimeConfiguration.staticResult.staticResultOptions especifica que a configuração de resultado estático é 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 HTTP0 dentro de staticResults. Neste exemplo, para o código de status, a saída fictícia é OK. Para valores de cabeçalho, a saída fictícia é "Content-Type": "application/JSON". Para o status da ação, a saída fictícia é Succeeded.

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

Expressions

Com JSON, é possível ter valores literais existentes no tempo de design, por exemplo:

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

Também é possível 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 de um valor de cadeia de caracteres JSON prefixando a expressão com uma arroba (@). Quando uma expressão que representa um valor JSON é avaliada, o corpo da expressão é extraído removendo o caractere @ e ela 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 cadeia 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 ({}). Esta é a sintaxe:

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

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

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

Se você tiver uma cadeia de caracteres literal iniciada pelo caractere @, prefixe esse caractere com outro @, que funcionará como caractere de escape: @@

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

Valor JSON Result
"Sophia Owen" Retornar estes caracteres: 'Sophia Owen'
"array[1]" Retornar estes caracteres: 'array[1]'
"@@" Retornar estes caracteres como uma cadeia de caracteres com um caractere: \'\@\'
" @" Retornar estes caracteres como uma cadeia de caracteres com dois caracteres: \' \@\'

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

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

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

Expressão JSON Result
"@parameters('myBirthMonth')" Retornar esta cadeia de caracteres: "January"
"@{parameters('myBirthMonth')}" Retornar esta cadeia de caracteres: "January"
"@parameters('myAge')" Retornar este número: 42
"@{parameters('myAge')}" Retornar este número como uma cadeia de caracteres: "42"
"Minha idade é @{parameters('myAge')}" Retornar esta cadeia de caracteres: My age is 42"
"@concat('Minha idade é ', string(parameters('myAge')))" Retornar esta cadeia de caracteres: My age is 42"
"Minha idade é @@{parameters('myAge')}" Retornar esta cadeia de caracteres, que inclui a expressão: "My age is @{parameters('myAge')}`

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

Captura de tela que mostra o designer de fluxo de trabalho e o editor de expressões.

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

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

Outputs

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

Note

Ao responder a solicitações de entrada da API REST de um serviço, não use outputs. Em vez disso, use o tipo de ação Response. Para obter mais informações, consulte Gatilhos 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>"
  }
}
Attribute Required Tipo Description
< nome da chave> Yes String O nome da chave do valor retornado da saída
< tipo de chave> Yes int, float, string, securestring, bool, array, objeto JSON O tipo do valor retornado da saída
< chave-valor> Yes O mesmo que <tipo de chave> O valor retornado da saída

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

Operators

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

Operator Task
' Para usar um literal de cadeia de caracteres como entrada ou em expressões e funções, encapsule 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("Hello")

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

Sim: length([1, 2, 3])
Não: length("[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 referenciar uma propriedade em um objeto, use o operador de ponto. Por exemplo, para obter a propriedade name para um objeto JSON customer:

"parameters('customer').name"
? Para fazer referência à propriedade de um objeto sem arriscar um erro de runtime ou falha no fluxo de trabalho, use o operador de ponto de interrogação (?), também conhecido como o operador de ignorar nulo, antes da propriedade. Esse operador permite que você acesse com segurança uma propriedade ou elemento de matriz quando o objeto pai ou propriedade referenciada pode conter null ou está ausente.

- Se o objeto pai que aparece antes do ? operador estiver null ou estiver perdendo a propriedade referenciada, a expressão inteira retornará null, em vez de o fluxo de trabalho falhar.

- Se o objeto ou a propriedade existir, a expressão retornará o valor da propriedade.

Por exemplo, suponha que você tenha a seguinte expressão:

triggerBody()?['ContentData']

- Se triggerBody() retornar um objeto da ContentData propriedade, você obterá o valor do objeto.

- Se triggerBody() estiver null ou não estiver faltando a ContentData propriedade, a função retornará null em vez de falhar com o erro "Não é possível processar expressões de linguagem de modelo".

O ? operador também permite encadear com segurança as propriedades de acesso e é útil nos seguintes cenários:

– Gerenciar expressões que funcionam com campos JSON opcionais.
– Manipular saídas de conector que podem omitir determinadas propriedades.
– Evite expressões frágeis na lógica condicional.

Por exemplo, para encadear o acesso à propriedade e manipular saídas nulas de um gatilho, você pode usar a seguinte expressão:

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

Functions

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