Udostępnij za pośrednictwem


Uruchamianie akcji na podstawie stanu grupy przy użyciu zakresów w usłudze Azure Logic Apps

Dotyczy: Azure Logic Apps (Zużycie)

Aby uruchomić akcje dopiero po pomyślnym lub niepomyślnie innym grupie akcji, pogrupuj te akcje w zakresie. Ta struktura jest przydatna, gdy chcesz organizować akcje jako grupę logiczną, oceniać stan tej grupy i wykonywać akcje oparte na stanie zakresu. Po zakończeniu działania wszystkich akcji w zakresie zakres jest również pobierany własny stan. Na przykład możesz użyć zakresów, gdy chcesz zaimplementować obsługę wyjątków i błędów.

Aby sprawdzić stan zakresu, możesz użyć tych samych kryteriów, które są używane do określenia stanu uruchamiania aplikacji logiki, takich jak Powodzenie, Niepowodzenie, Anulowane itd. Domyślnie po pomyślnym pomyślnym zakończeniu wszystkich akcji zakresu stan zakresu jest oznaczony jako Powodzenie. Jeśli jednak dowolna akcja w zakresie zakończy się niepowodzeniem lub zostanie anulowana, stan zakresu zostanie oznaczony jako Niepowodzenie. Aby uzyskać informacje o limitach w zakresach, zobacz Limity i konfiguracja.

Na przykład poniżej przedstawiono aplikację logiki wysokiego poziomu, która używa zakresu do uruchamiania określonych akcji i warunku w celu sprawdzenia stanu zakresu. Jeśli jakiekolwiek akcje w zakresie zakończą się niepowodzeniem lub zakończą się nieoczekiwanie, zakres jest oznaczony odpowiednio jako Niepowodzenie lub Przerwane , a aplikacja logiki wysyła komunikat "Zakres nie powiodło się". Jeśli wszystkie akcje o określonym zakresie powiedzie się, aplikacja logiki wyśle komunikat "Zakres zakończył się pomyślnie".

Diagram przedstawia przepływ zakresu aplikacji logiki z przykładami

Wymagania wstępne

Aby postępować zgodnie z przykładem w tym artykule, potrzebne są następujące elementy:

Tworzenie przykładowej aplikacji logiki

Najpierw utwórz tę przykładową aplikację logiki, aby później dodać zakres:

Tworzenie przykładowej aplikacji logiki

  • Harmonogram — wyzwalacz cyklu , który sprawdza usługę Mapy Bing w określonym przedziale czasu
  • Mapy Bing — akcja Pobierz trasę , która sprawdza czas podróży między dwiema lokalizacjami
  • Akcja warunku sprawdzająca, czy czas podróży przekracza określony czas podróży
  • Akcja, która wysyła wiadomość e-mail o bieżącym czasie podróży przekracza określony czas

