SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Bedingung im Workflow wird ignoriert

Geprüfte Antwort Dieser Beitrag hat 3 Antworten

Ohne Rang
91 Beiträge
Myrcella erstellt 8 Okt. 2014 13:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community,

ich habe folgende Aufgabe gestellt bekommen:

Zu einer Dokumentenbibliothek soll eine Liste erstellt werden, in die alle Stammdaten der Dokumente in der Bibliothek übernommen werden. Die Dokumente sind aber jeweils in verschiedenen Sprachen vorhanden, sodass mehrere Dokumente oft weitestgehend gleiche Stammdaten haben. Damit sich die Einträge in der Liste nicht doppeln, habe ich einen SP 2013-Workflow in SPD 2013 erstellt, der dieses Problem für mich lösen soll.

Der Workflow startet beim Hochladen oder Bearbeiten eines Dokuments in der Bibliothek. Im Workflow gibt es eine Variable "Durchlauf" und eine Variable "Probe", beide vom Typ Integer. "Durchlauf" wird zu Beginn auf den Wert 1, "Probe" auf den Wert 100000 festgelegt. Eine Schleife soll so lange laufen, bis "Durchlauf" größer 2000 ist. (2000 ist hierbei die ungefähre Anzahl der sich in der Liste befindlichen Elemente.)

In der Schleife wird zunächst geprüft, ob es das Listenelement mit der ID vom Wert wie "Durchlauf" einige Stammdaten mit dem eben hochgeladenen bzw. bearbeiteten Dokument in der Bibliothek gemein hat. Wenn dies der Fall ist, also bereits ein Eintrag für das eben hochgeladene bzw. bearbeitete Dokument in der Liste besteht, wird dieser aktualisiert und dabei um einige Daten ergänzt. Dann wird die Variable "Probe" auf den Wert von "Durchlauf" gesetzt und dieser Wert wird mit einer Anmerkung im Workflowverlauf protokolliert. Dann wird die Variable "Durchlauf" auf 2000 gesetzt. Eine Alternative besteht nicht.

Nach der Bedingung, aber noch in der Schleife wird der aktuelle Wert von "Durchlauf" mit einer Anmerkung im Workflowverlauf protokolliert und dann um 1 erhöht.

Nachdem die Schleife vollständig durchlaufen wurde, wird geprüft, ob die Variable "Probe" noch den Wert 100000 hat. Wenn ja, wird ein Element in der Liste mit den Stammdaten des eben hochgeladenen bzw. bearbeiteten Dokuments in der Bibliothek erstellt und eine entsprechende Anmerkung im Workflowverlauf protokolliert. Danach endet der Workflow.

Der SPD sagt mir, dass der Workflow keine Fehler enthält. Die Workflowverlaufsliste gibt mir zu verstehen, dass die Schleife 2000x durchlaufen wird und danach wird wie im Workflow angegeben ein Listenelement erstellt. Soweit so gut. Wenn aber schon ein entsprechendes Element vorhanden ist, wird das in der schleifeninternen Bedingung nicht erfasst, sie wird einfach übersprungen, die Schleife bis zum Ende durchlaufen und ein neues Element erstellt.

Kann mir jemand sagen, warum diese Bedingung übergangen wird? Ich bin für jegliche Hilfe dankbar!

VG Myrcella

Alle Antworten

Ohne Rang
91 Beiträge
Myrcella Als Antwort am 9 Okt. 2014 15:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Versuchsweise habe ich die schleifeninterne Bedingung um eine Else-Verzweigung ergänzt, die mir den Titel des Listenfeldes mit der ID vom Wert "Durchlauf" protokolliert. Der Protokolleintrag ist jedoch immer leer. Könnte es sein, dass die Workflow-Bedingung nie erfüllt ist, weil ID vom Typ Integer ist und "Durchlauf" vom Typ Real? Da ich "Durchlauf" bei jedem Schleifendurchlauf neu berechnen muss und eine Berechnung kein Ergebnis vom Typ Integer zurückgeben kann, kann "Durchlauf" leider doch nicht vom Typ Integer sein wie ursprünglich gewollt.

Alternative: Ist es in einer Zählschleife möglich, die Zahl des aktuellen Schleifendurchlaufs in eine Variable zu setzen? Das würde mein Problem vermutlich lösen.

VG Myrcella

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Okt. 2014 15:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Myrcella"]Könnte es sein, dass die Workflow-Bedingung nie erfüllt ist, weil ID vom Typ Integer ist und "Durchlauf" vom Typ Real?[/quote]

Das wird es wahrscheinlich sein.

[quote user="Myrcella"]Da ich "Durchlauf" bei jedem Schleifendurchlauf neu berechnen muss und eine Berechnung kein Ergebnis vom Typ Integer zurückgeben kann, kann "Durchlauf" leider doch nicht vom Typ Integer sein [/quote]

Lege einfach eine weitere Integer-Variable an und weise ihr den Wert von "Durchlauf" zu. Damit hast Du zwei Integer zum Vergleichen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
91 Beiträge
Myrcella Als Antwort am 10 Okt. 2014 07:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

danke für deine Antwort. Ich habe deinen Rat befolgt und eine zusätzliche Variable angelegt. Es funktionierte immer noch nicht. Dann habe ich mir mal die IDs der Listeneinträge anzeigen lassen und wäre am liebsten im Boden versunken.

Problem war folgendes: Ich hatte zu Testzwecken den Workflow nicht 2000x, sondern nur 20x laufen lassen, quasi von 1 bis 20. Die Liste, in der die neuen Einträge landen sollten, war zu Beginn des Tests völlig leer gewesen, mittlerweile hat sie ca. 10x den gleichen Eintrag. Dann habe ich mir vorhin mal die IDs anzeigen lassen, weil ich dachte, dass es doch nicht sein kann, dass er jeden einzelnen Eintrag überspringt.

Es stellte sich heraus, dass er das auch nicht getan hat. Bevor die Liste nämlich völlig leer war, hatte ich über 500 zuvor importierte Einträge gelöscht. Die IDs begannen also bei 545. Dann habe ich die Workflow-Schleife von 540 bis 590 laufen lassen und - tadaa! - der Workflow funktioniert perfekt.

Also danke für die Hilfe! Ob es nun wirklich an der Variable lag oder nicht, kann ich nicht mehr sagen, aber jetzt funktioniert der Workflow und da wird nichts mehr geändert. :)

Viele Grüße,

Myrcella