Azure Logic Apps ile iş akışlarında eylemleri yinelemek için döngüler oluşturma

Şunlar için geçerlidir: Azure Logic Apps (Tüketim + Standart)

Azure Logic Apps, iş akışınızda kullanabileceğiniz aşağıdaki döngü eylemlerini içerir:

  • Dizideki öğelerde bir veya daha fazla eylemi yinelemek için İş akışınıza Her eylem için öğesini ekleyin.

    Alternatif olarak, bir dizi alan bir tetikleyiciniz varsa ve her dizi öğesi için bir yineleme çalıştırmak istiyorsanız, bu diziyi SplitOn tetikleyici özelliğiyle kaldırabilirsiniz.

  • Bir koşul karşılanana veya durum değişene kadar bir veya daha fazla eylemi yinelemek için, İş akışınıza Until eylemini ekleyin.

    İş akışınız önce döngünün içindeki tüm eylemleri çalıştırır ve ardından koşulu veya durumu denetler. Koşul karşılanırsa döngü durur. Aksi takdirde döngü yineler. Bir iş akışının sahip olabileceği Until döngülerinin sayısıyla ilgili varsayılan ve en yüksek sınırlar için bkz. Eşzamanlılık, döngü oluşturma ve sınırlamaları kaldırma.

Önkoşullar

For each

Her eylem için yalnızca dizilerde çalışır ve bir dizideki her öğe üzerinde bir veya daha fazla eylem yineler. Aşağıdaki listede, her eylem için kullanmak istediğiniz durumlarda dikkat edilmesi gereken bazı noktalar yer alır:

  • Her eylem için, sınırlı sayıda dizi öğesini işleyebilir. Bu sınır için bkz . Eşzamanlılık, döngü oluşturma ve sınırlamaları kaldırma.

  • Varsayılan olarak, her eylem için içindeki döngüler veya yinelemeler paralel olarak aynı anda çalıştırılır.

    Bu davranış, yinelemelerin teker teker veya sırayla çalıştırıldığı her döngüye Power Automate'in Uygula seçeneğinden farklıdır. Ancak, her yineleme için sıralı ayarlayabilirsiniz. Örneğin, Gecikme eylemini kullanarak Her eylem için eyleminde bir sonraki yinelemeyi duraklatmak istiyorsanız, her yinelemeyi sırayla çalışacak şekilde ayarlamanız gerekir.

    Varsayılan davranışın bir istisnası olarak, her eylemin yinelemeleri için iç içe yerleştirilmiş her zaman paralel değil sıralı olarak çalışır. İç içe döngüdeki öğeler için işlemleri paralel olarak çalıştırmak için bir alt mantıksal uygulama iş akışı oluşturun ve çağırabilirsiniz.

  • Her yineleme sırasında değişkenler üzerindeki işlemlerden tahmin edilebilir sonuçlar almak için yinelemeleri sıralı olarak çalıştırın. Örneğin, eşzamanlı çalışan bir yineleme sona erdiğinde Increment değişkeni, Azaltma değişkeni ve Değişkene ekle işlemleri tahmin edilebilir sonuçlar döndürür. Ancak, eşzamanlı çalışan döngüdeki her yineleme sırasında bu işlemler öngörülemeyen sonuçlar döndürebilir.

  • Her döngü için içindeki eylemler, dizideki item() her öğeye başvurmak ve bunları işlemek için işlevini kullanır. Dizide olmayan verileri belirtirseniz iş akışı başarısız olur.

Aşağıdaki örnek iş akışı, bir web sitesi RSS akışı için günlük özet gönderir. İş akışı, her yeni öğe için bir e-posta gönderen Her eylem için öğesini kullanır.

Tüketim veya Standart iş akışınız olup olmadığına bağlı olarak, ilgili adımları izleyin:

  1. Azure portalında, aşağıdaki adımları belirtilen sırada kullanarak örnek bir Tüketim mantığı uygulaması iş akışı oluşturun:

    • Akış öğesi yayımlandığında adlı RSS tetikleyicisi

      Daha fazla bilgi için tetikleyici eklemek için bu genel adımları izleyin.

    • E-posta gönder adlı Outlook.com veya Office 365 Outlook eylemi

      Daha fazla bilgi için, eylem eklemek için bu genel adımları izleyin.

  2. RSS tetikleyicisi ile İş akışınızda E-posta gönder eylemi arasına her eylem için eylemini eklemek için aynı genel adımları izleyin.

  3. Şimdi döngü derleyin:

    1. Dinamik içerik listesinin açılması için Önceki adımlardan bir çıkış seçin kutusunun içini seçin.

    2. Dinamik içerik ekle listesinde, Akış öğesi yayımlandığında bölümünde, RSS tetikleyicisinden bir dizi çıkışı olan Akış bağlantıları'nı seçin.

      Dekont

      Akış bağlantıları çıkışı görünmüyorsa tetikleyici bölümü etiketinin yanındaki Daha fazla göster'i seçin. Dinamik içerik listesinden yalnızca önceki adımlardan çıkışları seçebilirsiniz.

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

      İşiniz bittiğinde, seçili dizi çıkışı aşağıdaki örnekte olduğu gibi görünür:

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

    3. Her dizi öğesinde var olan bir eylemi çalıştırmak için, E-posta gönder eylemini Her bir için döngüsüne sürükleyin.

      Şimdi iş akışınız aşağıdaki örneğe benzer:

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

  4. Tamamladığınızda, iş akışınızı kaydedin.

  5. İş akışınızı el ile test etmek için tasarımcı araç çubuğunda Tetikleyici>Çalıştırmayı Çalıştır'ı seçin.

