Eseguire azioni in base allo stato del gruppo usando ambiti nelle App per la logica di Azure

Si applica a: App per la logica di Azure (consumo)

Per eseguire azioni solo dopo che un altro gruppo di azioni ha avuto esito positivo o negativo, raggruppare tali azioni in un ambito. Questa struttura è utile quando si vuole organizzare le azioni come gruppo logico, valutare lo stato del gruppo ed eseguire le azioni in base allo stato dell'ambito. Al termine dell'esecuzione di tutte le azioni in un ambito, l'ambito ottiene anche il proprio stato. È ad esempio possibile usare gli ambiti quando si vuole implementare la gestione degli errori e delle eccezioni.

Per controllare lo stato di un ambito, è possibile usare gli stessi criteri usati per determinare lo stato di esecuzione di un'app per la logica, ad esempio Succeeded, Failed, Cancelled e così via. Per impostazione predefinita, quando tutte le azioni dell'ambito hanno esito positivo, lo stato dell'ambito viene contrassegnato come Succeeded. Tuttavia, quando un'azione nell'ambito ha esito negativo o viene annullata, lo stato dell'ambito è contrassegnato come Non riuscito. Per i limiti degli ambiti, vedere Limiti e configurazione.

La seguente, ad esempio è un'app per la logica generale che usa un ambito per eseguire azioni specifiche e una condizione per controllare lo stato dell'ambito. Se le azioni nell'ambito hanno esito negativo o terminano in modo imprevisto, l'ambito viene contrassegnato rispettivamente Failed o Aborted e l'app per la logica invia un messaggio "Ambito non riuscito". Se tutte le azioni nell'ambito hanno esito positivo, l'app per la logica invia un messaggio "Scope succeeded".

Diagram shows the logic app scope flow with examples of

Prerequisiti

Per eseguire l'esempio in questo articolo, sono necessari questi elementi:

  • Una sottoscrizione di Azure. Se non si ha una sottoscrizione, è possibile iscriversi per creare un account Azure gratuito.

  • Un account di posta elettronica di un provider di posta elettronica supportato da App per la logica. In questo esempio viene usato Outlook.com. Se si usa un provider diverso, il flusso generale rimane invariato, ma l'interfaccia utente ha un aspetto diverso.

  • Una chiave di Bing Maps. Per ottenere questa chiave, vedere Get a Bing Maps key (Ottenere una chiave di Bing Maps).

  • Conoscenza di base delle app per la logica

Creare un'app per la logica di esempio

Creare prima di tutto questa app per la logica di esempio per poter aggiungere un ambito in un secondo momento:

Create sample logic app

  • Un trigger Pianificazione - Ricorrenza che controlla il servizio Bing Maps in base all'intervallo specificato
  • Un'azione Bing Maps - Get route (Bing Maps - Ottieni itinerario) che controlla il tempo di viaggio tra due località
  • Azione condizione che controlla se il tempo di viaggio supera il tempo di viaggio specificato
  • Un'azione che invia un messaggio di posta elettronica per informare che il tempo di viaggio corrente supera il tempo specificato

