Partilhar 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 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 que é validada em relação ao 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 que instancia o fluxo de trabalho, além de uma ou mais ações que são executadas após o disparo 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 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 No 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 No 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 No 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 No As definições para um ou mais parâmetros que transmitem os valores a serem usados em tempo de execução do seu aplicativo lógico. Para obter mais informações, consulte Parâmetros.



Parâmetros máximos: 50
staticResults No As definições para um ou mais resultados estáticos retornados por ações como resultados simulados quando os resultados estáticos estão ativados 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 No 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

Gatilhos 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.

Parameters

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 fluxo de trabalho sem codificação rígida 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 fluxo de trabalho 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>"
      }
   }
},
Attribute Required Tipo Description
< nome-parâmetro> Yes String O nome do parâmetro que você deseja definir
< tipo-parâmetro> Yes 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> Yes 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 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
< parâmetro-descrição> No 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": { "<...>" }
}
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 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> Yes Varies 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 statusFailed, 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> No JSON Quaisquer valores de cabeçalho retornados pela ação
< status-código-retornado> Yes String O código de status retornado pela ação
< status da ação> Yes 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 os resultados na definição do HTTP0 dentro de 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": { "<...>" }
},

Expressions

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'
"array[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('myBirthMonth')" 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 na 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 seu fluxo de trabalho pode retornar após a execução estar concluída. 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.

Note

Ao responder a solicitações de entrada da API REST de um serviço, não use outputs. 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>"
  }
}
Attribute Required Tipo Description
< nome-chave> Yes String O nome da chave para o valor de retorno de saída
< tipo-chave> Yes int, float, string, securestring, bool, array, objeto JSON O tipo para o valor de retorno de saída
< valor-chave> Yes 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.

Operators

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.

Operator Task
' Para usar um literal de cadeia de caracteres como entrada ou em expressões e funções, utilize apenas aspas simples para envolver a cadeia de caracteres, 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 à propriedade de um objeto sem correr o risco de um erro de tempo de execução ou falha do fluxo de trabalho, use o operador de ponto de interrogação (?), também conhecido como operador null ignore, que precede a propriedade. Esse operador permite que você acesse com segurança uma propriedade ou elemento de matriz quando o objeto pai ou a propriedade referenciada pode conter null ou está faltando.

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

- Se o objeto ou propriedade existir, a expressão retorna 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 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 propriedades de acesso com segurança e é útil nos seguintes cenários:

- Gerenciar expressões que funcionam com campos JSON opcionais.
- Manipule saídas de conector que podem omitir certas propriedades.
- Evite expressões frágeis em 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>')

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.