Her eylem tanımı için (JSON)

Kod görünümünde çalışıyorsanız, eylemi iş akışınızın JSON tanımında tanımlayabilirsiniz For_each , örneğin:

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

Her bir için: Sıralı olarak çalıştır

Varsayılan olarak, bir For döngüsündeki yinelemeler paralel olarak aynı anda çalıştırılır. Ancak, döngülerin içinde tahmin edilebilir sonuçlar beklediğiniz iç içe döngüleriniz veya değişkenleriniz varsa, bu döngüleri birer birer veya sırayla çalıştırmanız gerekir.

  1. Her eylemin sağ üst köşesinde üç nokta (...) > öğesini seçin Ayarlar.

  2. Eşzamanlılık Denetimi'nin altında, ayarı Kapalı yerine Açık olarak değiştirin.

  3. Paralellik Derecesi kaydırıcısını 1'e getirin ve Bitti'yi seçin.

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

Her eylem tanımı (JSON) için: Sırayla çalıştır

İş akışınızın JSON tanımındaki eylemle For_each kod görünümünde çalışıyorsanız parametresini Sequential ekleyerek operationOptions bu seçeneği kullanabilirsiniz, örneğin:

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

Until

Until eylemi çalışır ve belirtilen gerekli koşul karşılanana kadar bir veya daha fazla eylemi yineler. Koşul karşılanırsa döngü durur. Aksi takdirde döngü yineler. Bir iş akışının sahip olabileceği Until eylemleri veya yinelemeleri sayısıyla ilgili varsayılan ve en yüksek sınırlar için bkz. Eşzamanlılık, döngü ve sınırlamaları kaldırma.

Aşağıdaki listede, Until eylemini kullanabileceğiniz bazı yaygın senaryolar yer alır:

  • İstediğiniz yanıtı elde edene kadar bir uç nokta çağırın.

  • Veritabanında kayıt oluşturma. Bu kayıttaki belirli bir alan onaylanana kadar bekleyin. İşlemeye devam edin.

Aşağıdaki örnek iş akışında, her gün 08:00'den başlayarak, Until eylemi değişkenin değeri 10'a eşit olana kadar değişkeni artırır. Ardından iş akışı geçerli değeri onaylayan bir e-posta gönderir.

Dekont

