Power Automate'te 'Configure run after' ile Try-Catch
Power Automate'te Try-Catch deseni: Scope'lar ve Configure run after ile hataları kontrollü biçimde yakalayın, günlüğe kaydedin ve bildirin.
Bir akışın ortasında yaşanan bir çökme can sıkıcıdır, kimsenin fark etmediği bir çökme ise tehlikelidir. Power Automate, klasik bir programlama dili gibi yerleşik bir Try-Catch yapısına sahip değildir, ancak scope'ları Configure run after ayarıyla birleştirerek tam olarak bu deseni kendin oluşturabilirsin. Sonuçta ortaya, bir hata durumunda basitçe iptal olmayan, kontrollü şekilde tepki veren, kaydeden ve şüphe durumunda haber veren bir akış çıkar.
Bu makalede sana adım adım Try, Catch ve Finally scope'larını nasıl oluşturacağını, bunlar için çalıştırma sonrası koşullarını nasıl doğru ayarlayacağını ve hata durumunda gerçek hata mesajına nasıl ulaşacağını gösteriyoruz. Bunun temelini Microsoft'un resmi belgeleri, daha doğrusu sağlam hata yönetimi kılavuzu ve bulut akışlarındaki scope'lara genel bakış oluşturuyor.
Power Automate neden klasik bir Try-Catch yapısına sahip değil
Programlama dillerinde bir istisnayı Try-Catch bloğuyla yakalarsın: kod Try kısmında çalışır, bir hata otomatik olarak Catch kısmına geçer. Power Automate farklı çalışır: her eylemin bir çalıştırma sonrası koşulu vardır ve bu, varsayılan olarak "başarılı" değerine ayarlıdır. Önceki bir eylem başarısız olursa, sonraki eylem basitçe atlanır ve sen başka bir ayar yapmadığın sürece tüm akış iptal olur.
Try-Catch deseni tam olarak burada devreye girer: asıl mantığını bir scope içinde gruplarsın, hata yönetimi için ikinci bir scope eklersin ve bunun çalıştırma sonrası koşulunu yalnızca ilk scope'ta bir hata oluştuğunda çalışacak şekilde ayarlarsın. Böylece kod yerine arayüz üzerinden yapılandırılmış olsa da yapısal olarak bir Try-Catch ile aynı davranışı elde edersin.
Yapı: Try, Catch ve Finally scope'ları
Eksiksiz bir hata yönetimi deseni için art arda üç scope oluşturursun:
- Try: Asıl iş mantığını, yani normal durumda çalıştırılması gereken eylemleri içeren bir scope.
- Catch: Try scope'unda bir şeyler ters giderse çalışan, hemen altındaki ikinci scope. Burada hatayı kaydedersin veya bir bildirim gönderirsin.
- Finally: Try scope'u başarılı olsun ya da olmasın, sonuçtan bağımsız olarak her zaman çalışan üçüncü bir scope. Bir bağlantıyı kapatmak veya bir durum alanını ayarlamak gibi temizlik işleri için kullanışlıdır.
Her scope'u Eylem ekle üzerinden ve "Scope" aramasıyla eklersin; bu, Scope oluşturma ve kullanma kılavuzunda ayrıntılı olarak açıklanmıştır. Scope'lara anlamlı adlar vermeye dikkat et; "Try", "Catch" ve "Finally" tek bakışta anlaşılır olur ve akışı daha sonra devralacak meslektaşların için de okunabilir kılar.
Adım adım: Configure run after'ı ayarlama
Catch scope'u için çalıştırma sonrası koşulunu şu şekilde ayarlarsın:
- Catch scope'unu tasarımcıda aç ve sağ üstteki "..." menüsünü seç.
- Şunu seç: Configure run after (Almanca: "Ausführen nach konfigurieren").
- Listede önceki scope, yani "Try", dört onay kutusuyla birlikte görünür: başarılı, başarısız oldu, atlandı ve zaman aşımına uğradı.
- "Başarılı" işaretini kaldır ve bunun yerine "başarısız oldu", "atlandı" ve "zaman aşımına uğradı" kutularını işaretle.
- Şununla onayla: Bitti.
Bu sayede Catch scope'u yalnızca Try scope'u düzgün tamamlanmadığında çalışır. Finally scope'u için de aynı şekilde ilerlersin, ancak orada dört onay kutusunun tamamını, yani "başarılı" seçeneğini de işaretlersin. Böylece bu scope, Try scope'unun nasıl sonuçlandığından bağımsız olarak her durumda çalışır. Önemli: en az bir onay kutusu her zaman aktif kalmalıdır, koşul tamamen boş olarak kaydedilemez.
Catch scope'unda hatayı okuma
Yalnızca bir şeylerin yanlış gittiğini bilen ama neyin yanlış gittiğini bilmeyen bir Catch scope'u, hata ayıklamada sana pek yardımcı olmaz. Somut hata mesajına ulaşmak için Catch scope'unda Diziyi filtrele eylemini, önceki eylemlerin durumunu ve çıktısını döndüren `result()` ifade işleviyle birlikte kullanırsın. Bu filtrelenmiş yanıttan hata kodunu ve hata metnini okuyup bunları örneğin bir HTML tablosu oluştur eylemine koyarsın; bunu e-postayla gönderebilir veya SharePoint ya da Dataverse'teki bir hata günlüğü listesinde saklayabilirsin.
Ayrıca `workflow()` işlevi, ortam ve akış kimliği gibi mevcut akış çalıştırmasına ait meta verileri sağlar. Oluştur eylemiyle birleştirerek buradan başarısız çalıştırmaya doğrudan giden bir bağlantı oluşturursun ve bunu bildirime eklersin. Böylece posta kutusuna yalnızca "bir hata oluştu" bilgisi değil, doğrudan sorunu çözebileceğin yere giden yol da ulaşır.
Yaygın tuzaklar
- İç içe geçme derinliği: Power Automate, scope'lardan, koşullardan, switch'lerden ve döngülerden oluşan en fazla sekiz iç içe düzeye izin verir. Try-Catch desenlerini iç içe yerleştirenlerin bu sınırı göz önünde bulundurması gerekir, aksi halde akış artık kaydedilemez.
- Tek eylem yerine toplu durum: Bir scope başarısız olursa, tasarımcı önce yalnızca tüm scope için "Başarısız" durumunu bildirir. İçindeki hangi tek eylemin gerçekten sorumlu olduğunu ancak scope'u çalıştırma geçmişinde genişlettiğinde görürsün.
- Tetikleyiciler ve yanıt eylemleri bir scope'un içine ait değildir. Akışın düzgün başlaması ve yanıt vermesi için bunlar dışarıda kalmalıdır.
- Çok fazla scope: Her tek eylemin kendi scope'una ihtiyacı yoktur. Try-Catch desenini, kritik yazma işlemleri veya harici sistem çağrıları gibi gerçekten katma değer sağladığı yerlerde bilinçli olarak kullan, aksi halde akış gereksiz yere karmaşıklaşır.
Bu deseni daha büyük, üretimdeki bir akışa güvenilir şekilde eklemek istiyorsan veya sürecinde bir Catch scope'unun gerçekten nerede gerekli olduğundan emin değilsen, NordFlux'un Power Automate danışmanlığı sana bu konuda destek olur. Akışın ve verilerin üzerindeki tam kontrol sende kalır, biz yalnızca düzgün bir kurulum konusunda yardımcı oluruz.
Sık sorulan sorular
Configure run after, bir programlama dilindeki Try-Catch ile aynı şey midir?
Teknik olarak hayır, işlevsel olarak evet. Power Automate'te bir eylemin otomatik olarak bir hata yoluna atlamasını sağlayan yerleşik bir istisna kavramı yoktur. Ancak bir scope'un çalıştırma sonrası koşulu üzerinden aynı davranışı elde edersin: Catch scope'u, tıpkı bir istisnada catch bloğunun çalışması gibi, yalnızca Try scope'u başarısız olduğunda çalışır.
Her tek eylem için ayrı bir çalıştırma sonrası koşulu belirlemem gerekir mi?
Hayır. Eylemlerini bir Try scope'unda topladığında, her eylemi ayrı ayrı güvence altına almak yerine, tüm scope için tek bir Configure run after ayarı yeterlidir. Bu, scope'ların eylem düzeyindeki birçok ayrı çalıştırma sonrası koşuluna kıyasla sağladığı pratik avantajlardan tam olarak biridir.
Catch scope'unda yanlışlıkla "başarılı" işaretini bırakırsam ne olur?
Bu durumda Try scope'u başarılı olsa bile Catch scope'u çalışır ki bu, bir hata yolunun amacına aykırıdır. Gerçek bir Catch scope'u için "başarılı" işaretini tutarlı biçimde kaldır ve yalnızca "başarısız oldu", "atlandı" ve "zaman aşımına uğradı" seçeneklerini etkinleştir.
Configure run after'ın yanı sıra bir yeniden deneme ilkesi de kullanabilir miyim?
Evet, ikisi birbirini iyi tamamlar. Eylem ayarlarındaki bir yeniden deneme ilkesi, önce geçici olarak başarısız olan bir eylemi, ideal olarak üstel olarak artan aralıklarla otomatik olarak yeniden çalıştırmayı dener. Eylem tüm yeniden denemelerden sonra da başarısız olursa, ancak o zaman Catch scope'un çalıştırma sonrası koşulu üzerinden devreye girer.
Başarısız bir scope içindeki hangi eylemin asıl sorun olduğunu nasıl anlarım?
Etkilenen akış çalıştırmasını çalıştırma geçmişinde aç ve orada başarısız olan scope'u genişlet. Bir scope dışarıya yalnızca tek bir toplu durum bildirdiğinden, somut hata mesajını kırmızı işaretiyle birlikte ancak scope içindeki tek tek eylem düzeyinde görürsün.
NordFlux UG (haftungsbeschränkt)
NordFlux, kuruluşlar için dijital çalışanlar kurar: tekrar eden işleri üstlenen otomasyonlar ve KI ajanları. Kontrol sizde kalır.
Otomasyon veya KI hakkında somut sorularınız mı var?
Ücretsiz bir ön analizde durumunuzu doğrudan görüşürüz. Bağlayıcı değildir.