Aplikację logiki można zapisywać w dowolnym momencie, aby często zapisywać swoją pracę.

  1. Zaloguj się do witryny Azure Portal, jeśli jeszcze tego nie zrobiono. Tworzenia pustej aplikacji logiki.

  2. Dodaj wyzwalacz Harmonogram — cykl z następującymi ustawieniami: Interwał = "1" i Częstotliwość = "Minuta"

    Konfigurowanie wyzwalacza

    Napiwek

    Aby wizualnie uprościć widok i ukryć szczegóły każdej akcji w projektancie, zwiń kształt każdej akcji podczas wykonywania tych kroków.

  3. Dodaj akcję Mapy Bing — Pobierz trasę.

    1. Jeśli nie masz jeszcze połączenia usługi Mapy Bing, zostanie wyświetlony monit o utworzenie połączenia.

      Ustawienie Wartość Opis
      Nazwa połączenia BingMapsConnection Podaj nazwę połączenia.
      Klucz API <klucz_usługi_Mapy_Bing> Wprowadź uzyskany wcześniej klucz usługi Mapy Bing.
    2. Skonfiguruj akcję Pobierz trasę , jak pokazano w poniższej tabeli:

      Konfigurowanie akcji

      Aby uzyskać więcej informacji na temat tych parametrów, zobacz Calculate route (Obliczanie trasy).

      Ustawienie Wartość Opis
      Punkt nawigacyjny 1 <start> Wprowadź źródło trasy.
      Punkt nawigacyjny 2 <koniec> Wprowadź miejsce docelowe trasy.
      Uniknięcie Brak Wprowadź elementy, aby uniknąć na trasie, takich jak autostrady, opłaty i tak dalej. Aby uzyskać informacje o możliwych wartościach, zobacz Obliczanie trasy.
      Optymalizacja timeWithTraffic Wybierz parametr, aby zoptymalizować trasę, taką jak odległość, czas z bieżącymi informacjami o ruchu itd. W tym przykładzie użyto tej wartości: "timeWithTraffic"
      Jednostka odległości <według_preferencji> Wprowadź jednostkę odległości, aby obliczyć trasę. W tym przykładzie użyto tej wartości: "Mile"
      Tryb podróży Jazda samochodem Wprowadź tryb podróży dla trasy. W tym przykładzie użyto tej wartości "Jazda"
      Transport publiczny — data i godzina Brak Dotyczy tylko trybu tranzytowego.
      Typ daty tranzytowej Brak Dotyczy tylko trybu tranzytowego.
  4. Dodaj warunek sprawdzający, czy bieżący czas podróży z ruchem przekracza określony czas. W tym przykładzie wykonaj następujące kroki:

    1. Zmień nazwę warunku na następujący opis: Jeśli czas ruchu jest większy niż określony czas

    2. W lewej kolumnie wybierz wewnątrz pola Wybierz wartość , aby wyświetlić listę zawartości dynamicznej. Z tej listy wybierz pole Travel Duration Traffic (Czas trwania podróży), czyli w sekundach.

      Kompilowanie warunku

    3. W środkowym polu wybierz ten operator: jest większy niż

    4. W prawej kolumnie wprowadź tę wartość porównania w sekundach i równoważną 10 minutom: 600

      Gdy wszystko będzie gotowe, warunek będzie wyglądać następująco:

      Gotowy warunek

  5. W gałęzi True dodaj akcję "wyślij wiadomość e-mail" dla dostawcy poczty e-mail. Skonfiguruj tę akcję, wykonując czynności opisane na poniższej ilustracji:

    Dodawanie akcji

    1. W polu Do wprowadź swój adres e-mail na potrzeby testowania.

    2. W polu Temat wprowadź następujący tekst:

    Time to leave: Traffic more than 10 minutes

    1. W polu Treść wprowadź ten tekst z spacją końcową:

    Travel time:

    Gdy kursor pojawi się w polu Treść , lista zawartości dynamicznej pozostaje otwarta, dzięki czemu można wybrać wszystkie parametry, które są dostępne w tym momencie.

    1. Na liście zawartości dynamicznej wybierz pozycję Wyrażenie.

    2. Znajdź i wybierz funkcję div(). Umieść kursor w nawiasach funkcji.

    3. Gdy kursor znajduje się wewnątrz nawiasów funkcji, wybierz pozycję Zawartość dynamiczna, aby wyświetlić listę zawartości dynamicznej.

    4. W sekcji Pobieranie trasy wybierz pole Ruch w czasie trwania ruchu.

      Wybierz pozycję

    5. Gdy pole zostanie rozpoznane jako format JSON, dodaj przecinek (,), a następnie liczbę60, aby przekonwertować wartość w obszarze Ruch w czasie trwania ruchu z sekund na minuty.

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

      Wyrażenie wygląda teraz następująco:

      Wyrażenie zakończenia

    6. Po zakończeniu wybierz OK.

    1. Po rozwiązaniu wyrażenia dodaj ten tekst z spacją wiodącą: minutes

      Pole Treść wygląda teraz następująco:

      Zakończono pole

  6. Zapisz aplikację logiki.

Następnie dodaj zakres, aby można było grupować określone akcje i oceniać ich stan.

Dodaj zakres

  1. Jeśli jeszcze tego nie zrobiono, otwórz aplikację logiki w projektancie przepływu pracy.

  2. Dodaj zakres w żądanej lokalizacji przepływu pracy. Aby na przykład dodać zakres między istniejącymi krokami w przepływie pracy aplikacji logiki, wykonaj następujące kroki:

    1. Przenieś wskaźnik na strzałkę, w której chcesz dodać zakres. Wybierz znak plus (+) >Dodaj akcję.

      Dodaj zakres

    2. W polu wyszukiwania wprowadź ciąg "scope" jako filtr. Wybierz akcję Zakres.