Bu örnekte Office 365 Outlook kullanılır, ancak Azure Logic Apps'in desteklediği herhangi bir e-posta sağlayıcısını kullanabilirsiniz. Başka bir e-posta hesabı kullanıyorsanız genel adımlar aynı kalır, ancak kullanıcı arabiriminiz biraz farklı görünebilir.

  1. Azure portalında boş bir iş akışıyla tüketim mantığı uygulaması kaynağı oluşturun.

  2. Tasarımcıda, iş akışınıza Schedule adlı Recurrence yerleşik tetikleyicisini eklemek için bu genel adımları izleyin.

  3. Yinelenme tetikleyicisinde tetikleyicinin tetiklenme aralığını, sıklığını ve günün saatini belirtin.

    Özellik Değer
    Aralık 1
    Sıklık Day
    Şu saatlerde 8

    Bu saatlerde parametresini eklemek için Yeni parametre ekle listesini açın ve Sıklık'ıGün olarak ayarladıktan sonra görüntülenen Şu saatlerde'yi seçin.

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

    İşiniz bittiğinde Yinelenme tetikleyicisi aşağıdaki örneğe benzer:

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

  4. Tetikleyicinin altında, değişkeni başlat adlı Yerleşik Değişkenler eylemini iş akışınıza eklemek için bu genel adımları izleyin.

  5. Değişken başlat eyleminde aşağıdaki değerleri sağlayın:

    Özellik Değer Açıklama
    Dosya Adı Sınırla Değişkeninizin adı
    Türü Tamsayı Değişkeninizin veri türü
    Değer 0 Değişkeninizin başlangıç değeri

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

  6. Değişken başlat eyleminin altında, iş akışınıza Until adlı Denetim yerleşik eylemini eklemek için bu genel adımları izleyin.

  7. Until eyleminde, döngünün durdurma koşulunu ayarlamak için aşağıdaki değerleri sağlayın.

    1. Dinamik içerik listesini otomatik olarak açan Değer seçin adlı en soldaki kutunun içini seçin.

    2. Listeden Değişkenler'in altında Sınır adlı değişkeni seçin.

    3. Ortadaki işleç listesinden eşittir işlecini seçin.

    4. Değer seçin adlı en sağdaki kutuya karşılaştırma değeri olarak 10 girin.

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

  8. Until eyleminin içinde Eylem ekle'yi seçin.

  9. İşlem seçin arama kutusunda, Artırma değişkeni adlı Değişkenler yerleşik eylemini Until eylemine eklemek için bu genel adımları izleyin.

  10. Değişken artırma eyleminde Limit değişkeninin değerini 1 artırmak için aşağıdaki değerleri sağlayın:

    Özellik Değer
    Adı Limit değişkenini seçin.
    Değer 1

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

  11. Dışında ve Until eylemi altında, e-posta gönderen bir eylem eklemek için bu genel adımları izleyin.

    Bu örnek, E-posta gönder adlı Office 365 Outlook eylemiyle devam eder.

  12. E-posta eyleminde aşağıdaki değerleri sağlayın:

    Özellik Değer Açıklama
    İşlem <e-posta address@domain> Alıcının e-posta adresi. Test için kendi e-posta adresinizi kullanın.
    Konu "Sınır" değişkeninin geçerli değeri: Sınır E-posta konusu. Bu örnekte, geçerli değerin belirtilen koşulunuzu karşıladığını onaylamak için Limit değişkenini eklediğinizden emin olun:

    1. Dinamik içerik listesinin görünmesi için Konu kutusunun içini seçin.

    2. Dinamik içerik listesinde, Değişkenler bölüm üst bilgisinin yanındaki Daha fazla bilgi'yi seçin.

    3. Sınır'ı seçin.
    Gövde <e-posta içeriği> Göndermek istediğiniz e-posta iletisi içeriği. Bu örnekte, istediğiniz metni girin.

    İşiniz bittiğinde, e-posta eyleminiz aşağıdaki örneğe benzer şekilde görünür:

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

  13. İş akışınızı kaydedin.

İş akışınızı test etme

Mantıksal uygulama iş akışınızı el ile test etmek için Tüketim veya Standart mantıksal uygulamanız olup olmadığına bağlı olarak adımları izleyin.

Tasarımcı araç çubuğunda Tetikleyici>Çalıştırmayı Çalıştır'ı seçin.

İş akışınız çalışmaya başladıktan sonra, belirttiğiniz içeriği içeren bir e-posta alırsınız:

Screenshot shows sample email received from example workflow.

Sonsuz döngüleri önleme

Until eylemi, eylemde Sınırları değiştir'i seçerek görüntüleyebileceğiniz aşağıdaki özelliklere göre yürütmeyi durdurur. Bu özellik değerlerini uygun şekilde ayarladığınızdan emin olun:

Özellik Açıklama
Sayı Döngüden çıkmadan önce çalıştırılacak en fazla yineleme sayısı.

Bir iş akışının sahip olabileceği Until eylemlerinin sayısıyla ilgili varsayılan ve en yüksek sınırlar için bkz. Eşzamanlılık, döngü ve sınırlamaları kaldırma.
Zaman aşımı Tüm yinelemeler de dahil olmak üzere Until eyleminin döngüden çıkmadan önce çalıştıracakları en uzun süre. Bu değer ISO 8601 biçiminde belirtilir ve her yineleme için değerlendirilir.

Döngüdeki herhangi bir eylem zaman aşımı sınırından uzun sürerse geçerli yineleme durmaz. Ancak, zaman aşımı sınırı koşulu karşılandığından sonraki yineleme başlatılmaz.

Zaman Aşımı değeriyle ilgili varsayılan ve en yüksek sınırlar için bkz. Eşzamanlılık, döngü ve sınırlamaları kaldırma.

"Until" tanımı (JSON)

Kod görünümünde çalışıyorsanız, iş akışınızın JSON tanımında bir Until eylem tanımlayabilirsiniz, örneğin:

"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 örnek Until döngüsü, kaynak oluşturan bir HTTP uç noktasını çağırır. HTTP yanıt gövdesi durumla Completed döndürdüğünde döngü durdurulur. Sonsuz döngüleri önlemek için, aşağıdaki koşullardan herhangi biri gerçekleşirse döngü de durdurulur:

  • Döngü, özniteliği tarafından count belirtilen şekilde 10 kez çalıştı. Varsayılan değer 60 kezdir.

  • Döngü, ISO 8601 biçiminde özniteliği tarafından timeout belirtilen iki saat boyunca çalıştı. Varsayılan değer bir saattir.

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

Sonraki adımlar