İş akışı eylemi yineleyin veya Azure Logic Apps dizilerde işlem döngü oluşturmaCreate loops that repeat workflow actions or process arrays in Azure Logic Apps

Mantıksal uygulamanızda bir dizi işlemek için oluşturabileceğiniz bir "Foreach" döngüsünü.To process an array in your logic app, you can create a "Foreach" loop. Bu döngü dizideki her öğe üzerinde bir veya daha fazla eylemleri yineler.This loop repeats one or more actions on each item in the array. "Foreach" döngü dizi öğesi sayısına yönelik sınırlar işleme için bkz: limitler ve yapılandırma.For limits on the number of array items that "Foreach" loops can process, see Limits and configuration.

Bir koşul veya bir durum değişikliklerini kadar Eylemler yinelemek için oluşturabileceğiniz bir "Kadar" döngü.To repeat actions until a condition gets met or a state changes, you can create an "Until" loop. Mantıksal uygulamanızı ilk tüm eylemler döngünün içinde çalışır ve ardından koşul veya durumunu denetler.Your logic app first runs all the actions inside the loop, and then checks the condition or state. Koşul karşılanırsa, döngü durdurur.If the condition is met, the loop stops. Aksi takdirde, döngü tekrarlanır.Otherwise, the loop repeats. Bir mantıksal uygulama çalıştırması, Döngülerde "Kadar" sayısı üst sınırı için bkz: limitler ve yapılandırma.For limits on the number of "Until" loops in a logic app run, see Limits and configuration.

İpucu

Bir dizi alır ve her dizi öğesi için bir iş akışını çalıştırmak istediğiniz bir tetikleyici varsa debatch ile bu diziyi SplitOn özellik tetikleyicisi.If you have a trigger that receives an array and want to run a workflow for each array item, you can debatch that array with the SplitOn trigger property.

ÖnkoşullarPrerequisites

"Foreach" döngü"Foreach" loop

"Foreach döngüsü" yalnızca diziler üzerinde çalışan ve her dizi öğesi bir veya daha fazla Eylemler tekrarlar.A "Foreach loop" repeats one or more actions on each array item and works only on arrays. Yinelemelerde "Foreach" döngüsünü paralel olarak çalıştırın.Iterations in a "Foreach" loop run in parallel. Bir yineleme teker teker ayarıyla ancak çalıştırabilirsiniz bir sıralı "Foreach" döngü.However, you can run iterations one at a time by setting up a sequential "Foreach" loop.

"Foreach" döngüler kullandığınızda bazı noktalar şunlardır:Here are some considerations when you use "Foreach" loops:

  • İç içe geçmiş Döngülerde yinelemeler her zaman sırayla, paralel olarak çalışır.In nested loops, iterations always run sequentially, not in parallel. Paralel iç içe döngü öğeleri için işlemleri çalıştırmak için oluşturma ve alt mantıksal uygulamayı çağırın.To run operations in parallel for items in a nested loop, create and call a child logic app.

  • Her döngü yinelemesinin sırasında değişkenlerde işlemlerden tahmin edilebilir sonuçlar almak için bu döngü sırayla çalışır.To get predictable results from operations on variables during each loop iteration, run those loops sequentially. Örneğin, eşzamanlı olarak çalışan döngü sona erer, artırma, azaltma ve ekleme için değişken işlemleri tahmin edilebilir sonuçlar döndürür.For example, when a concurrently running loop ends, the increment, decrement, and append to variable operations return predictable results. Ancak, eşzamanlı olarak çalışan Döngüdeki her bir yineleme sırasında bu işlemleri öngörülemeyen sonuçlara döndürebilir.However, during each iteration in the concurrently running loop, these operations might return unpredictable results.

  • "Foreach" eylemi döngü kullanın @item()Actions in a "Foreach" loop use the @item() Başvuru ve dizideki her öğe işlemek için ifade.expression to reference and process each item in the array. Bir dizi içinde olmayan veriler belirlediğiniz mantıksal uygulama iş akışı başarısız olur.If you specify data that's not in an array, the logic app workflow fails.

Bu örnek mantıksal uygulama bir Web sitesinin RSS akışındaki günlük özetini gönderir.This example logic app sends a daily summary for a website RSS feed. Uygulama, her yeni öğe için bir e-posta gönderen bir "Foreach" döngüsü kullanır.The app uses a "Foreach" loop that sends an email for each new item.

  1. Bu örnek mantıksal uygulama oluşturma ile bir Outlook.com veya Office 365 Outlook hesabı.Create this sample logic app with an Outlook.com or Office 365 Outlook account.

  2. RSS arasında tetikleyin ve gönderme e-posta eylemi, "Foreach" döngüsünü ekleyin.Between the RSS trigger and send email action, add a "Foreach" loop.

    1. Adımlar arasında döngü eklemek için işaretçinizi Bu adımlar arasında okun üzerine getirin.To add a loop between steps, move your pointer over the arrow between those steps. Seçin artı ( + ) seçip görüntülenen Eylem Ekle.Choose the plus sign (+) that appears, then select Add an action.

      "Eylem Ekle"'i seçin

    2. Arama kutusunun altındaki seçin tüm.Under the search box, choose All. Arama kutusuna filtreniz olarak "for each" yazın.In the search box, type "for each" as your filter. Eylem listesinden şu eylemi seçin: Her - denetim içinFrom the actions list, select this action: For each - Control

      "For each" döngüsü ekleyin

  3. Şimdi döngünün oluşturun.Now build the loop. Altında önceki adımlardan bir çıkış seçin sonra dinamik içerik Ekle listesi görüntülenirse, seçin akış bağlantıları RSS tetikleyicisi çıktısını dizisi.Under Select an output from previous steps after the Add dynamic content list appears, select the Feed links array, which is output from the RSS trigger.

    Dinamik içerik listesinden seçin

    Not

    Seçebileceğiniz yalnızca dizinin önceki adımda çıkarır.You can select only array outputs from the previous step.

    Seçilen dizi artık burada görünür:The selected array now appears here:

    Dizi seçin

  4. Dizideki tüm öğeler bir eylemi çalıştırmak için sürükleyin bir e-posta döngü eylemlere.To run an action on each array item, drag the Send an email action into the loop.

    Mantıksal uygulamanız şu örnekteki gibi bir şey benzeyebilir:Your logic app might look something like this example:

    Adımlar "Foreach" döngüsünü ekleyin

  5. Mantıksal uygulamanızı kaydedin.Save your logic app. Tasarımcı araç çubuğunda mantıksal uygulamanızı el ile test etmeyi çalıştırma.To manually test your logic app, on the designer toolbar, choose Run.

"Foreach" döngü tanımının (JSON)"Foreach" loop definition (JSON)

Mantıksal uygulamanız için kod görünümde çalışıyorsanız, tanımlayabileceğiniz Foreach mantıksal uygulamanızın JSON tanımında döngü bunun yerine, örneğin:If you're working in code view for your logic app, you can define the Foreach loop in your logic app's JSON definition instead, for example:

"actions": {
   "myForEachLoopName": {
      "type": "Foreach",
      "actions": {
         "Send_an_email": {
            "type": "ApiConnection",
            "inputs": {
               "body": {
                  "Body": "@{item()}",
                  "Subject": "New CNN post @{triggerBody()?['publishDate']}",
                  "To": "me@contoso.com"
               },
               "host": {
                  "api": {
                     "runtimeUrl": "https://logic-apis-westus.azure-apim.net/apim/office365"
                  },
                  "connection": {
                     "name": "@parameters('$connections')['office365']['connectionId']"
                  }
               },
               "method": "post",
               "path": "/Mail"
            },
            "runAfter": {}
         }
      },
      "foreach": "@triggerBody()?['links']",
      "runAfter": {}
   }
}

"Foreach" döngü: Sıralı"Foreach" loop: Sequential

Varsayılan olarak, Döngülerde "Foreach" döngüsünü paralel olarak çalıştırın.By default, cycles in a "Foreach" loop run in parallel. Döngünün her döngü sırayla çalışır ayarlayın ardışık seçeneği.To run each cycle sequentially, set the loop's Sequential option. Döngüler veya değişkenleri döngüler iç içe olduğunda "Foreach" döngüler tahmin edilebilir sonuçlar burada beklediğiniz sırayla çalıştırılmalıdır."Foreach" loops must run sequentially when you have nested loops or variables inside loops where you expect predictable results.

  1. Döngünün sağ üst köşedeki, seçin üç nokta ( ... ) > Ayarları.In the loop's upper right corner, choose ellipses (...) > Settings.

    "Foreach" döngüsünü üzerinde seçin "..." > "Ayarlar"

  2. Altında eşzamanlılık denetimi, kapatma eşzamanlılık denetimi ayarını üzerinde.Under Concurrency Control, turn the Concurrency Control setting to On. Taşıma paralellik derecesi kaydırıcısını 1ve Bitti.Move the Degree of Parallelism slider to 1, and choose Done.

    Eşzamanlılık denetimi açın

Mantıksal uygulamanızın JSON tanımı ile çalışıyorsanız, kullanabileceğiniz Sequential ekleyerek seçeneği operationOptions parametresi, örneğin:If you're working with your logic app's JSON definition, you can use the Sequential option by adding the operationOptions parameter, for example:

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

Döngü "Kadar""Until" loop

Çalıştırın ve eylemleri bir koşul veya bir durum değişikliklerini kadar yinelemek için bu eylemlerin bir "Kadar" döngüde yerleştirin.To run and repeat actions until a condition gets met or a state changes, put those actions in an "Until" loop. Mantıksal uygulamanızı ilk tüm eylemler döngünün içinde çalışır ve ardından koşul veya durumunu denetler.Your logic app first runs any and all actions inside the loop, and then checks the condition or state. Koşul karşılanırsa, döngü durdurur.If the condition is met, the loop stops. Aksi takdirde, döngü tekrarlanır.Otherwise, the loop repeats.

Bir "Kadar" döngüsünü kullanabileceğiniz bazı yaygın senaryolar şunlardır:Here are some common scenarios where you can use an "Until" loop:

  • İstediğiniz yanıt elde edene kadar bir uç nokta çağırın.Call an endpoint until you get the response you want.

  • Bir kaydı bir veritabanı oluşturun.Create a record in a database. Kayıt Onaylandı, belirli bir alana kadar bekleyin.Wait until a specific field in that record gets approved. İşleme devam edin.Continue processing.

8: 00'da her gün başlayarak, değişkenin değeri eşittir 10 kadar bu örnek mantıksal uygulama, bir değişkeni artırır.Starting at 8:00 AM each day, this example logic app increments a variable until the variable's value equals 10. Mantıksal uygulama, ardından geçerli değer olduğunu bildiren bir e-posta gönderir.The logic app then sends an email that confirms the current value.

Not

