Frage

Ich versuche, ein folgendes Szenario zu erstellen:

  • eine Aufgabe, die dem Benutzer zugeordnet wird abgeschlossen
  • eine Aufgabe bekommen für den Manager erstellt der Benutzer Aufgabe neu zuzuweisen, wenn nötig
  • (nicht fragen, sie es auf diese Weise wollte)
  • eine E-Mail-Erinnerung neeeds gesendet werden, wenn die Aufgabe ein Fälligkeitsdatum ist kurz vor dem

Also, ich daran gedacht, mit EventHandlingScope hierfür:

  • ich für einen Taskwechsel höre auf dem Hauptarm eventhandlingscope Aktivität,
  • Hören Taskwechsel in ereignisgesteuerte Zweig neu zuzuweisen - und wenn Umhängen Aufgabe aktiviert wird, weisen Sie die erste Aufgabe für den Benutzer angegeben
  • in einem anderen Event Driven Zweig eine Verzögerungsaktivität verwenden und in regelmäßigen Abständen überprüfen, ob Benutzer zugewiesene Aufgabe ein Fälligkeitsdatum nähert und eine E-Mail Erinnerung
  • senden

Also, ich aber eventhandlingscope würde dies gut sein, und es ist meist, außer für das Problem mit der Delayactivity.

Wenn ich eine Verzögerungsaktivität in einem der Event-Handler Zweige es einmal feuert setzen, aber nicht mehr. Während, wenn ich legen sie dort eine onTaskChange Aktivität feuert es jedes Mal jemand diese Aufgabe ändert.

Also, das ist das erwartete Verhalten? Warum funktioniert Delayactivity Schleife? Wie könnte ich anders mache das? Mein Gedanke ist, mit einem CAG, aber das sieht ein wenig komplexe ...

Update: Das Problem mit CAG ist, dass die ganze Sache blockiert, bis Verzögerung Aktivität ausgelöst, auch wenn das onChange Ereignis ausgelöst. Dies macht Sinn, aber macht es ein bisschen schwieriger zu verwenden.

Update2: Ich habe den Text umformuliert, damit es hoffentlich klarer

War es hilfreich?

Lösung

Die Lösung

Die fundemental Aktivität Anordnung, die dieses Problem löst, ist ein WhileActivity eine ListenActivity enthält.

Die hören Aktivität 3 EventDrivenActivity Zweige gegeben. Auf den ersten Ihre „User Task Completed“ Zweig ist, der zweite ist der Zweig „Manager, um den zugeordneten Benutzer geändert“ und die dritte enthält eine DelayActivity gefolgt von Ihrer E-Mail-Logik.

In einer Aktivität hört einer des Zweiges kann die Aktivität Listen vervollständigen und wenn sie die anderen Aktivitäten in der Listen-Aktivität tun wird abgebrochen.

Sie müssen die „User Aufgabe abgeschlossen“ -Sequenz, um sicherzustellen, setzt einen gewissen Wert, der durch die while-Schleife getestet werden können, so dass die while-Schleife wird beendet, wenn ein Benutzer eine Aufgabe abgeschlossen ist.

Wenn ein Zweig andere als die „User Task Completed“ Niederlassung ist zuständig für den Abschluss der der ListenActivity Workflow Schleife zurück zum ListenActivity und wieder führen alle drei ereignisgesteuerte Aktivitäten einschließlich der, die DelayActivity enthält.

Beachten Sie, dass diese von dem EventHandlingScope Ansatz ist etwas anders, weil die „anhören abgeschlossene User-Task“ wird erhalten abgebrochen und neu ausgeführt, während mit dem EventHandlingScope, die nicht passieren würde. diese IMO eine bessere Anordnung, da es bedeutet, dass der Benutzer, der aktuell ausgewählten wurde die Aufgabe zu Beginn der Listen-Aktivität zu tun ist garantiert am Ende unverändert sein (denn wenn es die ganze Aktivität geändert wird, wird verworfen und ein neuer gestartet ).

Warum nur die Verzögerung abgefeuert einmal im EventHandlingScope

effektiv, was Sie aufgebaut haben ist ein Bereich, der für zwei Ereignisse hören. Einer war Ihre Manager zugewiesen Benutzerereignis zu ändern, der andere war ein „Timer gefeuert Ereignis“.

Nun ist die Art und Weise seines in der Dokumentation beschrieben, es klingt wie einige Schleifen beteiligt sind, als ob einmal ein diese Aktivitäten vervollständigt sie neu gestartet werden. Doch ganz ist es nicht so, es eigentlich nur weiterhin für das ursprüngliche Ereignis zu hören und den Inhalt, wenn ein anderes solchen Ereignis ausgelöst wird.

erneut ausführen

Im Falle des DelayActivity gibt es einige interne „Timer gefeuert Ereignis“, die gehört wird. Wenn die Verzögerung wird zuerst das Timeout eingegeben Setup ist so, dass der Timer zu gegebener Zeit ausgelöst wird, hört es dann für dieses Ereignis. Sobald es der Umfang kehrt zu hören auf ein „Timer gefeuert Ereignis“ ausgelöst hat, jedoch gibt es keinen Wieder Lauf des ursprünglichen Code, dass das Setup daher das Timeout kein anderes „Timer gefeuert Ereignis“ wird weiter kommen.

Andere Tipps

Ich weiß, dass Sie nicht hören wollen, aber Sie wäre besser dran, einen Workflow anstelle des Handlers erstellen, wie Workflows die Zeitdimension viel besser zu handhaben ist als sie „langer Lauf“ sind. Eventhandler werden mehr scoped für einen Moment in time Ereignis sie löst und dann eine Aktion, die sie vervollständigen. Nicht nur das, sondern urteilt, was Sie schreiben, wenn die Voraussetzungen so einfach sind, können Sie einen Sharepoint Designer Workflows erstellen, so dass Sie nicht einmal offen Visual Studio crach müssen.

Auch nicht sicher, ob Sie das wissen, aber Sharepoint Aufgaben E-Mails senden Sie heraus, werden diese Aufgaben täglich Mahnungen, wenn die Aufgabe spät ist, so dass Sie die Box out-of-your Verzögerung Aktivität zu adressieren Funktionalität möglicherweise in der Lage zu verwenden .

Schließlich, wenn Sie im Debug-Modus ausgeführt werden, und Sie haben Ihre taskid hartcodiert, können Sie nur eine Aufgabe pro Debug-Sitzung sonst Ihre Event-Handler stoppen ausgeführt werden, wenn ein anderes Element mit der gleichen ID wird auf Sharepoint hinzugefügt. Dies könnte erklären, warum Ihre Verzögerung Aktivität blockiert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top