Warum wird der Endlosschleifenschutz in meinem CRM-Workflow ausgelöst?

Aktualisieren

Ich hätte von Anfang an hinzufügen sollen - dies ist in Microsoft Dynamics CRM2011

Ich kenne mich mit CRM gut aus, kann aber das Verhalten meiner aktuellen Bereitstellung nicht erklären.

Bitte lesen Sie die Gliederung meines Szenarios, um zu verstehen, welche meiner Annahmen / Vorstellungen falsch sind (und daher, was diesen Fehler verursacht). Es entspricht nicht meinen Erwartungen.

Grundlegendes Szenario

Die Anforderung erfordert, dass ein Webdienst alle X Minuten aufgerufen wird (es wird hinzugefügt)steht aus Elemente zu einem Datenbankindex)Ich habe mich für die Verwendung eines Workflow- / benutzerdefinierten Entitätstriggermodells entschieden (d. H. Ich habe eine benutzerdefinierte Entität, für die ein CREATE-Plugin registriert ist. Das Plugin führt meine Logik aus. Ein zugehöriger Workflow wird gestartet, wenn"abgeschlossene" Zeit + [Zeitüberschreitungszeitraum] läuft ab. Nach Ablauf wird ein neuer Triggerdatensatz erstellt und der Workflow beendet.Die Plugin-Logik funktioniert einwandfrei. Das Workflow-Konzept funktioniert bis zu einem gewissen Punkt, aber nach einer gewissen Zeit bleibt der Workflow mit einem Fehler stehen:

Dieser Workflow-Job wurde abgebrochen, weil der Workflow, der ihn gestartet hat, eine Endlosschleife enthielt. Korrigieren Sie die Workflow-Logik und versuchen Sie es erneut. Informationen zur Workflow-Logik finden Sie in der Hilfe.

Also auf den Punkt gebracht - Standard-Endlosschleifenerkennung. Ich verstehe das Konzept und warum es existiert.

Spezifische Bereitstellung

Erstens denke ich, dass es für uns ziemlich sicher ist, den Inhalt des Plugin-Codes in diesem Szenario zu ignorieren. Es funktioniert einwandfrei, ist atomar und berührt CRM kaum (um genau zu sein, handelt es sich um ein Plugin vor einem Ereignis, das den Remote-Webdienst ausführt, auf eine Antwort wartet und dann das Datum / Uhrzeit-Attribut "Abgeschlossen am" in meinem Trigger-Datensatz setzt, bevor es übergeben wird die Zielentität zurück in die Pipeline). Solange ein Trigger-Datensatz erstellt wird, wird dieser Code ausgeführt und tut, was er sollte.

Nachdem ich den Inhalt des Plugins reduziert habe, könnte es ein Problem geben, das ich nicht schätze, wenn das Plugin im Vorerstellungsschritt der Entität registriert wird ...

So bleibt der Workflow selbst erhalten. Es ist einfach. Es läuft so:

Bei der Erstellung einer neuen Trigger-Entität ...Es hat ein Timeout von Trigger.new_completedon + 15 MinutenBei Zeitüberschreitung wird ein neuer Trigger-Datensatz erstellt (ohne den Wert "Abgeschlossen am" - dies wird vom Plugin festgelegt. Merken).Das ist alles - kein expliziter "Workflow beenden" (obwohl ich gerade einen hinzugefügt habe und ihn testen werde ...)

Mit dieser Einrichtung erstelle ich manuell einen neuen Auslöserdatensatz und der Prozess wird gut umgesetzt. Vorwärts rollen 1 Std. 58 Min. (Basierend auf dem letzten von mir ausgeführten Zyklus - wobei zu beachten ist, dass mein Plug-in-Code eine Minute dauern kann, bis er ausgeführt ist). Nach 7 erfolgreichen Ausführungszyklen (dh Erstellen und Fertigstellen neuer Workflow-Jobs) schlägt der achte mit dem fehl vorgenannter Fehler.

Was ich bereits weiß (korrigiere mich, wo ich falsch liege)

Die Rekursionstiefe ist standardmäßig auf 8 festgelegt. Wenn sich ein Workflow / Plugin 8 Mal selbst aufruft, wird eine Endlosschleife erkannt.

Die Rekursionstiefe wird alle eine Stunde zurückgesetzt (oder 10 Minuten - siehe "Warnungen" im verlinkten Blog?)

Rekursionstiefeneinstellungen können über PowerShell festgelegt werden oder SDK-Code mit der TasteBereitstellungs-Webdienst Nur in einer lokalen Bereitstellung (über das Cmdlet Set-CrmSetting)

Was ich nicht hören will (bitte)

"Rekursionstiefeneinstellungen ändern"

Ich kann die Einstellungen für die Bereitstellungstiefe für die Rekursion nicht ändern, da dies in einem Onlineszenario keine Option ist. Letztendlich werde ich auch eine Bereitstellung für CRM Online durchführen.

"Erhöhen Sie das Zeitlimit für Ihren Workflow"

Dies ist auch keine Option - die Neuindizierung muss alle 15 Minuten erfolgen, idealerweise früher.

Aktualisieren

@Boone schlug unten vor, dass das Timeout für die Rekursionstiefe nach 60 Minuten von zurückgesetzt wirdInaktivität anstatt alle 60 Minuten. Darin liegt das erste Missverständnis.

Während der Diskussion mit @alex schlug ich vor, dass die Korrelations-ID zwischen dem Erstellen einer Entität über den Workflow und dem Workflow, der letztendlich erstellt wird, möglicherweise bestehen bleibt. Die CorrelationId ist sowohl im Plugin als auch im Workflow und in allen Datensätzen, die von diesem Thread gespoolt werden, identisch. Ich suche jetzt nach Möglichkeiten, die CorrelationId (oder möglicherweise die Erstellung von Datensätzen) von der Entität und dem Workflow zu entkoppeln.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage