Tworzenie pętli w celu powtarzania akcji w przepływach pracy za pomocą usługi Azure Logic Apps

Dotyczy: Azure Logic Apps (Zużycie + Standardowa)

Usługa Azure Logic Apps obejmuje następujące akcje pętli, których można użyć w przepływie pracy:

  • Aby powtórzyć co najmniej jedną akcję dla elementów w tablicy, dodaj akcję For each do przepływu pracy.

    Alternatywnie, jeśli masz wyzwalacz, który odbiera tablicę i chce uruchomić iterację dla każdego elementu tablicy, możesz debatować, że tablica z właściwością wyzwalacza SplitOn.

  • Aby powtórzyć co najmniej jedną akcję do momentu spełnienia warunku lub zmiany stanu, dodaj akcję Until do przepływu pracy.

    Przepływ pracy najpierw uruchamia wszystkie akcje wewnątrz pętli, a następnie sprawdza warunek lub stan. Jeśli warunek zostanie spełniony, pętla zostanie zatrzymana. W przeciwnym razie pętla powtarza się. Aby uzyskać domyślne i maksymalne limity liczby pętli Until , które mogą mieć przepływ pracy, zobacz Współbieżność, pętla i limity debat.

Wymagania wstępne

For each

Dla każdej akcji działa tylko na tablicach i powtarza co najmniej jedną akcję dla każdego elementu w tablicy. Poniższa lista zawiera pewne zagadnienia dotyczące tego, kiedy chcesz użyć akcji Dla każdej akcji:

  • Dla każdej akcji może przetworzyć ograniczoną liczbę elementów tablicy. Aby uzyskać ten limit, zobacz Limity współbieżności, pętli i debatowania.

  • Domyślnie cykle lub iteracje w akcji Dla każdej akcji są uruchamiane równolegle.

    To zachowanie różni się od zastosowania usługi Power Automate do każdej pętli , w której iteracje są uruchamiane pojedynczo lub sekwencyjnie. Można jednak skonfigurować sekwencyjne dla każdej iteracji. Jeśli na przykład chcesz wstrzymać następną iterację w akcji Dla każdej akcji przy użyciu akcji Opóźnienie, należy skonfigurować każdą iterację, aby była uruchamiana sekwencyjnie.

    Jako wyjątek od domyślnego zachowania, zagnieżdżone iteracji każdej akcji zawsze są uruchamiane sekwencyjnie, a nie równolegle. Aby uruchamiać operacje równolegle dla elementów w zagnieżdżonej pętli, utwórz i wywołaj podrzędny przepływ pracy aplikacji logiki.

  • Aby uzyskać przewidywalne wyniki operacji na zmiennych podczas każdej iteracji, uruchom iteracje sekwencyjnie. Na przykład gdy kończy się równoczesna iteracja, zmienna inkrementacji, zmienna dekrementacji i Dołącz do operacji zmiennych zwracają przewidywalne wyniki. Jednak podczas każdej iteracji w jednoczesnej pętli uruchomionej te operacje mogą zwracać nieprzewidywalne wyniki.

  • Akcje w pętli Dla każdej pętli używają item() funkcji do odwołowania się i przetwarzania każdego elementu w tablicy. Jeśli określisz dane, które nie są w tablicy, przepływ pracy zakończy się niepowodzeniem.

Poniższy przykładowy przepływ pracy wysyła codzienne podsumowanie kanału informacyjnego RSS witryny internetowej. Przepływ pracy używa akcji Dla każdej akcji, która wysyła wiadomość e-mail dla każdego nowego elementu.