Bu adımları Office 365 Outlook kullanıyoruz, ancak Logic Apps destekleyen herhangi bir e-posta sağlayıcısı kullanabilirsiniz.These steps use Office 365 Outlook, but you can use any email provider that Logic Apps supports. Buradaki bağlayıcı listesini denetleyin.Check the connectors list here. Başka bir e-posta hesabı kullanırsanız genel adımlar aynı olacaktır ancak kullanıcı Arabirimi biraz farklı görünebilir.If you use another email account, the general steps stay the same, but your UI might look slightly different.

  1. Boş bir mantıksal uygulama oluşturma.Create a blank logic app. Logic Apps Tasarımcısı'nda arama kutusunun altındaki seçin tüm.In Logic App Designer, under the search box, choose All. "Yinelenme" arayın.Search for "recurrence". Tetikleyiciler listesinden şu tetikleyiciyi seçin: Yinelenme - zamanlamaFrom the triggers list, select this trigger: Recurrence - Schedule

    "– Zamanlama yinelenme" tetikleyicisi Ekle

  2. Zaman aralığı, sıklığı ve günün saatini ayarlayarak tetikleyici belirtin.Specify when the trigger fires by setting the interval, frequency, and hour of the day. Saat koymak için Gelişmiş Seçenekleri Göster.To set the hour, choose Show advanced options.

    Yinelenme Zamanlaması ' ayarlayın

    ÖzellikProperty DeğerValue
    AralıkInterval 11
    SıklıkFrequency GünDay
    Şu saatlerdeAt these hours 88
  3. Tetikleyici altında seçin yeni adım.Under the trigger, choose New step. "Değişkenler" için arama yapın ve şu eylemi seçin: Değişken - değişken BaşlatSearch for "variables", and select this action: Initialize variable - Variables

    "Değişken - değişken Başlat" eylemini ekleme

  4. Değişkeninizin şu değerlerle ayarlayın:Set up your variable with these values:

    Değişken özelliklerini ayarlama

    ÖzellikProperty DeğerValue AçıklamaDescription
    AdName SınırLimit Değişken adıYour variable's name
    TürType IntegerInteger Değişkenin veri türüYour variable's data type
    DeğerValue 00 Değişkeninizin değeri başlıyorYour variable's starting value
  5. Altında değişken Başlat eylemi seçin yeni adım.Under the Initialize variable action, choose New step.

  6. Arama kutusunun altındaki seçin tüm.Under the search box, choose All. "Kadar için" arama yapın ve şu eylemi seçin: -Kadar denetimiSearch for "until", and select this action: Until - Control

    Döngü "Kadar" Ekle

  7. Döngünün çıkış koşulu seçerek yapı sınırı değişkeni ve eşittir işleci.Build the loop's exit condition by selecting the Limit variable and the is equal operator. Girin 10 karşılaştırma değeri.Enter 10 as the comparison value.

    Döngü durdurmak için çıkış koşulu oluşturma

  8. Döngünün içinde seçin Eylem Ekle.Inside the loop, choose Add an action.

  9. Arama kutusunun altındaki seçin tüm.Under the search box, choose All. "Değişkenler" için arama yapın ve şu eylemi seçin: Artış değişkeni - değişkenleriSearch for "variables", and select this action: Increment variable - Variables

    Değişken artırma için eylem ekleme

  10. İçin adıseçin sınırı değişkeni.For Name, select the Limit variable. İçin değer, "1" girin.For Value, enter "1".

    "Sınır" artışla 1

  11. Dışında ve bir döngünün altında seçin yeni adım.Outside and under the loop, choose New step.

  12. Arama kutusunun altındaki seçin tüm.Under the search box, choose All. Bul ve örneğin e-posta gönderen bir eylem ekleyin:Find and add an action that sends email, for example:

    E-posta gönderen bir eylem ekleme

  13. İstenirse, e-posta hesabınızda oturum açın.If prompted, sign in to your email account.

  14. E-posta eylemin özelliklerini ayarlayın.Set the email action's properties. Ekleme sınırı konuya değişken.Add the Limit variable to the subject. Bu şekilde, değişkenin geçerli değeri, belirtilen, örneğin koşulunu doğrulayabilirsiniz:That way, you can confirm the variable's current value meets your specified condition, for example:

    E-posta özelliklerini ayarlama

    ÖzellikProperty DeğerValue AçıklamaDescription
    AlıcıTo <e-posta adresi@etki alanı ><email-address@domain> Alıcının e-posta adresi.The recipient's email address. Test için kendi e-posta adresinizi kullanın.For testing, use your own email address.
    KonuSubject Geçerli değer "Sınırın" sınırıCurrent value for "Limit" is Limit E-posta konusunu belirtin.Specify the email subject. Bu örnekte, eklediğinizden emin olun sınırı değişkeni.For this example, make sure that you include the Limit variable.
    GövdeBody <email-content><email-content> E-posta ileti göndermek istediğiniz içeriği belirtin.Specify the email message content you want to send. Bu örnekte, istediğiniz herhangi bir metni girin.For this example, enter whatever text you like.
  15. Mantıksal uygulamanızı kaydedin.Save your logic app. Tasarımcı araç çubuğunda mantıksal uygulamanızı el ile test etmeyi çalıştırma.To manually test your logic app, on the designer toolbar, choose Run.

    Mantığınızı çalışmaya başladıktan sonra bir e-posta, belirttiğiniz içeriğe sahip olursunuz:After your logic starts running, you get an email with the content that you specified:

    Alınan e-posta

