Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Azure Logic Apps (Consumption + Standard)
Aby uruchamiać te same akcje dla każdego elementu w tablicy lub kolekcji albo powtarzać akcje, dopóki coś nie zakończy się w przepływie pracy aplikacji logiki, dodaj do przepływu pracy odpowiednio akcję Sterowanie o nazwie For each lub Until:
| Action | Task |
|---|---|
| Dla każdego | Powtórz jedno lub więcej działań na elementach tablicy lub kolekcji. Dotyczy tylko tablic i kolekcji. Wskazówka: Jeśli masz wyzwalacz, który obsługuje tablice, i chcesz uruchomić instancję przepływu pracy dla każdego elementu tablicy, ustaw właściwość Split on wyzwalacza tak, aby rozdzielić tablicę. Informacje można znaleźć w artykule Limity współbieżności, pętlowania i debatowania. |
| Until | Powtarzaj jedną lub więcej czynności, aż spełniony zostanie warunek lub zmieni się konkretny stan. Twój przepływ pracy najpierw wykonuje wszystkie działania w 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ę. Informacje można znaleźć w artykule Limity współbieżności, pętlowania i debatowania. |
Ten przewodnik pokazuje, jak dodać pętlę do swojego workflow, uruchamiać iteracje sekwencyjnie i zapobiegać niekończącym się pętlom. Przejdź do zadania, które chcesz:
- Dodaj do swojego workflow pętlę For each
- Uruchom dla każdej iteracji sekwencyjnie
- Dodaj pętlę Until do swojego workflow
- Zapobieganie niekończącym się pętlom
Uwaga
W dokumentacji Power Automate zobacz Użyj pętli.
Wymagania wstępne
Konto i subskrypcja platformy Azure. Uzyskaj bezpłatne konto platformy Azure.
Przepływ pracy aplikacji logiki, w którym chcesz uruchomić pętlę, łącznie z wyzwalaczem, który uruchamia przepływ pracy.
Aby dodać akcję pętli, przepływ pracy musi zaczynać się od elementu wyzwalającego jako pierwszego kroku.
Ten przewodnik korzysta z portalu Azure, ale możesz też użyć Visual Studio Code oraz odpowiadającego mu rozszerzenia Azure Logic Apps, aby budować workflowy aplikacji logic:
- Tworzenie przepływów pracy Consumption w Visual Studio Code
- Tworzenie standardowych workflow w Visual Studio Code
Dla każdej pętli rozważania
Akcja For each powtarza co najmniej jedną akcję dla każdego elementu tablicy lub kolekcji.
Akcja For each działa wyłącznie na tablicach i kolekcjach.
Dla każdej akcji przetwarza ograniczoną liczbę elementów tablicy.
Domyślnie dla każdej akcji iteracje działają równolegle. Kluczowe zachowania do poznania:
Behavior Co to znaczy Domyślnie równoległy W przeciwieństwie do pętli Apply to each w Power Automate, iteracje nie są wykonywane pojedynczo.
Jeśli Twój scenariusz wymaga przetwarzania sekwencyjnego, zobacz Uruchamianie iteracji For each sekwencyjnie. Na przykład aby wstrzymać następną iterację w akcji For each przy użyciu akcji Delay action, skonfiguruj każdą iterację tak, aby była uruchamiana sekwencyjnie.Pętle zagnieżdżone Zagnieżdżona akcja Dla każdego jest zawsze wykonywana sekwencyjnie. Aby uruchomić równolegle, utwórz i wywołaj podrzędny workflow. Variables Zmienna inkrementowa, zmienna dekrementowa oraz dołączanie do zmiennej mogą dawać nieprzewidywalne wyniki w pętlach równoległych. Aby upewnić się, że zmienne w pętli generują przewidywalne wyniki z operacji na tych zmiennych podczas każdej iteracji, uruchom pętlę sekwencyjnie. Akcje w pętli For each używają funkcji
item()do odwoływania się do każdego elementu tablicy i przetwarzania go. Jeśli określisz dane, które nie są w tablicy, przepływ pracy zakończy się niepowodzeniem.
Dodaj do swojego workflow pętlę For each
Poniższy przykładowy przepływ pracy wysyła codzienne podsumowanie kanału informacyjnego RSS witryny internetowej. Przepływ pracy wykorzystuje akcję For each, która wysyła wiadomość e-mail dla każdego nowego elementu.
W witrynie Azure Portal utwórz przepływ pracy aplikacji logiki, wykonując następujące kroki w określonej kolejności:
Wyzwalacz RSS o nazwie Po opublikowaniu elementu kanału
Wykonaj następujące ogólne kroki, aby dodać wyzwalacz do przepływu pracy aplikacji logicznej Consumption lub Standard.
Akcja Outlook.com lub Office 365 Outlook o nazwie Wyślij wiadomość e-mail
Wykonaj następujące ogólne czynności, aby dodać akcję do przepływu pracy aplikacji logiki Consumption lub Standard.
W projektantze, pomiędzy wyzwalaczem a akcją Wyślij e-mail, dodaj akcję o nazwie Dla każdej z nich , podążając za ogólnymi krokami dostosowanymi do typu workflow:
Teraz skompiluj pętlę:
W akcji Dla każdego wybierz pole Wybierz dane wyjściowe z poprzednich kroków, aby wyświetlić opcje danych wejściowych, a następnie wybierz ikonę błyskawicy.
Z listy zawartości dynamicznej, która zostanie otwarta, w obszarze Po opublikowaniu elementu kanału wybierz pozycję Linki kanału, czyli dane wyjściowe tablicy z wyzwalacza RSS.
Uwaga
Jeśli dane wyjściowe Linki 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.
Poniższy przykład pokazuje dane wyjściowe wybranej tablicy:
Aby uruchomić istniejącą akcję na każdym elemencie tablicy, przeciągnij akcję Wyślij wiadomość e-mail do pętli Dla każdego .
Twój workflow wygląda jak następujący przykład:
Zapisz przepływ pracy.
Aby ręcznie przetestować przepływ pracy, na pasku narzędzi projektanta wybierz pozycję Uruchom>.
Dla każdej definicji akcji (JSON)
Jeśli pracujesz w widoku kodu, możesz zdefiniować akcję For_each 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 z nich: Wykonuj kolejne iteracje pętli
Domyślnie iteracje w akcji For each są uruchamiane jednocześnie, równolegle. Jednak jeśli masz zagnieżdżone pętle lub masz w pętlach zmienne, od których oczekujesz przewidywalnych wyników, musisz uruchamiać te pętle po jednej, sekwencyjnie.
W projektancie wybierz akcję Dla każdego, aby otworzyć panel informacji, a następnie wybierz Ustawienia.
W obszarze Kontrolka współbieżności zmień ustawienie z Wyłączone na Włączone.
Przesuń suwak Stopień równoległości do 1.
Dla każdej definicji akcji (JSON): uruchom sekwencyjnie
Jeśli pracujesz w widoku kodu dla akcji For_each w definicji JSON swojego przepływu pracy, dodaj parametr operationOptions i ustaw jego wartość na Sequential:
"actions": {
"For_each": {
"actions": {
"Send_an_email_(V2)": { }
},
"foreach": "@triggerBody()?['links']",
"runAfter": {},
"type": "Foreach",
"operationOptions": "Sequential"
}
}
Uwagi dotyczące pętli 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ę. Więcej informacji można znaleźć w artykule Limity współbieżności, pętlowanie i debatowanie.
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.
Domyślnie akcja Until zakończy się powodzeniem lub niepowodzeniem w następujący sposób:
Pętla Until pomyślnie zakończy się, jeśli wszystkie akcje wewnątrz pętli zakończą się powodzeniem, a jeśli limit pętli zostanie osiągnięty, na podstawie zachowania po zakończeniu działania.
Jeśli wszystkie akcje w ostatniej iteracji pętli Until powiedzie się, cała pętla Until zostanie oznaczona jako Powodzenie.
Jeśli jakakolwiek akcja zakończy się niepowodzeniem w ostatniej iteracji pętli Until , cała pętla Until zostanie oznaczona jako Niepowodzenie.
Jeśli jakakolwiek akcja zakończy się niepowodzeniem w iteracji innej niż ostatnia iteracja, następna iteracja będzie nadal działać, a cała akcja Until nie zostanie oznaczona jako Niepowodzenie.
Aby akcja nie powiodła się, zmień domyślne zachowanie w definicji JSON pętli, dodając parametr o nazwie
operationOptionsi ustawiając wartość naFailWhenLimitsReached, na przykład:"Until": { "actions": { "Execute_stored_procedure": { <...> } }, "expression": "@equals(variables('myUntilStop'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "operationOptions": "FailWhenLimitsReached", "runAfter": { "Initialize_variable": [ "Succeeded" ] }, "type": "Until" }
Dodaj pętlę Until do swojego workflow
Poniższy przykładowy workflow zaczyna się codziennie o 8:00 rano. Workflow wykorzystuje akcję Until do zwiększenia liczby zmiennej, aż wartość wynosi 10. Następnie przepływ pracy wysyła wiadomość e-mail, która potwierdza bieżącą wartość. 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 pozostają takie same, ale wyglądają nieco inaczej.
W portalu Azure utwórz zasób aplikacji logiki z pustym przepływem pracy.
W projektancie dodaj wbudowany wyzwalacz Harmonogram o nazwie Cykliczność, wykonując ogólne kroki odpowiednie dla typu przepływu pracy:
W wyzwalaczu Rekurencji podaj następujące informacje:
Parameter Wartość Interwał 1 Częstotliwość dzień W tych godzinach 8 W tych momentach 00 O tych godzinach i o tych minutach pojawiają się po ustawieniu Częstotliwość na Dzień.
Poniższy przykład pokazuje, jak pojawia się wyzwalacz Rekurencji :
W projektancie dodaj wbudowaną akcję Zmienne o nazwie Inicjalizuj zmienną, wykonując ogólne kroki odpowiednie dla typu przepływu pracy:
W akcji Inicjalizuj zmienną podaj następujące informacje:
Parameter Wartość Opis Nazwa/nazwisko Ograniczenie Nazwa twojej zmiennej. Typ Liczba całkowita Typ danych twojej zmiennej. Wartość 0 Wartość początkowa twojej zmiennej. W akcji Initialize variable dodaj wbudowaną akcję Control o nazwie Until zgodnie z ogólnymi krokami dostosowanymi do typu workflow:
W akcji Until ustaw warunek stop dla pętli:
Kliknij wewnątrz pola Loop Until, a następnie wybierz ikonę błyskawicy, aby otworzyć listę zawartości dynamicznej.
Z listy w obszarze Zmienne wybierz zmienną o nazwie Limit.
W obszarze Liczba wprowadź wartość 10 jako wartość porównania.
W akcji Until wybierz pozycję +>Dodaj akcję.
Dodaj wbudowaną akcję Variables o nazwie Zwiększ zmienną do akcji Until, wykonując ogólne kroki odpowiednie dla typu przepływu pracy:
W akcji zmiennej przyrostowej podaj następujące wartości, aby zwiększać wartość zmiennej Limit o 1:
Parameter Wartość Ograniczenie Wybierz zmienną Limit . Wartość 1 Poza i pod akcją Until dodaj akcję wysyłającą e-mail, stosując ogólne kroki dostosowane do typu workflow:
W tym przykładzie nadal jest wykonywana akcja usługi Office 365 Outlook o nazwie Wyślij wiadomość e-mail.
W akcji wiadomości e-mail podaj następujące wartości:
Parameter Wartość Opis Do < adres-e-mail@domain> 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 , a następnie wybierz ikonę pioruna.
2. Z listy zawartości dynamicznej, która zostanie otwarta 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. Poniższy przykład pokazuje, jak wygląda twoja akcja e-mailowa:
Zapisz przepływ pracy.
Testowanie przepływu pracy
Aby ręcznie przetestować przepływ pracy aplikacji logiki:
- Na pasku narzędzi projektanta z opcji Uruchom wybierz pozycję Uruchom.
Po uruchomieniu przepływu pracy otrzymasz wiadomość e-mail z określoną zawartością:
Zapobieganie nieskończonym pętlom
Akcja Until zatrzymuje wykonywanie na podstawie opcjonalnych parametrów Count i Timeout . Upewnij się, że te wartości parametrów zostały odpowiednio ustawione:
| Parameter | Opis |
|---|---|
| Licznik | Maksymalna liczba iteracji uruchamianych przed zakończeniem pętli. Informacje o domyślnych i maksymalnych limitach liczby akcji Until, które może zawierać przepływ pracy, można znaleźć w temacie Limity współbieżności, pętli i usuwania grupowania. |
| Przekroczenie limitu czasu | Maksymalny czas, przez jaki akcja Until, w tym wszystkie iteracje, jest wykonywana 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. Informacje o domyślnych i maksymalnych limitach wartości Timeout można znaleźć w sekcji Limity współbieżności, pętli i rozbijania partii. |
Przejrzyj historię uruchomień iteracji pętli Until
Gdy wyświetlisz historię uruchomień przepływu pracy, który zawiera pętlę Until, szczegółowy stan i wyniki akcji wewnątrz tej pętli są dostępne dopiero po zakończeniu działania całej pętli. Podczas gdy pętla Until nadal wykonuje iterację, akcja pętli pokazuje stan Uruchomione , ale nie można rozwinąć ani przejść przez poszczególne wyniki iteracji do momentu zakończenia pętli.
Pętla kończy się po spełnieniu jednego z następujących warunków:
- Określone wyrażenie przyjmuje wartość true.
- Pętla osiąga limit Count.
- Pętla osiąga limit Timeout.
Po zakończeniu pętli można wybrać akcję Until w historii uruchamiania, aby wyświetlić każdą iterację i stan akcji podrzędnych w ramach tej iteracji.
Uwaga
Jeśli pętla Until jest uruchamiana przez dłuższy okres, musisz poczekać, aż pętla zostanie w pełni ukończona, zanim będzie można sprawdzić historię uruchamiania dla wyników z poszczególnych iteracji. Aby monitorować długotrwałe pętle w toku, rozważ dodanie akcji rejestrowania lub powiadomień wewnątrz pętli, które niezależnie emitują stan, na przykład wysyłając komunikat do kolejki lub aktualizując zmienną, którą może odczytać gałąź równoległa.
Do definicji akcji (JSON)
Jeśli pracujesz w widoku kodu, możesz zdefiniować akcję Until w definicji JSON swojego 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 w treści odpowiedzi HTTP zwracany jest status Completed. 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 działała przez dwie godziny zgodnie z wartością atrybutu
timeoutw 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"
},
"runAfter": {},
"type": "ApiConnection"
}
},
"expression": "@equals(body('Create_new_resource'), 'Completed')",
"limit": {
"count": 10,
"timeout": "PT2H"
},
"runAfter": {}
}
}