Creare, modificare o estendere JSON per le definizioni del flusso di lavoro di app per la logica in App per la logica di Azure

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

Quando si creano soluzioni di integrazione aziendale con flussi di lavoro automatizzati in App per la logica di Azure, le definizioni del flusso di lavoro sottostanti usano json (JavaScript Object Notation) semplice e dichiarativo insieme allo schema WDL (Workflow Definition Language) per la relativa descrizione e convalida. Questi formati semplificano la lettura e la comprensione delle definizioni del flusso di lavoro senza conoscere molto il codice. Quando si vuole automatizzare la creazione e la distribuzione delle risorse dell'app per la logica, è possibile includere le definizioni del flusso di lavoro come risorse di Azure all'interno dei modelli di Azure Resource Manager. Per creare, gestire e distribuire app per la logica, è quindi possibile usare Azure PowerShell, l'interfaccia della riga di comando di Azure o le API REST di App per la logica di Azure.

Per usare le definizioni del flusso di lavoro in JSON, aprire l'editor della visualizzazione codice quando si lavora nel portale di Azure o in Visual Studio Code. È anche possibile copiare e incollare la definizione in qualsiasi editor desiderato.

Nota

Alcune funzionalità App per la logica di Azure, ad esempio la definizione di parametri e più trigger nelle definizioni del flusso di lavoro, sono disponibili solo in JSON, non nella finestra di progettazione del flusso di lavoro. Pertanto, per queste attività, è necessario lavorare nella visualizzazione codice o in un altro editor.

Modificare JSON - Portale di Azure

  1. Nella casella di ricerca portale di Azure immettere e selezionare App per la logica. Nella pagina App per la logica selezionare la risorsa app per la logica a consumo desiderata.

  2. Nel menu dell'app per la logica, in Strumenti di sviluppo selezionare Visualizzazione codice dell'app per la logica.

    Viene aperto l'editor della visualizzazione codice e viene visualizzata la definizione del flusso di lavoro dell'app per la logica in formato JSON.

Modificare JSON - Visual Studio Code

Vedere Modificare l'app per la logica distribuita in Visual Studio Code

Modificare JSON - Visual Studio

Importante

L'estensione App per la logica di Azure Tools per Visual Studio è deprecata e non riceve più aggiornamenti. Per creare e gestire flussi di lavoro di app per la logica usando un ambiente di sviluppo locale, vedere la documentazione seguente:

Prima di poter lavorare su una definizione del flusso di lavoro a consumo in Visual Studio, assicurarsi di aver installato gli strumenti necessari. In Visual Studio è possibile aprire le app per la logica che sono state create e distribuite direttamente dal portale di Azure o come progetti di Azure Resource Manager da Visual Studio.

  1. Aprire la soluzione di Visual Studio o il progetto del gruppo di risorse di Azure contenente l'app per la logica.

  2. Trovare e aprire la definizione del flusso di lavoro, che per impostazione predefinita viene visualizzata in un modello di Resource Manager, denominato LogicApp.json.

    È possibile usare e personalizzare questo modello per la distribuzione in ambienti diversi.

  3. Aprire il menu di scelta rapida per la definizione e il modello del flusso di lavoro. Selezionare Open With Logic App Designer (Apri con Progettazione app per la logica)

    Screenshot che mostra l'app per la logica aperta in una soluzione di Visual Studio.

    Suggerimento

    Se questo comando non è disponibile in Visual Studio 2019, assicurarsi di avere gli aggiornamenti più recenti per Visual Studio.

  4. Nella parte inferiore della finestra di progettazione del flusso di lavoro scegliere Visualizzazione codice.

    Viene aperto l'editor della visualizzazione codice e viene visualizzata la definizione del flusso di lavoro in formato JSON.

  5. Per tornare alla visualizzazione della finestra di progettazione, nella parte inferiore dell'editor della visualizzazione codice scegliere Progettazione.

Parametri

Il ciclo di vita della distribuzione ha in genere ambienti diversi per lo sviluppo, il test, la gestione temporanea e la produzione. Quando si hanno valori da riutilizzare in tutta l'app per la logica senza hardcoding o che variano in base alle esigenze di distribuzione, è possibile creare un modello di Azure Resource Manager per la definizione del flusso di lavoro in modo da automatizzare anche la distribuzione di app per la logica.

Seguire questi passaggi generali per parametrizzare o definire e usare i parametri per tali valori. È quindi possibile specificare i valori in un file di parametri separato che passa tali valori al modello. In questo modo, è possibile modificare questi valori più facilmente senza dover aggiornare e ridistribuire l'app per la logica. Per informazioni dettagliate, vedere Panoramica: Automatizzare la distribuzione per le app per la logica con i modelli di Azure Resource Manager.

  1. Nel modello definire i parametri del modello e i parametri di definizione del flusso di lavoro per accettare i valori da usare rispettivamente in fase di distribuzione e runtime.

    I parametri del modello vengono definiti in una sezione dei parametri esterna alla definizione del flusso di lavoro, mentre i parametri di definizione del flusso di lavoro sono definiti in una sezione dei parametri all'interno della definizione del flusso di lavoro.

  2. Sostituire i valori hardcoded con espressioni che fanno riferimento a questi parametri. Le espressioni modello usano la sintassi diversa dalle espressioni di definizione del flusso di lavoro.

    Evitare di complicare il codice non usando espressioni modello, che vengono valutate in fase di distribuzione, all'interno di espressioni di definizione del flusso di lavoro, che vengono valutate in fase di esecuzione. Usare solo espressioni di modello esterne alla definizione del flusso di lavoro. Usare solo espressioni di definizione del flusso di lavoro all'interno della definizione del flusso di lavoro.

    Quando si specificano i valori per i parametri di definizione del flusso di lavoro, è possibile fare riferimento ai parametri del modello usando la sezione parametri esterna alla definizione del flusso di lavoro, ma ancora all'interno della definizione di risorsa per l'app per la logica. In questo modo, è possibile passare i valori dei parametri del modello nei parametri di definizione del flusso di lavoro.

  3. Archiviare i valori per i parametri in un file di parametri separato e includere il file con la distribuzione.

