Dlaczego w moim obiegu pracy CRM uruchamiana jest nieskończona ochrona pętli?

Aktualizacja

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 scenariusz

Wymó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żenie

Po 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.

questionAnswers(2)

yourAnswerToTheQuestion