È possibile salvare l'app per la logica in qualsiasi momento, quindi salvare spesso il lavoro.

  1. Accedere al portale di Azure, se questa operazione non è già stata eseguita. Creare un'app per la logica vuota.

  2. Aggiungere il trigger Pianificazione - Ricorrenza con queste impostazioni: Intervallo = "1" e Frequenza = "Minuto"

    Set up

    Suggerimento

    Per semplificare la visualizzazione e nascondere i dettagli di ogni azione nella finestra di progettazione, comprimere la forma di ogni azione mentre si procede con i passaggi.

  3. Aggiungere l'azione Bing Maps - Get route (Bing Maps - Ottieni itinerario).

    1. Se non si ha già una connessione esistente a Bing Maps, viene chiesto di crearne una.

      Impostazione valore Descrizione
      Nome connessione BingMapsConnection Specificare un nome per la connessione.
      Chiave API <chiave-Bing-Maps> Immettere la chiave di Bing Maps ricevuta in precedenza.
    2. Configurare l'azione Get route (Ottieni itinerario), come illustrato nella tabella sotto questa immagine:

      Set up

      Per altre informazioni su questi parametri, vedere Calculate a route (Calcolare un itinerario).

      Impostazione valore Descrizione
      Punto di tragitto 1 <start> Immettere l'origine dell'itinerario.
      Punto di tragitto 2 <end> Immettere la destinazione dell'itinerario.
      Evitare None Immettere gli elementi da evitare lungo l'itinerario, ad esempio autostrade, strade a pedaggio e così via. Per i possibili valori, vedere Calculate a route (Calcolare un itinerario).
      Optimize (Ottimizza) timeWithTraffic Selezionare un parametro per ottimizzare l'itinerario, ad esempio distanza, tempo con le informazioni sul traffico corrente e così via. Questo esempio usa il valore "timeWithTraffic"
      Unità distanza <preferenza> Immettere l'unità di distanza per calcolare l'itinerario. Questo esempio usa il valore "Mile"
      Travel mode (Modalità di viaggio) Driving (Guida) Immettere la modalità di viaggio per l'itinerario. Questo esempio usa il valore "Driving"
      Transit Date-Time (Data e ora transito) None Si applica solo alla modalità di transito.
      Transit Date-Time Type (Tipo di data e ora transito) None Si applica solo alla modalità di transito.
  4. Aggiungere una condizione per verificare se il tempo di viaggio corrente con il traffico è superiore al tempo specificato. Per questo esempio, seguire questa procedura:

    1. Rinominare la condizione con questa descrizione: If traffic time is more than specified time (Se il tempo con il traffico è superiore al tempo specificato).

    2. Nella colonna più a sinistra fare clic all'interno della casella Scegliere un valore in modo che venga visualizzato l'elenco di contenuto dinamico. In questo elenco selezionare il campo Travel Duration Traffic (Durata viaggio con traffico), espresso in secondi.

      Build condition

    3. Nella casella centrale selezionare l'operatore: è maggiore di.

    4. Nella colonna più a destra immettere questo valore di confronto, espresso in secondi e equivalente a 10 minuti: 600

      Al termine, la condizione avrà un aspetto simile a quello in questo esempio:

      Finished condition

  5. Nel ramo È true aggiungere un'azione "invia messaggio di posta elettronica" per il provider di posta elettronica. Configurare questa azione seguendo i passaggi riportati sotto questa immagine:

    Add

    1. Nel campo A immettere l'indirizzo di posta elettronica a scopo di test.

    2. Nel campo Oggetto immettere il testo seguente:

    Time to leave: Traffic more than 10 minutes

    1. Nel campo Corpo immettere il testo seguente con uno spazio finale:

    Travel time:

    Mentre il cursore è visualizzato nel campo Corpo, l'elenco di contenuto dinamico rimane aperto per consentire di selezionare i parametri disponibili.

    1. Nell'elenco di contenuto dinamico scegliere Espressione.

    2. Trovare e selezionare la funzione div(). Posizionare il cursore tra le parentesi della funzione.

    3. Mentre il cursore è tra le parentesi della funzione, scegliere Contenuto dinamico in modo che venga visualizzato l'elenco di contenuto dinamico.

    4. Nella sezione Get route (Ottieni itinerario) selezionare il campo Travel Duration Traffic (Durata viaggio con traffico).

      Select

    5. Dopo che il campo viene risolto nel formato JSON, aggiungere una virgola (,) seguita dal numero 60 per poter convertire il valore di Traffic Duration Traffic (Durata viaggio con traffico) da secondi a minuti.

      div(body('Get_route')?['travelDurationTraffic'],60)
      

      L'espressione dovrebbe avere ora un aspetto simile all'esempio seguente:

      Finish expression

    6. Al termine dell'operazione, scegliere OK.

    1. Dopo la risoluzione dell'espressione, aggiungere il testo seguente con uno spazio iniziale: minutes

      Il campo Corpo dovrebbe avere ora un aspetto simile all'esempio seguente:

      Finished

  6. Salvare l'app per la logica.

Aggiungere successivamente un ambito per poter raggruppare azioni specifiche e valutarne lo stato.

Aggiungere un ambito

  1. Se non è già stato fatto, aprire l'app per la logica in Progettazione app per la logica.

  2. Aggiungere un ambito al percorso del flusso di lavoro da usare. Ad esempio, per aggiungere un ambito tra i passaggi esistenti nel flusso di lavoro dell'app per la logica, seguire questa procedura:

    1. Spostare il puntatore sulla freccia dove si vuole aggiungere l'ambito. Scegliere il segno più (+) >Aggiungi un'azione.

      Add a scope

    2. Nella casella di ricerca immettere "ambito" come filtro. Selezionare l'azione Ambito.

Aggiungere passaggi all'ambito

  1. Aggiungere ora i passaggi o trascinare i passaggi esistenti che si vuole eseguire nell'ambito. Per questo esempio, trascinare le azioni seguenti nell'ambito:

    • Get route (Ottieni itinerario)
    • If traffic time is more than specified time (Se il tempo con il traffico è superiore al tempo specificato), che include entrambi i rami true e false

    L'app per la logica dovrebbe avere ora un aspetto simile all'esempio seguente:

    Scope added

  2. Sotto l'ambito aggiungere una condizione che controlla lo stato dell'ambito. Rinominare la condizione con questa descrizione: If scope failed (Se l'ambito ha avuto esito negativo)

    Add condition to check scope status

  3. Nella condizione aggiungere queste espressioni che consentono di controllare se lo stato dell'ambito è uguale a "Failed" o "Aborted".

    1. Per aggiungere un'altra riga, scegliere Aggiungi.

    2. In ogni riga fare clic all'interno della casella a sinistra in modo che venga visualizzato l'elenco di contenuto dinamico. Nell'elenco di contenuto dinamico scegliere Espressione. Nella casella di modifica immettere questa espressione e quindi scegliere OK:

      result('Scope')[0]['status']

      Screenshot that shows the

    3. Per entrambe le righe, selezionare è uguale a come operatore.

    4. Per i valori di confronto, nella prima riga immettere Failed. Nella seconda riga immettere Aborted.

      Al termine, la condizione avrà un aspetto simile a quello in questo esempio:

      Add expression that checks the scope's status

      A questo punto, impostare la proprietà runAfter della condizione in modo che la condizione controlli lo stato dell'ambito ed esegua l'azione corrispondente definita nei passaggi successivi.

    5. Nella condizione If scope failed (Se l'ambito ha avuto esito negativo) scegliere il pulsante con i puntini di sospensione (...) e quindi scegliere Configura azione Run after.

      Configure runAfter property

    6. Selezionare tutti questi stati dell'ambito: is successful (riuscito), has failed (non riuscito), is skipped (ignorato) e has timed out (scaduto).

      Select scope statuses

    7. Al termine, scegliere Fine. La condizione visualizza ora un'icona "informazioni".

  4. Nei rami È true ed È false aggiungere le azioni che si vuole eseguire in base a ogni stato dell'ambito, ad esempio inviare un messaggio di posta elettronica o un messaggio.

    Add actions to take based on scope status

  5. Salvare l'app per la logica.

L'app per la logica completata dovrebbe avere ora un aspetto simile all'esempio seguente:

Finished logic app with scope

Testare il lavoro

Nella barra degli strumenti della finestra di progettazione scegliere Esegui. Se tutte le azioni nell'ambito hanno esito positivo, viene visualizzato un messaggio "Scope succeeded". Se nessuna azione nell'ambito hanno esito positivo, viene visualizzato un messaggio "Scope failed".

Definizione JSON

Se si usa la visualizzazione Codice, è invece possibile definire una struttura di ambito nella definizione JSON dell'app per la logica. La seguente, ad esempio, è la definizione JSON per il trigger e le azioni dell'app per la logica precedente:

"triggers": {
  "Recurrence": {
    "type": "Recurrence",
    "recurrence": {
       "frequency": "Minute",
       "interval": 1
    }
  }
}
"actions": {
  "If_scope_failed": {
    "type": "If",
    "actions": {
      "Scope_failed": {
        "type": "ApiConnection",
        "inputs": {
          "body": {
            "Body": "Scope failed. Scope status: @{result('Scope')[0]['status']}",
            "Subject": "Scope failed",
            "To": "<your-email@domain.com>"
          },
          "host": {
            "connection": {
              "name": "@parameters('$connections')['outlook']['connectionId']"
            }
          },
          "method": "post",
          "path": "/Mail"
        },
        "runAfter": {}
      }
    },
    "else": {
      "actions": {
        "Scope_succeded": {
          "type": "ApiConnection",
          "inputs": {
            "body": {
              "Body": "Scope succeeded. Scope status: @{result('Scope')[0]['status']}",
              "Subject": "Scope succeeded",
              "To": "<your-email@domain.com>"
            },
            "host": {
              "connection": {
               "name": "@parameters('$connections')['outlook']['connectionId']"
              }
            },
            "method": "post",
            "path": "/Mail"
          },
          "runAfter": {}
        }
      }
    },
    "expression": {
      "or": [ 
         {
            "equals": [ 
              "@result('Scope')[0]['status']", 
              "Failed"
            ]
         },
         {
            "equals": [
               "@result('Scope')[0]['status']", 
               "Aborted"
            ]
         } 
      ]
    },
    "runAfter": {
      "Scope": [
        "Failed",
        "Skipped",
        "Succeeded",
        "TimedOut"
      ]
    }
  },
  "Scope": {
    "type": "Scope",
    "actions": {
      "Get_route": {
        "type": "ApiConnection",
        "inputs": {
          "host": {
            "connection": {
              "name": "@parameters('$connections')['bingmaps']['connectionId']"
            }
          },
          "method": "get",
          "path": "/REST/V1/Routes/Driving",
          "queries": {
            "distanceUnit": "Mile",
            "optimize": "timeWithTraffic",
            "travelMode": "Driving",
            "wp.0": "<start>",
            "wp.1": "<end>"
          }
        },
        "runAfter": {}
      },
      "If_traffic_time_is_more_than_specified_time": {
        "type": "If",
        "actions": {
          "Send_mail_when_traffic_exceeds_10_minutes": {
            "type": "ApiConnection",
            "inputs": {
              "body": {
                 "Body": "Travel time:@{div(body('Get_route')?['travelDurationTraffic'],60)} minutes",
                 "Subject": "Time to leave: Traffic more than 10 minutes",
                 "To": "<your-email@domain.com>"
              },
              "host": {
                "connection": {
                   "name": "@parameters('$connections')['outlook']['connectionId']"
                }
              },
              "method": "post",
              "path": "/Mail"
            },
            "runAfter": {}
          }
        },
        "expression": {
          "and" : [
            {
               "greater": [ 
                  "@body('Get_route')?['travelDurationTraffic']", 
                  600
               ]
            }
          ]
        },
        "runAfter": {
          "Get_route": [
            "Succeeded"
          ]
        }
      }
    },
    "runAfter": {}
  }
},

Ottenere supporto

Passaggi successivi