W zależności od tego, czy masz przepływ pracy Zużycie, czy Standardowy, wykonaj odpowiednie kroki:

  1. W witrynie Azure Portal utwórz przykładowy przepływ pracy aplikacji logiki Zużycie, wykonując następujące kroki w określonej kolejności:

    • Wyzwalacz RSS o nazwie Po opublikowaniu elementu kanału informacyjnego

      Aby uzyskać więcej informacji, wykonaj następujące ogólne kroki, aby dodać wyzwalacz.

    • Akcja Outlook.com lub Office 365 Outlook o nazwie Wyślij wiadomość e-mail

      Aby uzyskać więcej informacji, wykonaj następujące ogólne kroki, aby dodać akcję.

  2. Wykonaj te same ogólne kroki , aby dodać akcję Dla każdej akcji między wyzwalaczem RSS a akcją Wyślij wiadomość e-mail w przepływie pracy.

  3. Teraz skompiluj pętlę:

    1. Wybierz wewnątrz pola Wybierz dane wyjściowe z poprzednich kroków , aby lista zawartości dynamicznej się otwierała.

    2. Na liście Dodawanie zawartości dynamicznej z sekcji Po opublikowaniu elementu kanału informacyjnego wybierz pozycję Linki kanału informacyjnego, czyli dane wyjściowe tablicy z wyzwalacza RSS.

      Uwaga

      Jeśli dane wyjściowe linków kanału informacyjnego nie są wyświetlane, obok etykiety sekcji wyzwalacza wybierz pozycję Zobacz więcej. Z listy zawartości dynamicznej można wybrać tylko dane wyjściowe z poprzednich kroków.

      Screenshot shows Azure portal, Consumption workflow designer, action named For each, and opened dynamic content list.

      Gdy wszystko będzie gotowe, wybrane dane wyjściowe tablicy będą wyświetlane w następującym przykładzie:

      Screenshot shows Consumption workflow, action named For each, and selected array output.

    3. Aby uruchomić istniejącą akcję na każdym elemencie tablicy, przeciągnij akcję Wyślij wiadomość e-mail do pętli Dla każdego .

      Teraz przepływ pracy wygląda podobnie do następującego przykładu:

      Screenshot shows Consumption workflow, action named For each, and action named Send an email, now inside For each loop.

  4. Gdy wszystko będzie gotowe, zapisz proces.

  5. Aby ręcznie przetestować przepływ pracy, na pasku narzędzi projektanta wybierz pozycję Uruchom wyzwalacz>Uruchom.

Dla każdej definicji akcji (JSON)

Jeśli pracujesz w widoku kodu, możesz zdefiniować For_each akcję w definicji JSON przepływu pracy, na przykład:

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/v2/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach"
   }
},

Dla każdego: Uruchamianie sekwencyjnie

Domyślnie iteracji w pętli For each są uruchamiane równolegle. Jednak w przypadku zagnieżdżonych pętli lub zmiennych wewnątrz pętli, w których oczekujesz przewidywalnych wyników, należy uruchomić te pętle pojedynczo lub sekwencyjnie.

  1. W prawym górnym rogu każdej akcji wybierz wielokropek(...) >Ustawienia.

  2. W obszarze Kontrolka współbieżności zmień ustawienie z Wyłączone na Włączone.

  3. Przesuń suwak Stopień równoległości do 1, a następnie wybierz pozycję Gotowe.

    Screenshot shows Consumption workflow, action named For each, concurrency control setting turned on, and degree of parallelism slider set to 1.

Dla każdej definicji akcji (JSON): uruchom sekwencyjnie

Jeśli pracujesz w widoku kodu z akcją For_each w definicji JSON przepływu pracy, możesz użyć Sequential opcji, dodając operationOptions parametr, na przykład:

"actions": {
   "For_each": {
      "actions": {
         "Send_an_email_(V2)": { }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {},
      "type": "Foreach",
      "operationOptions": "Sequential"
   }
}

Until

Akcja Until jest uruchamiana i powtarza jedną lub więcej akcji do momentu spełnienia wymaganego warunku. Jeśli warunek zostanie spełniony, pętla zostanie zatrzymana. W przeciwnym razie pętla powtarza się. Aby uzyskać domyślne i maksymalne limity liczby akcji Until lub iteracji, które mogą mieć przepływ pracy, zobacz Współbieżność, pętla i limity debatowania.

Poniższa lista zawiera kilka typowych scenariuszy, w których można użyć akcji Until :

  • Wywołaj punkt końcowy, dopóki nie otrzymasz żądanej odpowiedzi.

  • Utwórz rekord w bazie danych. Poczekaj, aż określone pole w tym rekordzie zostanie zatwierdzone. Kontynuuj przetwarzanie.

W poniższym przykładowym przepływie pracy, począwszy od godziny 8:00 każdego dnia, akcja Until zwiększa zmienną do momentu, aż wartość zmiennej będzie równa 10. Następnie przepływ pracy wysyła wiadomość e-mail, która potwierdza bieżącą wartość.

Uwaga

W tym przykładzie użyto usługi Office 365 Outlook, ale możesz użyć dowolnego dostawcy poczty e-mail obsługiwanego przez usługę Azure Logic Apps. Jeśli używasz innego konta e-mail, ogólne kroki pozostaną takie same, ale interfejs użytkownika może wyglądać nieco inaczej.

  1. W witrynie Azure Portal utwórz zasób aplikacji logiki Zużycie z pustym przepływem pracy.

  2. W projektancie wykonaj następujące ogólne kroki, aby dodać wbudowany wyzwalacz Cykl o nazwie Harmonogram do przepływu pracy.

  3. W wyzwalaczu Cykl określ interwał, częstotliwość i godzinę dnia uruchomienia wyzwalacza.

    Właściwości Wartość
    Interwał 1
    Częstotliwość Day
    W tych godzinach 8

    Aby dodać parametr At these hours , otwórz listę Dodaj nowy parametr i wybierz pozycję W tych godzinach, która jest wyświetlana dopiero po ustawieniu opcji Częstotliwość na Dzień.

    Screenshot shows Azure portal, Consumption workflow designer, and Recurrence trigger parameters with selected option for At these hours.

    Po zakończeniu wyzwalacz cyklu wygląda jak w poniższym przykładzie:

    Screenshot shows Azure portal, Consumption workflow, and Recurrence trigger parameters set up.

  4. W obszarze wyzwalacza wykonaj następujące ogólne kroki, aby dodać wbudowaną akcję Zmienne o nazwie Initialize zmiennej do przepływu pracy.

  5. W akcji Inicjowanie zmiennej podaj następujące wartości:

    Właściwości Wartość Opis
    Nazwa/nazwisko Limit Nazwa zmiennej
    Type Wartość całkowita Typ danych zmiennej
    Wartość 0 Wartość początkowa zmiennej

    Screenshot shows Azure portal, Consumption workflow, and parameters for built-in action named Initialize variable.

  6. W obszarze akcji Inicjowanie zmiennej wykonaj następujące ogólne kroki, aby dodać wbudowaną akcję Kontrolka o nazwie Until do przepływu pracy.

  7. W akcji Until podaj następujące wartości, aby skonfigurować warunek zatrzymania dla pętli.

    1. Wybierz wewnątrz lewego pola o nazwie Wybierz wartość, która automatycznie otwiera listę zawartości dynamicznej.

    2. Z listy w obszarze Zmienne wybierz zmienną o nazwie Limit.

    3. Z listy operatorów środkowych wybierz operator jest równy operatorowi.

    4. W prawym polu o nazwie Wybierz wartość wprowadź wartość 10 jako wartość porównania.

    Screenshot shows Consumption workflow and built-in action named Until with finished stop condition.

  8. W akcji Do wybierz pozycję Dodaj akcję.

  9. W polu wyszukiwania Wybierz operację wykonaj następujące ogólne kroki, aby dodać wbudowaną akcję Zmienne o nazwie Zmienna przyrostowa do akcji Until.

  10. W akcji zmiennej przyrostowej podaj następujące wartości, aby zwiększać wartość zmiennej Limit o 1:

    Właściwości Wartość
    Nazwa/nazwisko Wybierz zmienną Limit .
    Wartość 1

    Screenshot shows Consumption workflow and built-in action named Until with Name set to the Limit variable and Value set to 1.

  11. Poza akcją i w obszarze Do wykonania wykonaj następujące ogólne kroki, aby dodać akcję, która wysyła wiadomość e-mail.

    W tym przykładzie nadal jest wykonywana akcja usługi Office 365 Outlook o nazwie Wyślij wiadomość e-mail.

  12. W akcji wiadomości e-mail podaj następujące wartości:

    Właściwości Wartość Opis
    Do <address@domain poczty e-mail> Adres e-mail adresata. Na potrzeby testowania użyj własnego adresu e-mail.
    Temat Bieżąca wartość zmiennej "Limit" to:Limit Temat wiadomości e-mail. W tym przykładzie upewnij się, że dołączysz zmienną Limit , aby potwierdzić, że bieżąca wartość spełnia określony warunek:

    1. Wybierz wewnątrz pola Temat , aby wyświetlić listę zawartości dynamicznej.

    2. Na liście zawartości dynamicznej obok nagłówka sekcji Zmienne wybierz pozycję Zobacz więcej.

    3. Wybierz pozycję Limit.
    Treść <zawartość wiadomości e-mail> Zawartość wiadomości e-mail, którą chcesz wysłać. W tym przykładzie wprowadź dowolny tekst.

    Po zakończeniu akcja poczty e-mail wygląda podobnie do następującego przykładu:

    Screenshot shows Consumption workflow and action named Send an email with property values.

  13. Zapisz przepływ pracy.

Testowanie przepływu pracy

Aby ręcznie przetestować przepływ pracy aplikacji logiki, wykonaj kroki na podstawie tego, czy masz aplikację logiki Zużycie, czy Standardowa.

Na pasku narzędzi projektanta wybierz pozycję Uruchom wyzwalacz>Uruchom.

Po uruchomieniu przepływu pracy otrzymasz wiadomość e-mail z określoną zawartością:

Screenshot shows sample email received from example workflow.

Zapobieganie nieskończonym pętlom

Akcja Until zatrzymuje wykonywanie na podstawie następujących właściwości, które można wyświetlić, wybierając pozycję Zmień limity w akcji. Upewnij się, że te wartości właściwości zostały odpowiednio ustawione:

Właściwości Opis
Licznik Maksymalna liczba iteracji uruchamianych przed zakończeniem pętli.

Aby uzyskać domyślne i maksymalne limity liczby akcji Until , które mogą mieć przepływ pracy, zobacz Współbieżność, pętla i limity debat.
Przekroczenie limitu czasu Maksymalny czas, przez jaki akcja Until , w tym wszystkie iteracji, jest uruchamiana przed zakończeniem pętli. Ta wartość jest określona w formacie ISO 8601 i jest obliczana dla każdej iteracji.

Jeśli jakakolwiek akcja w pętli trwa dłużej niż limit limitu czasu, bieżąca iteracja nie zostanie zatrzymana. Jednak kolejna iteracja nie jest uruchamiana, ponieważ jest spełniony warunek limitu czasu.

Aby uzyskać domyślne i maksymalne limity dla wartości limituczasu, zobacz Współbieżność, pętla i limity debatowania.

Definicja "Until" (JSON)

Jeśli pracujesz w widoku kodu, możesz zdefiniować Until akcję w definicji JSON przepływu pracy, na przykład:

"actions": {
   "Initialize_variable": {
      // Definition for initialize variable action
   },
   "Send_an_email": {
      // Definition for send email action
   },
   "Until": {
      "type": "Until",
      "actions": {
         "Increment_variable": {
            "type": "IncrementVariable",
            "inputs": {
               "name": "Limit",
               "value": 1
            },
            "runAfter": {}
         }
      },
      "expression": "@equals(variables('Limit'), 10)",
      // To prevent endless loops, an "Until" loop 
      // includes these default limits that stop the loop. 
      "limit": { 
         "count": 60,
         "timeout": "PT1H"
      },
      "runAfter": {
         "Initialize_variable": [
            "Succeeded"
         ]
      }
   }
}

W tym przykładzie pętla Until wywołuje punkt końcowy HTTP, który tworzy zasób. Pętla zatrzymuje się, gdy treść odpowiedzi HTTP zwraca Completed stan. Aby zapobiec nieskończonym pętlom, pętla zatrzymuje się również w przypadku wystąpienia któregokolwiek z następujących warunków:

  • Pętla była uruchamiana 10 razy zgodnie z atrybutem count . Wartość domyślna to 60 razy.

  • Pętla była uruchamiana przez dwie godziny zgodnie z atrybutem timeout w formacie ISO 8601. Wartość domyślna to jedna godzina.

"actions": {
   "myUntilLoopName": {
      "type": "Until",
      "actions": {
         "Create_new_resource": {
            "type": "Http",
            "inputs": {
               "body": {
                  "resourceId": "@triggerBody()"
               },
               "url": "https://domain.com/provisionResource/create-resource",
               "body": {
                  "resourceId": "@triggerBody()"
               }
            },
            "runAfter": {},
            "type": "ApiConnection"
         }
      },
      "expression": "@equals(triggerBody(), 'Completed')",
      "limit": {
         "count": 10,
         "timeout": "PT2H"
      },
      "runAfter": {}
   }
}

Następne kroki