Sonsuz döngüler engellePrevent endless loops

Bir "Kadar" döngü, Bu koşullardan herhangi biri varsa, yürütmeyi durdurun varsayılan sınırlara sahiptir:An "Until" loop has default limits that stop execution if any of these conditions happen:

ÖzellikProperty Varsayılan değerDefault value AçıklamaDescription
SayısıCount 6060 Döngüden çıkılıp önce çalıştırılan döngüler en yüksek sayısı.The highest number of loops that run before the loop exits. 60 döngüleri varsayılandır.The default is 60 cycles.
zaman aşımıTimeout PT1HPT1H Bir döngü döngü önce çalıştırılacak çoğu süreyi çıkar.The most amount of time to run a loop before the loop exits. Varsayılan bir saattir ve ISO 8601 biçiminde belirtilir.The default is one hour and is specified in ISO 8601 format.

Zaman aşımı değeri her döngü döngüsü için değerlendirilir.The timeout value is evaluated for each loop cycle. Geçerli döngü, döngü içinde herhangi bir işlem zaman aşımı sınırından daha uzun sürerse, bitmez.If any action in the loop takes longer than the timeout limit, the current cycle doesn't stop. Ancak, sınır koşulu karşılanmamış çünkü bir sonraki döngüde başlamaz.However, the next cycle doesn't start because the limit condition isn't met.

Bu varsayılan sınırları değiştirmek için seçin Gelişmiş Seçenekleri Göster döngü eylem şeklinde.To change these default limits, choose Show advanced options in the loop action shape.

Tanımı "Kadar" (JSON)"Until" definition (JSON)

Mantıksal uygulamanız için kod görünümde çalışıyorsanız, tanımlayabileceğiniz bir Until mantıksal uygulamanızın JSON tanımında döngü bunun yerine, örneğin:If you're working in code view for your logic app, you can define an Until loop in your logic app's JSON definition instead, for example:

"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"
         ]
      }
   }
}

Bu örnekte "kadar" döngü bir kaynak oluşturan bir HTTP uç noktası çağırır.This example "Until" loop calls an HTTP endpoint, which creates a resource. HTTP yanıt gövdesi ile döndürüldüğünde döngü durur Completed durumu.The loop stops when the HTTP response body returns with Completed status. Sonsuz döngüler önlemek amacıyla, Bu koşullardan herhangi biri varsa döngüyü da durdurur:To prevent endless loops, the loop also stops if any of these conditions happen:

  • Döngü 10 kez belirtildiği gibi çalıştı count özniteliği.The loop ran 10 times as specified by the count attribute. Varsayılan değer 60 katıdır.The default is 60 times.

  • Döngü belirtildiği gibi iki saat çalıştı timeout ISO 8601 biçimli öznitelik.The loop ran for two hours as specified by the timeout attribute in ISO 8601 format. Varsayılan bir saattir.The default is one hour.

"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": {}
   }
}

Destek alınGet support

Sonraki adımlarNext steps