Dodawanie kroków do zakresu

  1. Teraz dodaj kroki lub przeciągnij istniejące kroki, które chcesz uruchomić w zakresie. W tym przykładzie przeciągnij te akcje do zakresu:

    • Uzyskiwanie trasy
    • Jeśli czas ruchu jest większy niż określony czas, który zawiera zarówno gałęzie true, jak i false

    Twoja aplikacja logiki wygląda teraz następująco:

    Dodano zakres

  2. W obszarze zakresu dodaj warunek sprawdzający stan zakresu. Zmień nazwę warunku na następujący opis: Jeśli zakres nie powiódł się

    Dodawanie warunku w celu sprawdzenia stanu zakresu

  3. W warunku dodaj te wyrażenia, które sprawdzają, czy stan zakresu jest równy "Niepowodzenie" lub "Przerwane".

    1. Aby dodać kolejny wiersz, wybierz pozycję Dodaj.

    2. W każdym wierszu zaznacz pole po lewej stronie, aby wyświetlić listę zawartości dynamicznej. Z listy zawartości dynamicznej wybierz pozycję Wyrażenie. W polu edycji wprowadź to wyrażenie, a następnie wybierz przycisk OK:

      action('Scope')

      Zrzut ekranu przedstawiający pole

    3. W przypadku obu wierszy wybierz wartość jest równa operatorowi.

    4. W przypadku wartości porównania w pierwszym wierszu wprowadź wartość Failed. W drugim wierszu wprowadź .Aborted

      Gdy wszystko będzie gotowe, warunek będzie wyglądać następująco:

      Dodawanie wyrażenia sprawdzającego stan zakresu

      Teraz ustaw właściwość warunku runAfter , aby warunek sprawdzał stan zakresu i uruchamia dopasowaną akcję zdefiniowaną w kolejnych krokach.

    5. W warunku Jeśli zakres nie powiódł się, wybierz przycisk wielokropka (...), a następnie wybierz pozycję Konfiguruj uruchom po.

      Konfigurowanie właściwości RunAfter

    6. Wybierz wszystkie te stany zakresu: powodzenie, niepowodzenie, pominięto i przekroczono limit czasu

      Wybieranie stanów zakresu

    7. Po zakończeniu wybierz pozycję Gotowe. Warunek przedstawia teraz ikonę "informacji".

  4. W gałęziach Prawda i Fałsz dodaj akcje, które chcesz wykonać na podstawie każdego stanu zakresu, na przykład wyślij wiadomość e-mail lub wiadomość.

    Dodawanie akcji do wykonania na podstawie stanu zakresu

  5. Zapisz aplikację logiki.

Ukończona aplikacja logiki wygląda teraz następująco:

Zakończono aplikację logiki z zakresem

Testowanie pracy

Na pasku narzędzi projektanta wybierz pozycję Uruchom.> Jeśli wszystkie akcje o określonym zakresie powiedzie się, zostanie wyświetlony komunikat "Zakres zakończył się pomyślnie". Jeśli jakiekolwiek akcje o określonym zakresie nie powiedzie się, zostanie wyświetlony komunikat "Zakres zakończył się niepowodzeniem".

Definicja JSON

Jeśli pracujesz w widoku kodu, możesz zdefiniować strukturę zakresu w definicji JSON aplikacji logiki. Na przykład poniżej przedstawiono definicję JSON wyzwalacza i akcji w poprzedniej aplikacji logiki:

"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: @{action('Scope')}",
            "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: @{action('Scope')}",
              "Subject": "Scope succeeded",
              "To": "<your-email@domain.com>"
            },
            "host": {
              "connection": {
               "name": "@parameters('$connections')['outlook']['connectionId']"
              }
            },
            "method": "post",
            "path": "/Mail"
          },
          "runAfter": {}
        }
      }
    },
    "expression": {
      "or": [ 
         {
            "equals": [ 
              "@action('Scope')",
              "Failed"
            ]
         },
         {
            "equals": [
               "@action('Scope')",
               "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": {}
  }
},

Następne kroki