Dlaczego w moim obiegu pracy CRM uruchamiana jest nieskończona ochrona pętli?
Powinienem był dodać od początku - to jest w Microsoft Dynamics CRM2011
Znam CRM dobrze, ale nie potrafię wyjaśnić zachowania na moim obecnym wdrożeniu.
Proszę przeczytać zarys mojego scenariusza, aby pomóc mi zrozumieć, które z moich założeń / zrozumienia są błędne (a zatem, co powoduje ten błąd). To nie jest zgodne z moimi oczekiwaniami.
Podstawowy scenariuszWymóg wymaga, aby usługa internetowa była wywoływana co X minut (dodajew oczekiwaniu elementy do indeksu bazy danych)Zdecydowałem się użyć modelu wyzwalacza przepływu pracy / encji niestandardowej (tj. Mam niestandardową jednostkę, która ma zarejestrowaną wtyczkę CREATE. Wtyczka wykonuje moją logikę. Towarzyszący przepływ pracy jest uruchamiany, gdy„zakończony” czas + [limit czasu] wygasa. Po wygaśnięciu tworzy nowy rekord wyzwalacza i kończy się przepływ pracy.Logika wtyczki działa dobrze. Koncepcja przepływu pracy działa dobrze do pewnego punktu, ale po pewnym czasie przepływ pracy przestaje działać:To zadanie przepływu pracy zostało anulowane, ponieważ przepływ pracy, który go rozpoczął, zawierał nieskończoną pętlę. Popraw logikę przepływu pracy i spróbuj ponownie. Aby uzyskać informacje na temat logiki przepływu pracy, zobacz Pomoc.
W skrócie - standardowe wykrywanie nieskończonej pętli. Rozumiem pojęcie i dlaczego ono istnieje.Określone wdrożeniePo pierwsze, uważam, że całkiem bezpiecznie jest zignorować zawartość kodu wtyczki w tym scenariuszu. Działa dobrze, jest atomowy i prawie nie dotyka CRM (żeby było jasne, jest to wtyczka przed zdarzeniem, która uruchamia zdalną usługę internetową, czeka na odpowiedź, a następnie ustawia atrybut „data ukończenia” na moim rekordzie Trigger przed przekazaniem jednostka docelowa z powrotem do rurociągu). Dopóki tworzony jest rekord wyzwalacza, ten kod działa i robi to, co powinien.
Po zdyskontowaniu zawartości wtyczki może być problem, którego nie doceniam, gdy wtyczka jest zarejestrowana na etapie tworzenia wstępnego elementu ...
W ten sposób sam przepływ pracy pozostaje. To proste. Działa tak:
Podczas tworzenia nowej jednostki wyzwalacza ...ma limit czasu Trigger.new_completedon + 15 minutpo przekroczeniu limitu czasu tworzy nowy rekord wyzwalacza (bez wartości „zakończono” - jest to zapamiętywane przez wtyczkę)To wszystko - brak wyraźnego „końca pracy” (choć właśnie teraz dodałem jeden i ustawię go testując ...)Dzięki tej konfiguracji ręcznie tworzę nowy rekord Trigger, a proces ładnie się obraca. Przewiń do przodu o 1h 58 min (w oparciu o ostatni cykl, który uruchomiłem - pamiętając, że zakończenie działania mojego kodu wtyczki może potrwać minutę), po 7 udanych cyklach wykonania (tj. Nowe zadania przepływu pracy są tworzone i uzupełniane), ósmy z nich kończy się niepowodzeniem wyżej wymieniony błąd.
Co już wiem (popraw mnie, gdzie się mylę)Głębokość rekurencji jest domyślnie ustawiona na 8. Jeśli przepływ pracy / wtyczka wywołuje się 8 razy, wykrywana jest nieskończona pętla.
Głębokość rekursji jest resetowana co godzinę (lub 10 minut - patrz „Ostrzeżenia” w połączonym blogu?)
Ustawienia głębokości rekurencji można ustawić za pomocą PowerShell lub kod SDK przy użyciuWdrożenie usługi sieci Web tylko w instalacji lokalnej (przez Cmdlet Set-CrmSetting)
Czego nie chcę słyszeć (proszę)„Zmień ustawienia głębokości rekurencji”
Nie mogę zmienić ustawień głębokości rekurencji wdrażania, ponieważ nie jest to opcja w scenariuszu online - ostatecznie będę także wdrażać w CRM Online.
"Zwiększ limit czasu w przepływie pracy"
To też nie jest opcja - reindeks musi się odbywać co 15 minut, najlepiej wcześniej.
Aktualizacja@Boone sugeruje się poniżej, że limit czasu głębokości rekursji jest resetowany po 60 minutachbezczynność zamiast co 60 minut. W tym leży pierwsze nieporozumienie.
Dyskutując z @alex, zasugerowałem, że może istnieć pewna trwałość CorrelationId między tworzeniem encji za pomocą przepływu pracy a przepływem pracy, który zostanie wygenerowany przez ultimates ... No cóż. CorrelationId jest taki sam zarówno w wtyczce, jak iw przepływie pracy, a także w wszystkich rekordach, które buforują z tego wątku. Obecnie szukam sposobów na oddzielenie CorrelationId (lub może utworzenie rekordów) od jednostki i przepływu pracy.