
Obejście ChildFlowNeverPublished jako warstwa niezarządzana
Wdrożenie rozwiązania nie zawsze jest tak proste, jak mogłoby się wydawać na początku. Podczas jednego z naszych testowych wdrożeń, wszystkie procesy…
└ Wdrożenie Child Flow Solution ┐
Wyzwanie
Wdrożenie rozwiązania nie zawsze jest tak proste, jak mogłoby się wydawać na początku. Podczas jednego z naszych testowych wdrożeń, wszystkie procesy zostały automatycznie wyłączone. Chociaż jest to dość normalna sytuacja po wdrożeniu, tym razem próba włączenia ich zakończyła się komunikatem „ChildFlowNeverPublished”. Ciekawe, biorąc pod uwagę fakt, że nigdy wcześniej nie było potrzeby ręcznego publikowania rozwiązań Power Automate przed. Jeszcze ciekawsze, biorąc pod uwagę, że publikowanie rozwiązania nie pomogło. Ani publikowanie przepływów pojedyńczo. Więc co się stało? I dlaczego nie wydarzyło się to w środowisku deweloperskim?
Rozwiązanie
Po poszukiwaniu odpowiedzi wewnątrz moich przepływów, sprawdziłem internet w poszukiwaniu odpowiedzi. Po krótkim badaniu, wygląda na to, że Tomek Poszytek również napotkał ten sam problem i dla nas obu, powodem wyjątku były te same – odwołania cykliczne w rozwiązaniu. Jednak projekt mojej automatyzacji różnił się nieco od tego Tomka:
Initial design
Teraz, zgodnie z artykułem mojego kolegi, dodanie proxy powinno rozwiązać problem. Następnie projekt wyglądałby tak:
Per proxy design
Powyższe rozwiązanie wydaje się nie usuwać podstawowego problemu na pierwszy rzut oka. Przepływ proxy nie łamie odwołania cyklicznego w tym scenariuszu – po prostu dodaje jeszcze jeden krok do niego. Jednak żaden z przepływów nie odnosi się bezpośrednio do innych, co może być tu wskazówką. Niestety, powyższa implementacja nie rozwiązała problemu po wdrożeniu do środowiska testowego – wyjątek ChildFlowNeverPublished nadal występował.
Więc co z tym zrobić? Odwołanie cykliczne wydaje się być problemem i powinno zostać przerwane, aby zapobiec pojawieniu się błędu. Jak można to przerwać? Po burzy mózgów nad problemem, doszedłem do wniosku, że w systemie deweloperskim cała obróbka nigdy wcześniej nie została wyłączona. Po włączeniu wszystko działało bez zarzutu. Więc to, co trzeba zrobić, to przerwać odwołanie cykliczne tylko po to, aby włączyć przepływy. Później ta zmiana mogłaby zostać cofnięta. I wydaje się, że Power Automate ma narzędzie do tego – warstwę niezarządzaną.
Aby to zrobić, edytowałem Uruchom przepływ dziecka w przepływie Przetwarzania, aby odnosił się do fikcyjnego przepływu i zapisałem go. Jeden punkt dla mnie – zapisano poprawnie. Następnie włączyłem go – drugi punkt, przepływ włączył się bez wyjątku. Projekt w tym momencie wyglądał następująco:
Broken circular reference with dummy reference
Odwołanie cykliczne jest tymczasowo przerwane, więc spróbowałem z innymi przepływami. Wszystkie włączyły się bez błędu. Wreszcie nadszedł czas, aby cofnąć zmiany. Ze wszystkimi włączonymi przepływami, usunąłem warstwę niezarządzaną w przepływie przetwarzania i voila! Bez wyjątków. Dalsze testowanie przepływu wykazało, że działa zgodnie z przeznaczeniem. Przypadek rozwiązany ✅
Podsumowanie
Wdrożenie Child Flow Solution może napotkać na wyzwania, takie jak błąd ChildFlowNeverPublished. Kluczem do rozwiązania tego problemu jest zrozumienie, że może on być spowodowany odwołaniami cyklicznymi w rozwiązaniu. Tymczasowe przerwanie tych odwołań poprzez edycję przepływów i użycie warstwy niezarządzanej może pomóc w włączeniu przepływów bez wyjątków. Po włączeniu wszystkich przepływów, zmiany mogą zostać cofnięte, przywracając oryginalną strukturę rozwiązania.
Podobne przypadki zostały opisane przez Tomka Poszytek na jego blogu. Jego rozwiązanie polegało na dodaniu przepływu proxy, aby przerwać odwołania cykliczne, co jednak nie zadziałało w moim przypadku. Każde wdrożenie może mieć swoje własne unikalne wyzwania, dlatego ważne jest, aby być elastycznym i kreatywnym w podejściu do rozwiązywania problemów.