Elaborare le stringhe con le funzioni

App per la logica di Azure dispone di varie funzioni per l'uso delle stringhe. Si supponga, ad esempio, di voler passare un nome di società da un ordine a un altro sistema. Tuttavia, non si è certi di come gestire correttamente la codifica dei caratteri. Si potrebbe eseguire la codifica Base 64 su questa stringa, ma, per evitare caratteri di escape nell'URL, è invece possibile sostituire alcuni caratteri. Inoltre, è necessaria solo una sottostringa per il nome della società perché i primi cinque caratteri non vengono usati.

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder1",
        "companyName": "NAME=Contoso"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "request": {
      "type": "Request",
      "kind": "Http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
      }
    }
  },
  "outputs": {}
}

I passaggi seguenti descrivono come questa stringa viene elaborata nell'esempio, a partire dall'interno verso l'esterno:

"uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"

  1. Ottenere per length() il nome della società, in modo da ottenere il numero totale di caratteri.

  2. Per ottenere una stringa più breve, sottrarre 5.

  3. Ottenere ora substring(). Iniziare dall'indice 5 e procedere alla parte rimanente della stringa.

  4. Convertire la sottostringa in una stringa base64().

  5. replace() sostituisce ora tutti i caratteri + con caratteri -.

  6. replace() sostituisce infine tutti i caratteri / con caratteri _.

Eseguire il mapping degli elementi di elenco ai valori delle proprietà, quindi usare le mappe come parametri

Per ottenere risultati diversi in base al valore di una proprietà, è possibile creare una mappa che corrisponda a ogni valore di proprietà a un risultato, quindi usare tale mappa come parametro.

Questo flusso di lavoro, ad esempio, definisce alcune categorie come parametri e una mappa che associa tali categorie a un URL specifico. Il flusso di lavoro ottiene prima di tutto un elenco degli articoli, quindi usa la mappa per trovare l'URL corrispondente alla categoria per ogni articolo.

  • La intersection() funzione controlla se la categoria corrisponde a una categoria definita nota.

  • Dopo che l'esempio ottiene una categoria corrispondente, l'esempio esegue il pull dell'elemento dalla mappa usando parentesi quadre: parameters[...]

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "specialCategories": {
      "defaultValue": [
        "science",
        "google",
        "microsoft",
        "robots",
        "NSA"
      ],
      "type": "Array"
    },
    "destinationMap": {
      "defaultValue": {
        "science": "https://www.nasa.gov",
        "microsoft": "https://www.microsoft.com/en-us/default.aspx",
        "google": "https://www.google.com",
        "robots": "https://en.wikipedia.org/wiki/Robot",
        "NSA": "https://www.nsa.gov/"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "Request",
      "kind": "http"
    }
  },
  "actions": {
    "getArticles": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=https://feeds.wired.com/wired/index"
      }
    },
    "forEachArticle": {
      "type": "foreach",
      "foreach": "@body('getArticles').responseData.feed.entries",
      "actions": {
        "ifGreater": {
          "type": "if",
          "expression": "@greater(length(intersection(item().categories, parameters('specialCategories'))), 0)",
          "actions": {
            "getSpecialPage": {
              "type": "Http",
              "inputs": {
                "method": "GET",
                "uri": "@parameters('destinationMap')[first(intersection(item().categories, parameters('specialCategories')))]"
              }
            }
          }
        }
      },
      "runAfter": {
        "getArticles": [
          "Succeeded"
        ]
      }
    }
  }
}

Ottenere i dati con le funzioni di data

Per ottenere i dati da un'origine dati che non supporta i trigger in modo nativo, è possibile usare le funzioni di data per lavorare invece con ore e date. Questa espressione, ad esempio, trova quanto tempo richiedono i passaggi di questo flusso di lavoro, procedendo dall'interno verso l'esterno:

"expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
  1. Dall'azione order estrarre startTime.

  2. Ottenere l'ora corrente con la utcNow() funzione .

  3. Sottrarre un secondo: addSeconds(..., -1)

    È possibile usare altre unità di tempo, minutes ad esempio o hours.

  4. È ora possibile confrontare questi due valori.

    Se il primo valore è minore del secondo valore, è trascorso più di un secondo dal momento in cui è stato inserito l'ordine.

Per formattare le date, è possibile usare formattatori di stringa. Per ottenere la specifica RFC1123, ad esempio, usare utcnow('r'). Altre informazioni sulla formattazione delle date.

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder-id"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "request",
      "kind": "http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{parameters('order').id}"
      }
    },
    "ifTimingWarning": {
      "type": "If",
      "expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
      "actions": {
        "timingWarning": {
          "type": "Http",
          "inputs": {
            "method": "GET",
            "uri": "https://www.example.com/?recordLongOrderTime=@{parameters('order').id}&currentTime=@{utcNow('r')}"
          }
        }
      },
      "runAfter": {
        "order": [
          "Succeeded"
        ]
      }
    }
  },
  "outputs": {}
}