Freigeben über


Konfigurieren der Aufgabenserie in Planner (Vorschau)

In diesem Artikel wird beschrieben, wie Sie die Wiederholung mit Planner-Aufgaben verwenden, um die Erstellung sich wiederholender Aufgaben zu automatisieren. Mit der Wiederholungseigenschaft für einen Planner-Task können Benutzer die Erstellung zukünftiger Aufgaben automatisieren, die reale Aufgaben darstellen, die wiederholt ausgeführt werden müssen.

Benutzerszenarien

Die folgenden Szenarien werden unterstützt:

  • Fügen Sie einem vorhandenen Task wiederholungsverhalten hinzu, und erstellen Sie so eine Serie. Alternativ können Sie eine neue Aufgabe mit definierter Wiederholung erstellen. Das Endergebnis für beide ist identisch: eine wiederkehrende Aufgabe, die erste in einer serieierenden Reihe. Benutzer geben den Zeitplan für die Wiederholung an.

  • Bearbeiten Sie den Wiederholungszeitplan für eine vorhandene Serie.

  • Setzen Sie eine Reihe fort. Wenn sie einen Vorgang abgeschlossen markieren, wird ein neuer Vorgang generiert, um die Reihe gemäß dem Wiederholungszeitplan fortzusetzen. Wenn die aktive Aufgabe in einer Reihe gelöscht wird, sollte der Benutzer aufgefordert werden, zu bestimmen, ob er die Reihe fortsetzen oder beenden möchte. Wenn der Client die Wiederholung nicht kennt und keine Eingabeaufforderung bietet, sollte die Serie fortgesetzt werden. Es sollte nicht versehentlich beendet werden.

  • Beenden einer Reihe durch:

    • Löschen der aktiven Aufgabe in der Reihe (und Auswahl von Ja , um die Reihe zu beenden).
    • Beenden der Reihe, ohne die aktive Aufgabe zu löschen.
  • Reanimieren Sie eine Reihe. Wenn die Serie beendet wurde, sollte es möglich sein, die Serie wiederhergestellt zu werden.

Konzeptionelle Unterschiede zwischen besprechungsserien und wiederkehrenden Aufgaben

In diesem Abschnitt wird ein reales Szenario für wiederkehrende Aufgaben beschrieben, um die interessanten Unterschiede zwischen besprechungsserien und wiederkehrenden Aufgaben zu veranschaulichen und den Problembereich von Änderungen an einem Wiederholungsmuster zu untersuchen.

Das folgende Beispiel umfasst einen Bericht, der regelmäßig ausgefüllt werden muss, und verwendet eine wiederkehrende Aufgabe, um den Abschluss des Berichts nachzuverfolgen.

Der Bericht und die damit verbundene Aufgabe werden alle 2 Wochen am Freitag fällig; die Serie begann am 14. Mai 2021. Der erste Bericht ist an diesem Datum, Freitag, 14. Mai, fällig. Vorlauf bis zum 7. Januar 2022, 34 Wochen später. Die Person, die die Berichte erstellt hat, nahm sich im Dezember eine Auszeit, und niemand hat die Berichte abgeschlossen. Die aktuelle Wiederkehrende Aufgabe (und der entsprechende Bericht) ist am 10. Dezember fällig. Der Bericht und die zugehörige Aufgabe sind jetzt 4 Wochen überfällig.

Anmerkung: An diesem Punkt wird der Kontrast zwischen wiederkehrenden Besprechungen und Ereignissen deutlich. Besprechungen müssen nicht als abgeschlossen markiert werden, damit ein automatisiertes System die nächste Besprechung im Kalender plant. Das Abschließen einer überfälligen Aufgabe kann eine andere Aufgabe generieren, die in der Vergangenheit fällig ist, aber es gibt kein Konzept, eine Besprechung in der Vergangenheit abzuschließen. Die nächste Instanz einer Besprechung liegt immer in der Zukunft, basierend auf dem heutigen Datum. Das heutige Datum wird nicht verwendet, um Fälligkeitsdaten von wiederkehrenden Vorgängen zu berechnen, um zu vermeiden, dass verspätete Arbeiten aus dem Überblick geraten.

Wenn der Wiederholungszeitplan für diesen Vorgang nicht bearbeitet und der Vorgang vom 10. Dezember als abgeschlossen markiert ist, wird die nächste Aufgabe für die Reihe mit dem Fälligkeitsdatum 24. Dezember instanziiert.

Angenommen, es wird eine Entscheidung getroffen, dass dieser Bericht in Zukunft alle 3 Wochen und nicht alle 2 Wochen erfolgen sollte. Die Entscheidung könnte sogar sein, dass der 3-Wochen-Rhythmus rückwirkend für die überfälligen Berichte sein sollte. Diese Änderung lädt verschiedene mögliche Optionen ein, wie die Fortsetzung der Reihe definiert werden kann:

  • Sollte das Fälligkeitsdatum am 10. Dezember geändert werden?
  • Wann sollte die nächste Aufgabe fällig sein?

Im Folgenden sind der aktuelle Status der wiederkehrenden Aufgabe und die Entscheidung aufgeführt:

  • Der aktuelle Vorgang hat das Fälligkeitsdatum 10. Dezember 2021.
  • Die zuvor abgeschlossene Aufgabe wurde am 26. November 2021 fällig.
  • Es wird entschieden, den Rhythmus von 2 Wochen auf 3 Wochen zu ändern; die Änderung gilt rückwirkend für die überfälligen Berichte.

Unter Berücksichtigung des Kontexts sind zwei Optionen möglich, und beide sind gültige Kundenberichte, wie die Serie geändert werden kann, um dem neuen 3-Wochen-Rhythmus Rechnung zu tragen.

Option 1: Ändern Sie den Vorgang vom 10. Dezember so, dass er 3 Wochen nach dem vorherigen Vorgang vom 26. November fällig wird. Der Fälligkeitsdatum des aktuellen Vorgangs wurde in den 17. Dezember geändert, und der folgende Vorgang ist am 7. Januar fällig.

Option 2: Behalten Sie das aktuelle Fälligkeitsdatum am 10. Dezember bei, und ändern Sie den Rhythmus für die folgende Aufgabe, die am 31. Dezember fällig ist.

Planner unterstützt beide Optionen; Das heutige Datum berücksichtigt nicht, wie diese verschiedenen Fälle behandelt werden. Dieses Beispiel wird in Beispiel 1: Ändern des Musters mit und ohne Änderungen an patternStartDateTime näher untersucht.

Definitionen

Die folgenden Begriffe werden verwendet, um Planner-Aufgaben mit Wiederholung zu besprechen und zu beschreiben:

Definition einer Aufgabe mit aktiver Wiederholung

Wenn die folgenden drei Bedingungen erfüllt sind, weist plannerTaskeine aktive Wiederholung auf:

  • Die percentComplete-Eigenschaft hat einen Wert kleiner als 100.
  • recurrence.nextInSeriesTaskId ist null oder nicht definiert.
  • recurrence.schedule enthält einen gültigen plannerRecurrenceSchedule mit einem wert ungleich NULL nextOccurrenceDateTime.

Eine Aufgabe mit aktiver Wiederholung (Vorgang A aufrufen) kann den Wiederholungsmechanismus des Diensts auslösen, der eine neue Aufgabe (Aufgabe B) erstellt, um die Serie fortzusetzen. In diesem Fall ist für Aufgabe Adie recurrence.nextInSeriesTaskId auf die ID von Aufgabe B festgelegt. Da Aufgabe A Bedingung 2 nicht mehr erfüllt, hat sie keine aktive Wiederholung mehr. Aufgabe A kann nie wieder eine aktive Wiederholung aufweisen, da nextInSeriesTaskId eine schreibgeschützte Eigenschaft ist und der Dienst den Wert nie löscht.

Definition einer Serienreihe

Eine Wiederholungsreihe (auch als Serie bezeichnet) ist eine sequenzielle Reihe von Aufgaben. Die Reihe beginnt, wenn die Wiederholung zum ersten Mal für eine Aufgabe definiert wird, und die Reihe wird durch die automatische Erstellung neuer Aufgaben mit derselben recurrence.seriesId fortgesetzt.

  • Aufgaben, die dieselbe recurrence.seriesId verwenden, gehören zur gleichen Serienreihe.
  • Jede Aufgabe in der Reihe verfügt über eine eindeutige recurrence.occurenceId.
  • Die erste Aufgabe in der Reihe weist eine occurrenceId von auf 1.
  • Wenn der Wiederholungsmechanismus der ersten Aufgabe ausgelöst wird (indem er als abgeschlossen oder gelöscht markiert wird, während er eine aktive Wiederholung aufweist), wird die zweite Aufgabe mit einer occurenceId von 2erstellt. Dieser Prozess wird fortgesetzt, bis die Serienreihe beendet wird.

Vermeiden des mehrdeutigen Begriffs "Wiederkehrende Aufgabe"

In der allgemeinen Sprache bezieht sich der Begriff wiederkehrende Aufgabe manchmal auf die eindeutige Aufgabe mit aktiver Wiederholung innerhalb einer Reihe; und bezieht sich manchmal auf die Wiederholungsreihe selbst oder auf alle Aufgaben innerhalb der Wiederholungsreihe. Diese Mehrdeutigkeit ist in gesprochenem Englisch üblich: Auf die gleiche Weise kann sich der wöchentliche Bericht auf eine Instanz des Berichts oder auf die wiederkehrende Verantwortung beziehen, den Bericht jede Woche zu erstellen. Aufgrund dieser Mehrdeutigkeit wird die Verwendung des Begriffs "wiederkehrende Aufgabe " vermieden; stattdessen wird einer der folgenden Begriffe bevorzugt: Aufgabe mit aktiver Wiederholung oder Serie.

Ressourcentypdetails

Das Arbeiten mit Wiederholungen für Planner-Aufgaben umfasst die Verwendung vieler Ressourcentypen: plannerTaskRecurrence, plannerRecurrenceSchedule und recurrencePattern. In den folgenden Abschnitten finden Sie weitere Informationen zu den beiden letzten Ressourcentypen.

plannerRecurrenceSchedule

PlannerRecurrenceSchedule kapselt eine Serienmusterdefinition (Pattern), ein Startdatum für dieses Muster (patternStartDateTime) und eine vom System generierte Eigenschaft, die das nächste Vorkommensdatum (nextOccurrenceDateTime) angibt.

Das Muster ist ein recurrencePattern; Weitere Informationen finden Sie unter Planner-spezifische Hinweise zu recurrencePattern.

Das patternStartDateTime gibt das Startdatum und die Uhrzeit der Reihe als DateTimeOffset an. PatternStartDateTime muss ein Wert ungleich NULL zugewiesen werden, wenn die Pattern-Eigenschaft verwendet wird. Dies ist derzeit die einzige Möglichkeit zum Definieren der Wiederholung. Clients sollten diesen Wert im Allgemeinen neu zuweisen, wenn sie eine Änderung an recurrence.schedule.pattern vornehmen, um das Startdatum des neuen Musters anzugeben. Wenn Clients jedoch keinen Wert enthalten, setzt der Dienst die Reihe mit einem Standardwert basierend auf dem Zeitplan fort. Weitere Informationen finden Sie in den folgenden Hinweisen und Erläuterungen.

NextOccurrenceDateTime ist ein schreibgeschütztes systemgeneriertes Feld. Es stellt das vom Dienst berechnete Datum bereit, das als dueDateTime für den nächsten plannerTask in der Reihe verwendet wird. NextOccurrenceDateTime wird aus dem Muster zusammen mit dem PatternStartDateTime-Wert oder einem Ankerwert berechnet, der das ursprünglich geplante Datum des angegebenen Vorgangs nachverfolgt.

Anmerkung: Planner verwendet derzeit nicht den Ressourcentyp recurrenceRange .

Plannerspezifische Hinweise zu recurrencePattern

Im Folgenden sind Planner-spezifische Einschränkungen für recurrencePattern aufgeführt:

  • relativeMonthly und relativeYearly muster geben möglicherweise nicht mehr als einen Tag für daysOfWeek an.
  • Wenn weeklydaysOfWeek bei Mustern mehr als einen Tag enthält, muss das Intervall sein 1.

Erläuterungen zu recurrencePattern:

  • Wenn eine Eigenschaft in einem recurrencePattern geändert wird, müssen alle relevanten Mustereigenschaften angegeben werden. Beispielsweise kann ein Muster mit Typ = daily und Intervall = 1 nicht nur mit Intervall = 2 gepatcht werden. Andernfalls gibt der Dienst einen 400 Bad Request Antwortcode zurück. Die type-Eigenschaft = daily muss auch angegeben werden, obwohl sich der Typ nicht ändert. Dies ist ein normales Verhalten für den Ressourcentyp recurrencePattern , obwohl einige andere Planner-Eigenschaften anders funktionieren.

  • Nicht verwendete Eigenschaften werden automatisch einem Standardwert zugewiesen.

    • Beispielsweise wird die month-Eigenschaft nur für jährliche Muster mit gültigen Werten von 1 bis 12verwendet. Die dailyMuster , weeklyund monthly wurden 0 jedoch der month-Eigenschaft zugewiesen, da 0 der Standardwert für einen ganzzahligen Wert ist.
    • Enumerationseigenschaften, einschließlich firstDayOfWeek und index, rufen Standardwerte ab, die dem ersten Enumerationswert entsprechen: sunday bzw first. .
  • Wenn absoluteMonthly der ausgewählte dayOfMonth in einem bestimmten Monat nicht vorhanden ist, wird bei Mustern der letzte Tag des Monats ersetzt.

    • Beispiel: Wenn dayOfMonth ist 31 und Sie für April erneut auftreten, ist das ausgewählte Datum der 30. April.
    • Beispiel: Wenn dayOfMonth , 30oder 31 ist 29und Sie für Februar wiederholt werden, ist das ausgewählte Datum der letzte Tag im Februar.
  • Ebenso ist für absoluteYearly Muster mit month = 2 und dayOfMonth = 29 das ausgewählte Datum in Nicht-Schaltjahren der 28. Februar.

  • Bei weekly Mustern wird die firstDayOfWeek-Eigenschaft verwendet, um zwischen dem zu unterscheiden, was diese Woche betrachtet wird, und dem, was in der nächsten Woche berücksichtigt wird. Dies ist relevant, wenn Sie ein weekly Muster ändern. Die nächste Aufgabe ist für die nächste Woche geplant, und firstDayOfWeek bestimmt, wann die nächste Woche beginnt.

Beispiele für die Auswirkung von FirstDayOfWeek auf Änderungen an einem wöchentlichen Muster

Bei einer Aufgabe mit aktiver Wiederholung mit den folgenden Eigenschaften:

  • Es tritt wöchentlich jeden Mittwoch auf: Das Muster hat typ = weekly, interval = 1, daysOfWeek = [wednesday] und firstDayOfWeek = sunday
  • Die dueDateTime ist Mittwoch 2/2
  • NextOccurrenceDateTime ist Mittwoch 2/9

Drei Änderungen am Muster sind möglich, und die resultierenden nextOccurrenceDateTime werden in der folgenden Tabelle angezeigt.

Musteränderung Resultierendes nextOccurrenceDateTime
Wöchentlich jeden Dienstag Dienstag 2/8
Wöchentlich jeden Donnerstag Donnerstag 2/10
Wöchentlich jeden Donnerstag und firstDayOfWeek geändert in Donnerstag Donnerstag 2/3

Beachten Sie den Unterschied zwischen Donnerstag 2/10 und Donnerstag 2/3. Wenn firstDayOfWeek = Thursday, Donnerstag 2/3 befindet sich nicht in derselben Woche wie Mittwoch 2/2, da eine neue Woche am Donnerstag beginnt. Wenn firstDayOfWeek nicht Thursdayist, befindet sich Donnerstag 2/3 in derselben Woche wie Mittwoch 2/2, und Donnerstag 2/10 ist in der nächsten Woche.

Hinweise zum Zeitplan und Fälligkeitsdatum

DueDateTime kann von Clients bearbeitet werden, um einen anderen Wert (einschließlich null) zu haben, ohne dass sich dies auf den Zeitplan und die nextOccurrenceDateTime auswirkt. Wenn ein Vorgang z. B. zu spät ist und das Fälligkeitsdatum geändert wird, um dieser Verspätung Rechnung zu tragen, wird die nächste Aufgabe in der Reihe als ursprünglich geplant angezeigt, es sei denn, das Muster und/oder das MusterStartDateTime werden explizit aktualisiert. Daher führt das Verschieben des Fälligkeitsdatums nicht dazu, dass Datumsangaben gemäß dem definierten Zeitplan übersprungen werden. Dies unterscheidet sich von einem Besprechungsmodell , bei dem das heutige Datum eine Rolle bei der Bestimmung spielt, wann die nächste Besprechung stattfindet. Die Kenntnis des heutigen Datums ist für die Berechnung des nächsten Besprechungs- oder Ereignisdatums relevant, ist aber für die Berechnung des Fälligkeitsdatums des nächsten Vorgangs nicht relevant.

Beispiel 1: Ändern des Musters mit und ohne Änderungen an patternStartDateTime

Bei einer Aufgabe mit aktiver Wiederholung mit den folgenden Eigenschaften:

  • Das Serienmuster gibt alle zwei Wochen am Freitag an, z. B. type = weekly, interval = 2, daysOfWeek = [friday] und firstDayOfWeek = sunday.
  • Die zuvor abgeschlossene Aufgabe wurde am 26. November 2021 fällig.
  • Die aktuelle Aufgabe ist am 10. Dezember 2021 fällig.
  • NextOccurrenceDateTime ist der 24. Dezember 2021 (zwei Wochen nach dem aktuellen Fälligkeitsdatum).

Es wird entschieden, den Rhythmus von 2 Wochen auf 3 Wochen zu ändern. Daher wird das Muster so geändert, dass es ein Intervall = 3 zusammen mit den gleichen Werten für wöchentliche Freitage aufweist.

Es werden drei verschiedene Möglichkeiten untersucht, die jeweils unterschiedliche Fälligkeitsdaten für die nächste Aufgabe in der Reihe ergeben:

Beschreibung ändern Resultierendes nextOccurrenceDateTime
Ändern des MustersStartDateTime in den 10. Dezember 2021 Freitag, 31. Dezember 2021
Ändern des MustersStartDateTime in den 17. Dezember 2021 7. Januar 2022
Ändern Sie das MusterStartDateTime nicht. Freitag, 31. Dezember 2021

Im ersten Beispiel wird patternStartDateTime auf den gleichen Wert wie dueDateTime festgelegt, z. B. 10. Dezember. NextOccurrenceDateTime wird auf 3 Wochen nach dem patternStartDateTime-Wert (31. Dezember) festgelegt. Konzeptionell stellt dies die Änderung des Rhythmus dar, die nur für die folgende Aufgabe und nicht für diese Aufgabe wirksam wird.

Im zweiten Beispiel ist patternStartDateTime auf 3 Wochen nach dem 26. November festgelegt, also auf den 17. Dezember. Auch hier wird nextOccurrenceDateTime auf 3 Wochen nach dem patternStartDateTime festgelegt, diesmal auf den 7. Januar. Konzeptionell stellt dies die Änderung des Rhythmus dar, die ab dem 26. November (die vorherige Aufgabe) und nicht ab dem 10. Dezember (ursprüngliches Fälligkeitsdatum des aktuellen Vorgangs) wirksam wird.

Im Allgemeinen wird empfohlen, die dueDateTime einer Aufgabe so zu ändern, dass sie mit einem neuen MusterStartDateTime übereinstimmt. dies ist jedoch nicht erforderlich. Wenn dueDateTime im zweiten Beispiel nicht zusammen mit dem patternStartDateTime geändert wird, sehen Benutzer weiterhin ein Fälligkeitsdatum vom 10. Dezember für die aktuelle Aufgabe. Wenn sie abgeschlossen ist, ist die nächste Aufgabe in der Reihe für den 7. Januar geplant. Da dies für Benutzer verwirrend sein kann, empfiehlt es sich, dueDateTime und patternStartDateTime zusammen zuzuweisen.

Das dritte Beispiel ähnelt dem ersten, mit dem Unterschied, dass es nicht das PatternStartDateTime angibt. Ein patternStartDateTime,das lange zurück ist, wie im August, kann nicht verwendet werden. In diesem Fall wird nextOccurrenceDateTime basierend auf dem ursprünglichen Fälligkeitsdatum vom 10. Dezember berechnet, was zu einem nextOccurrenceDateTime-Wert vom 31. Dezember führt, ähnlich wie im ersten Beispiel. Beachten Sie, dass das ursprüngliche Fälligkeitsdatum nicht verfügbar gemacht wird, obwohl es in dieser Berechnung verwendet wird. Dies bedeutet, dass dueDateTime in einen anderen Wert oder sogar in nullgeändert werden kann, aber der dueDateTime-Wert wird für diese Berechnung ignoriert, indem stattdessen das ursprüngliche Fälligkeitsdatum verwendet wird. Dies ist ein weiterer Grund, warum wir empfehlen, dueDateTime und patternStartDateTime zusammen zu ändern.

Beispiel 2: Fälligkeitsdatum wirkt sich nicht auf das nächste Vorkommen aus

Bei einer Aufgabe mit aktiver Wiederholung mit den folgenden Eigenschaften:

  • Es tritt wöchentlich jeden Mittwoch auf: Das Muster hat type = weekly, interval = 1, daysOfWeek = [wednesday] und firstDayOfWeek = sunday.
  • DueDateTime ist Mi 2/16.
  • NextOccurrenceDateTime ist Mi 2/9.
  • Das ursprüngliche Fälligkeitsdatum ist Mittwoch 2/2. Dieser Wert ist nicht öffentlich verfügbar, kann jedoch aus nextOccurrenceDateTime abgeleitet werden.

Im Folgenden werden drei mögliche Änderungen untersucht.

Ändern Resultierendes nextOccurrenceDateTime
Keine Änderung Dienstag 2/9
Das Muster wurde so geändert, dass es jeden Donnerstag wöchentlich ist; keine Änderung an patternStartDateTime Donnerstag 2/10
patternStartDateTime wurde in 2/9 geändert; keine Änderung am Muster Mittwoch 16.02.02.

In allen drei Beispielen wird dueDateTime nicht gegenüber dem geänderten Wert von Mittwoch 2/16 geändert, und die nächste Aufgabe in der Reihe wird mit einem dueDateTime-Wert erstellt, der dem nextOccurrenceDateTime-Wert in der vorherigen Tabelle entspricht.

Hinweis:

  • Das Standardverhalten, wenn patternStartDateTime nicht explizit neu zugewiesen wird, besteht darin, dass der Zeitplan basierend auf dem ursprünglichen Fälligkeitsdatum fortgesetzt wird. In diesem Fall ist das ursprüngliche Fälligkeitsdatum 2/2, während das aktuelle dueDateTime-Datum 2/16 ist.
  • Wenn das patternStartDateTime geändert wird, wird nextOccurrenceDateTime mit diesem neuen Startdatum neu berechnet.
  • Wenn das Fälligkeitsdatum in null statt in den 16.02. oder in ein anderes Datum in der Zukunft oder Vergangenheit geändert wird, sind die vorherigen Beispiele davon nicht betroffen.

Entwicklerszenarien

Erstellen von Terminserien

Recurrence.schedule ist die einzige clientbearbeitbare Untereigenschaft der Wiederholung. Durch Hinzufügen von recurrence.schedule (unabhängig davon, ob die Wiederholung bereits definiert ist oder nicht), können Clients eine nicht wiederkehrende Aufgabe in eine Aufgabe mit aktiver Wiederholung ändern.

Die beiden anderen Bedingungen, die in der Definition der aktiven Wiederholung erwähnt werden, beeinflussen, ob eine recurrence.schedule hinzugefügt werden kann:

  • Die percentComplete-Eigenschaft muss kleiner als 100sein.
  • Die recurrence.nextInSeriesTaskId-Eigenschaft muss oder nicht zugewiesen sein null .

Andere Serienuntereigenschaften sind schreibgeschützt. Wenn sie noch nicht zugewiesen sind, generiert der Dienst sie automatisch, wenn recurrence.schedule hinzugefügt wird.

Triggerserie

Im Folgenden werden zwei Möglichkeiten veranschaulicht, wie ein Wiederholungsmechanismus für eine Aufgabe mit aktiver Wiederholung ausgelöst werden kann:

Wenn in der vorherigen Definition für eine _task mit aktiver Wiederholung eine der drei Bedingungen nicht erfüllt ist, wird der Wiederholungsmechanismus nicht ausgelöst (es wird keine neue Aufgabe erstellt, und nextInSeriesTaskId wird nicht zugewiesen.)

Die Instanziierung der neuen Aufgabe erfolgt in der Regel sofort, was gelegentlich zu einer Verzögerung bei der Erstellung der neuen Aufgabe führt.

Der neue Vorgang verfügt über die folgenden Eigenschaften, die aus dem jetzt abgeschlossenen Vorgang kopiert wurden: Titel, Beschreibung, Prüflistenelemente (auf unvollständig festgelegt), Zuweisungen, Priorität und Kategorien. Der PercentComplete-Wert der neuen Aufgabe ist auf 0festgelegt. Der dueDateTime-Wert des neuen Vorgangs wird gemäß dem Wiederholungszeitplan festgelegt. Die folgenden Untergeordneten Eigenschaften der Serie werden kopiert: seriesId, recurrenceStartDateTime und schedule; schedule.nextOccurrenceDateTime wird für den neuen Vorgang neu berechnet. Die anderen Serieneigenschaften erhalten geeignete Werte für die neue Aufgabe.

Ermitteln der nächsten Aufgabe in einer Reihe

Wenn für Aufgabe C die Wiederholung definiert ist und ein Benutzer Aufgabe C abgeschlossen (percentComplete = 100) markiert, wird Aufgabe D erstellt, um die Serie fortzusetzen. In Aufgabe C wird die Recurrence.nextInSeriesTaskId-Eigenschaft mit der ID von Aufgabe D aufgefüllt.

Wenn hingegen Aufgabe C gelöscht wird und der Löschvorgang eine Wiederholung auslöst, muss ein Client die ID von Aufgabe D auf andere Art ermitteln. Beispielsweise durch Abfragen von Aufgaben im selben Bucket oder durch Die Nutzung des Deltasynchronisierungsfeeds.

Bearbeiten einer Serie

Für eine Aufgabe mit aktiver Wiederholung kann der Wiederholungszeitplan bearbeitet werden. Beachten Sie, dass recurrence.schedule die einzige Untereigenschaft der Wiederholung ist, die bearbeitet werden kann.

Beispielsweise kann ein Vorgang mit aktiver Wiederholung und einem Wöchentlichen Zeitplan jeden Mittwoch am 15. Tag jedes Monats in monatlich geändert werden.

Beenden einer Serie

Um eine Serie zu beenden, legen Sie die recurrence.schedule-Eigenschaft auf fest null. Dies ist nur möglich, wenn nextInSeriesTaskId nicht zugewiesen ist null .

Wiederholung nach Beendigung wiederbeleben

Nachdem Sie recurrence.schedule entfernt haben, können Sie eine neue recurrence.schedule-Datei zu der Aufgabe hinzufügen, die die Reihe wiederbelebt.

Führen Sie die vorherigen Schritte für Erstellen einer Serie aus. Es gelten die gleichen Einschränkungen. Die ursprüngliche recurrence.seriesId und andere Untergeordnete Eigenschaften von Recurrence bleiben unverändert, wodurch die ursprüngliche Serie effektiv wiederhergestellt oder fortgesetzt wird.

Identifizieren der Aufgabe mit aktiver Wiederholung innerhalb einer Serienreihe

Bei einer recurrence.seriesId kann maximal eine Aufgabe mit dieser seriesIdeine aktive Wiederholung aufweisen.

Abgeschlossene Aufgaben sind in den meisten Ansichten ausgeblendet. Es ist ungewöhnlich, dass ein Benutzer eine Aufgabe anzeigt, die als abgeschlossen markiert wurde. Gelöschte Aufgaben können nicht angezeigt werden. Dies bedeutet, dass in den meisten Fällen nur eine Aufgabe mit aktiver Wiederholung in einer Wiederholungsreihe vorhanden ist. Wenn die Wiederholung des Vorgangs mit aktiver Wiederholung über den zu löschenden Zeitplan deaktiviert wurde, sind in dieser Reihe keine Vorgänge mit aktiver Wiederholung vorhanden.

Seltene Ausnahmeszenarien

Die folgenden Szenarien sind selten, aber möglich. Obwohl sie für einen Client als Ausnahmen erscheinen können, behält der Dienst immer integrität für die Regel bei: maximal eine Aufgabe mit aktiver Wiederholung in einer bestimmten Serienreihe. Es wird eine Anleitung zur Mehrdeutigkeit gegeben.

Ursachen

Im Folgenden werden zwei mögliche Ursachen dafür dargestellt, dass Informationen nicht synchron sind:

  • Die Informationen haben den schnellen clientseitigen Speicher von Planner noch nicht erreicht. Die autoritative Informationsquelle von Planner enthält die Daten, aber die Daten wurden noch nicht in den anforderungsoptimierten Speicher repliziert, der Daten an Clients zurückgibt.

  • Beim Wiederholungsmechanismus ist ein vorübergehender Fehler aufgetreten. Dies bedeutet, dass die neue Aufgabe zum Fortsetzen einer Reihe noch nicht erstellt wurde. sie wird in der Regel innerhalb weniger Sekunden oder Minuten erstellt.

Zwei Aufgaben mit aktiver Wiederholung in derselben Serienreihe

Wenn ein Client zwei Aufgaben mit aktiver Wiederholung in derselben Wiederholungsreihe beobachtet, kann davon ausgegangen werden, dass der Wiederholungsmechanismus für den Task mit der kleineren occurrenceId bereits ausgelöst wurde. Für den Back-End-Speicher von Planner ist nextInSeriesTaskId festgelegt, aber diese Informationen haben den schnellen Clientspeicher noch nicht erreicht. Die Aufgabe mit der größeren occurrenceId ist die eindeutige Aufgabe mit aktiver Wiederholung.

Eine Aufgabe mit aktiver Wiederholung weist eine kleinere occurrenceId als eine andere in derselben Serie auf.

Ähnlich wie bei den vorherigen "zwei Vorgängen mit aktiver Wiederholung" kann diese zweite Situation beobachtet werden, wenn die Wiederholung des Vorgangs mit der größeren occurrenceId deaktiviert ist (recurrence.schedule = null). Das Vorhandensein einer Aufgabe mit einer größeren occurrenceId impliziert, dass alle Aufgaben mit einer kleineren occurrenceId in dieser Reihe keine aktive Wiederholung aufweisen, auch wenn die Aufgabe mit der größeren occurrenceId auch keine aktive Wiederholung aufweist.

Keine Aufgaben mit aktiver Wiederholung in einer Reihe

Dies ist eine wirklich mehrdeutige Situation, da eine der folgenden Situationen der Fall sein kann:

  • Der Wiederholungsmechanismus wurde durch einen vorübergehenden Fehler verzögert. es wird erneut versucht.
  • Der Wiederholungsmechanismus war erfolgreich, aber die neue Aufgabe wurde dem schnellen Clientspeicher noch nicht hinzugefügt.
  • Die neue Aufgabe wurde erstellt, aber dann von einem anderen Client gelöscht.

Die ersten beiden sind temporäre Zustände, die vom Dienst in der Regel innerhalb weniger Sekunden oder Minuten behoben werden. Die dritte ist in der Regel dauerhaft. Es ist wahrscheinlich ungenau, dieses Szenario als selten oder außergewöhnlich zu beschreiben. es wurde jedoch bereits beschrieben, um darauf aufmerksam zu machen, dass im beobachteten Zustand aufgrund der Möglichkeit der ersten beiden Fälle Mehrdeutigkeit besteht.

Suchen aller Aufgaben in einer Serie

Entwickler, die mit Planner arbeiten, sind mit der vorhandenen API vertraut, um alle Aufgaben in einem Plan abzurufen. Planner verfügt noch nicht über eine API zum Abrufen aller Aufgaben in einer Wiederholungsreihe. Wenn Sie jedoch alle Vorgänge in einem Plan abrufen, können Sie in der Regel alle Vorgänge in einer Wiederholungsreihe abrufen.

Die recurrence.seriesId-Eigenschaft in jedem plannerTask ist ein Bezeichner, der sich von einer bestimmten wiederkehrenden Reihe unterscheidet, zu der mindestens eine Aufgabe gehört. Bei der Zuweisung kann sich dieser Wert nie ändern. Recurrence.occurrenceId ist ein ganzzahliger Wert, der die Reihenfolge der Aufgaben innerhalb einer Reihe angibt. Die erste Aufgabe in einer Reihe (die Aufgabe, bei der die Wiederholung zum ersten Mal hinzugefügt wurde) erhält eine occurrenceId von 1.

Hinweis:

  • Wenn einige Aufgaben in der Reihe gelöscht wurden, enthalten die Indizes möglicherweise Lücken.
  • Wenn Benutzer die Serie in einen anderen Plan verschoben haben, müssen Sie in anderen Plänen nachsehen, um andere Aufgaben in der Reihe zu sehen. Benutzer sind jedoch in der Regel in erster Linie an der Serie innerhalb eines Plans interessiert. Aufgaben dürfen nicht über Gruppengrenzen verschoben werden. Wenn alle Pläne in einer Gruppe abgefragt werden, finden Sie alle Aufgaben, die aus dem ursprünglichen Plan hätten verschoben werden können.

REST-Vorgangsbeispiele

Die folgenden Anforderungen und Antworten stellen eine geordnete Abfolge von Vorgängen dar. Sie können als Testfälle für Clients verwendet werden, die Planner-Aufgabenserie implementieren, indem sie geeignete Bezeichner (für Vorgang, Plan, Wiederholungsreihe usw.) ersetzen. Viele Fehlerfälle werden eingestreut, um falsche Änderungen an bestimmten Zuständen zu veranschaulichen.

Hinzufügen eines Fälligkeitsdatums und einer Wiederholung zu einem vorhandenen plannerTask

Die folgende Beispielanforderung und -antwort zeigt, wie eine Wiederholung für eine Aufgabe ausgeführt wird. Die Aufgabe mit der ID Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV ist bereits vorhanden und weist eine Wiederholung auf = null. Um eine Wiederholung hinzuzufügen, müssen Sie die erforderlichen Eigenschaften von recurrence.schedule zuweisen. Die nicht verwendeten recurrencePattern-Eigenschaften (month, dayOfMonth, firstDayOFWeek und index) sollten nicht eingeschlossen werden.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV

{
    "recurrence": {
        "schedule": {
            "pattern": {
                "type": "daily",
                "interval": 2
            },
            "patternStartDateTime": "2021-11-13T10:30:00Z"
        }
    },
    "dueDateTime": "2021-11-13T10:30:00Z"
}

Antwort

HTTP/1.1 204 NO CONTENT

Abrufen der vorherigen Aufgabe

Die folgende Beispielanforderung und -antwort zeigen, wie sie die Aufgabe mit neu hinzugefügter Wiederholung abrufen.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV

Antwort

Im Folgenden finden Sie Hinweise zur Antwort:

  • Den nicht verwendeten recurrencePattern-Eigenschaften (month, dayOfMonth, firstDayOFWeek und index) werden vom Dienst Standardwerte zugewiesen.
  • NextOccurrenceDateTime wird aus dem Zeitplan berechnet. In diesem Fall ist patternStartDateTime der 13. November, und das Muster definiert jeden zweiten Tag. Dies gibt einen nextOccurrenceDateTime-Wert von zwei Tagen nach dem patternStartDateTime-Wert vom 15. November an.
  • Die seriesId und occurrenceId werden automatisch generiert. Die seriesId ist eine neue GUID, die im Planner-Bezeichnerformat codiert ist. Da dies die erste Aufgabe in einer Reihe ist, erhält sie eine occurrenceId von 1.
  • RecurrenceStartDateTime erhält denselben Wert wie patternStartDateTime. Dies gilt für die erste Aufgabe in einer Reihe (occurrenceId = 1). Bei zukünftigen Aufgaben in der Reihe ändert sich der Wert von recurrenceStartDateTime jedoch nicht, auch wenn sich das PatternStartDateTime ändert. Es verfolgt den Beginn der Wiederholung im Gegensatz zu Musteränderungen nach.
  • Die previousInSeriesTaskId ist immer null, da dies die erste Aufgabe in der Reihe (occurrenceId = 1) ist.
  • Die nextInSeriesTaskId wird zugewiesen, wenn und wenn die nächste Aufgabe erstellt wird, um die Reihe fortzusetzen.
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#planner/tasks/$entity",
    "@odata.etag": "W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBASCc=\"",
    "planId": "4CaQUsrKXkyMDBhpF9cu-JUAAZ1V",
    "bucketId": "mVAeurfATUOEkpxi-60a9pUAJDxm",
    "title": "Water the plants",
    "orderHint": "8586352620867692777",
    "assigneePriority": "",
    "percentComplete": 0,
    "priority": 5,
    "startDate": null,
    "createdDateTime": "2019-08-20T23:46:38.708303Z",
    "hasDescription": false,
    "previewType": "automatic",
    "completedDateTime": null,
    "completedBy": null,
    "referenceCount": 0,
    "checklistItemCount": 0,
    "activeChecklistItemCount": 0,
    "conversationThreadId": null,
    "id": "Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV",
    "createdBy": {
        "user": {
            "displayName": null,
            "id": "edcfc4b0-be77-4866-948a-b93267e151f8"
        }
    },
    "appliedCategories": {},
    "assignments": {},
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 1,
        "previousInSeriesTaskId": null,
        "nextInSeriesTaskId": null,
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-13T10:30:00Z",
            "nextOccurrenceDateTime": "2021-11-15T10:30:00Z",
            "pattern": {
                "type": "daily",
                "interval": 2,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 0,
                "daysOfWeek": [],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": "2021-11-13T10:30:00Z",
    "creationSource": null
}

Markieren sie den Vorgang als abgeschlossen, wodurch eine Wiederholung ausgelöst wird (1. Aufgabe in der Reihe)

Die folgende Beispielanforderung und -antwort zeigen, wie PercentComplete auf 100 festgelegt wird (auch als Abschließen des Vorgangs oder Markieren des Vorgangs abgeschlossen bezeichnet).

Anforderung

Das folgende Beispiel zeigt eine Anforderung, die für eine Aufgabe mit oder ohne Wiederholung identisch ist.

PATCH https://graph.microsoft.com/beta/planner/tasks/Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV

{
    "percentComplete": 100
}

Antwort

HTTP/1.1 204 NO CONTENT

Abrufen der jetzt abgeschlossenen Aufgabe und Ermitteln der ID der nächsten (zweiten) Aufgabe in der Reihe

In der folgenden Beispielanforderung und -antwort wird gezeigt, wie die Aufgabe abgerufen wird, nachdem sie als abgeschlossen markiert wurde.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV

Antwort

Das folgende Beispiel zeigt eine Anfrage. Da nextInSeriesTaskId zugewiesen ist, kann für diese Aufgabe keine aktive Wiederholung mehr konfiguriert sein.

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "percentComplete": 100,
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 1,
        "previousInSeriesTaskId": null,
        "nextInSeriesTaskId": "GxOo0ms1iEu3eBI1-6lk85UAI5FI",
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-13T10:30:00Z",
            "nextOccurrenceDateTime": "2021-11-15T10:30:00Z",
            "pattern": {
                "type": "daily",
                "interval": 2,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 0,
                "daysOfWeek": [],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": "2021-11-13T10:30:00Z",
}

Abrufen der neuen Aufgabe in der Reihe (2. Vorkommen)

Die folgende Beispielanforderung und -antwort zeigen, wie die neue Aufgabe in der Reihe abgerufen wird, die ID, für die in der vorherigen Antwort von nextInSeriesTaskId ermittelt wurde.

Anforderung

Die Beispielanforderung (GxOo0ms1iEu3eBI1-6lk85UAI5FI) enthält die folgenden Unterschiede im Vergleich zum vorherigen Beispiel (Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV):

  • dueDateTime wurde dem Wert aus dem vorherigen nextOccurrenceDateTime des Vorgangs zugewiesen.
  • nextOccurrenceDateTime wurde gemäß dem Zeitplan berechnet: das nächste Vorkommen nach dem vorherigen dueDateTime.
  • occurrenceId ist 2 statt 1
  • percentComplete ist 0.
GET https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

Antwort

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "planId": "4CaQUsrKXkyMDBhpF9cu-JUAAZ1V",
    "bucketId": "mVAeurfATUOEkpxi-60a9pUAJDxm",
    "title": "Water the plants",
    "percentComplete": 0,
    "id": "GxOo0ms1iEu3eBI1-6lk85UAI5FI",
    "appliedCategories": {},
    "assignments": {},
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 2,
        "previousInSeriesTaskId": "Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV",
        "nextInSeriesTaskId": null,
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-13T10:30:00Z",
            "nextOccurrenceDateTime": "2021-11-17T10:30:00Z",
            "pattern": {
                "type": "daily",
                "interval": 2,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 0,
                "daysOfWeek": [],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": "2021-11-15T10:30:00Z"
}

Bearbeiten Sie die Wiederholung für den Vorgang auf einen Tag pro Woche, und legen Sie das Fälligkeitsdatum auf NULL fest.

Die folgende Beispielanforderung und -antwort zeigen, wie sie einem nullTask mit aktiver Wiederholung ein dueDateTime und ein anderes Muster zuweisen.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

{
    "recurrence": {
        "schedule": {
            "pattern": {
                "type": "weekly",
                "interval": 1,
                "daysOfWeek": [ "tuesday" ],
                "firstDayOfWeek": "sunday"
            }
        }
    },
    "dueDateTime": null
}

Antwort

HTTP/1.1 204 NO CONTENT

Rufen Sie die Aufgabe erneut ab, um das Ergebnis der Bearbeitung anzuzeigen.

In der folgenden Beispielanforderung und -antwort wird gezeigt, wie die Aufgabe nach den vorherigen Bearbeitungen abgerufen wird. Sie können davon ausgehen, dass das zuvor angegebene recurrence.schedule.pattern angezeigt wird: wöchentlich dienstags zusammen mit dueDateTime = null.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

Antwort

Im folgenden Beispiel kann eine Aufgabe eine aktive Wiederholung zusammen mit einem null Fälligkeitsdatum aufweisen. Die nextOccurrenceDateTime wird neu berechnet und ist jetzt am 23. November, einem Dienstag, von daysOfWeek. Dieses nächste Vorkommen wird basierend auf der ursprünglichen dueDateTime der Aufgabe vom 15. November, einem Montag, berechnet.

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "planId": "4CaQUsrKXkyMDBhpF9cu-JUAAZ1V",
    "bucketId": "mVAeurfATUOEkpxi-60a9pUAJDxm",
    "title": "Water the plants",
    "percentComplete": 0,
    "id": "GxOo0ms1iEu3eBI1-6lk85UAI5FI",
    "appliedCategories": {},
    "assignments": {},
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 2,
        "previousInSeriesTaskId": "Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV",
        "nextInSeriesTaskId": null,
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-13T10:30:00Z",
            "nextOccurrenceDateTime": "2021-11-23T10:30:00Z",
            "pattern": {
                "type": "weekly",
                "interval": 1,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 0,
                "daysOfWeek": [ "tuesday" ],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": null
}

Entfernen des Wiederholungszeitplans

Die folgende Beispielanforderung und -antwort zeigen, wie eine nullrecurrence.schedule zugewiesen wird, wodurch die Wiederholung für diesen Vorgang beendet wird.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

{
    "recurrence": {
        "schedule": null
    }
}

Antwort

HTTP/1.1 204 NO CONTENT

Abrufen der Aufgabe mit gelöschtem Wiederholungszeitplan

In der folgenden Beispielanforderung und -antwort wird gezeigt, wie die Aufgabe nach den vorherigen Bearbeitungen abgerufen wird.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

Antwort

Im Folgenden finden Sie ein Beispiel für die Antwort, in der die Seriendaten beibehalten werden (recurrence.schedule = null). Wenn ein neuer Zeitplan angegeben wird, gehört dieser Vorgang immer noch zur gleichen Reihe.

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 2,
        "previousInSeriesTaskId": "Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV",
        "nextInSeriesTaskId": null,
        "schedule": null,
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z"
    },
    "dueDateTime": null
}

Fehlerfall: Versuch, einen neuen Serienzeitplan ohne Angabe des MustersStartDateTime hinzuzufügen

Die folgende Beispielanforderung und -antwort zeigt eine ungültige Anforderung, einen Versuch, eine neue recurrence.schedule hinzuzufügen, ohne das PatternStartDateTime anzugeben.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

{
    "recurrence": {
        "schedule": {
            "pattern": {
                "type": "daily",
                "interval": 5
            }
        }
    }
}

Antwort

Im Folgenden finden Sie ein Beispiel für die Antwort, die einen Fehler zeigt, der das Problem beschreibt. Das Antwortobjekt enthält einen Fehler, da in der Fehlermeldung anstelle Recurrence.Schedule.Rangevon erwähnt Recurrence.Schedule.PatternStartDateTime werden sollte. Dies ist derzeit ein bekanntes Problem.

HTTP/1.1 400 BAD REQUEST
Content-type: application/json

{
    "error": {
        "code": "",
        "message": "Schema validation has failed. Validation for field 'Recurrence.Schedule.Range', on entity 'Task' has failed: A non-null value must be specified for this field.",
        "innerError": {
            "request-id": "922f7646-513a-4f63-a231-9cf2d7b647cb",
            "date": "2021-06-22T21:37:35"
        }
    }
}

Wiederherstellen der Wiederholung für den Vorgang durch Hinzufügen eines neuen Zeitplans

Die folgende Beispielanforderung und -antwort zeigen, wie Sie einem Vorgang, der derzeit recurrence.schedule = null enthält, eine neue recurrence.schedule-Datei zuweisen.

Anmerkung:DueDateTime ist nicht zugewiesen.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

{
    "recurrence": {
        "schedule": {
            "pattern": {
                "type": "absoluteMonthly",
                "interval": 2,
                "dayOfMonth": 25
            },
            "patternStartDateTime": "2021-11-25T10:30:00Z"
        }
    }
}

Antwort

HTTP/1.1 204 NO CONTENT

Abrufen der Aufgabe mit dem neuen Wiederholungszeitplan

Die folgende Beispielanforderung und -antwort zeigen, wie Sie die Aufgabe mit dem neuen Wiederholungszeitplan abrufen. Die Wiederholungseigenschaften (mit Ausnahme des Zeitplans) bleiben unverändert, und die Aufgabe weist eine aktive Wiederholung auf, auch wenn die dueDateTime-Eigenschaft beibehalten wird null.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

Antwort

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "planId": "4CaQUsrKXkyMDBhpF9cu-JUAAZ1V",
    "bucketId": "mVAeurfATUOEkpxi-60a9pUAJDxm",
    "title": "Water the plants",
    "percentComplete": 0,
    "id": "GxOo0ms1iEu3eBI1-6lk85UAI5FI",
    "appliedCategories": {},
    "assignments": {},
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 2,
        "previousInSeriesTaskId": "Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV",
        "nextInSeriesTaskId": null,
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-25T10:30:00Z",
            "nextOccurrenceDateTime": "2022-01-25T10:30:00Z",
            "pattern": {
                "type": "absoluteMonthly",
                "interval": 2,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 25,
                "daysOfWeek": [],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": null
}

Fehlerfall: Versuch, eine schreibgeschützte Eigenschaft zu bearbeiten

Die folgende Beispielanforderung und -antwort zeigt eine ungültige Anforderung. Dabei wird versucht, der recurrence.seriesId-Eigenschaft einen wert zuzuweisen, der schreibgeschützt ist.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

{
    "recurrence": {
        "seriesId": "abc"
    }
}

Antwort

Das folgende Antwortobjekt zeigt einen Fehler, der das Problem beschreibt.

HTTP/1.1 400 BAD REQUEST
Content-type: application/json

{
    "error": {
        "code": "",
        "message": "Invalid recurrence sub-property assignment(s): \"seriesId\".",
        "innerError": {
            "request-id": "922f7646-513a-4f63-a231-9cf2d7b647cb",
            "date": "2021-06-22T21:37:35"
        }
    }
}

Markieren Sie die Aufgabe als abgeschlossen, wodurch eine Wiederholung ausgelöst wird (2. Aufgabe in der Reihe mit null dueDateTime)

Die folgende Beispielanforderung und -antwort zeigen, wie PercentComplete auf 100 festgelegt wird (auch als Abschließen des Vorgangs oder Markieren des Vorgangs abgeschlossen bezeichnet).

Anforderung

Die folgende Anforderung ist für eine Aufgabe mit oder ohne Wiederholung identisch.

PATCH https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

{
    "percentComplete": 100
}

Antwort

HTTP/1.1 204 NO CONTENT

Abrufen der jetzt abgeschlossenen Aufgabe und Ermitteln der ID der nächsten (dritten) Aufgabe in der Reihe

In der folgenden Beispielanforderung und -antwort wird gezeigt, wie die Aufgabe abgerufen wird, nachdem sie als abgeschlossen markiert wurde.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/GxOo0ms1iEu3eBI1-6lk85UAI5FI

Antwort

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "planId": "4CaQUsrKXkyMDBhpF9cu-JUAAZ1V",
    "bucketId": "mVAeurfATUOEkpxi-60a9pUAJDxm",
    "title": "Water the plants",
    "percentComplete": 100,
    "id": "GxOo0ms1iEu3eBI1-6lk85UAI5FI",
    "appliedCategories": {},
    "assignments": {},
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 2,
        "previousInSeriesTaskId": "Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV",
        "nextInSeriesTaskId": "-6zr7XfE6E2JvxCSmE7Wdf8AClON",
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-25T10:30:00Z",
            "nextOccurrenceDateTime": "2022-01-25T10:30:00Z",
            "pattern": {
                "type": "absoluteMonthly",
                "interval": 2,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 25,
                "daysOfWeek": [],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": null
}

Fehlerfall: Versuchen Sie, den Wiederholungszeitplan zu löschen, wenn die nextInSeriesTaskId bereits zugewiesen ist.

Die folgende Beispielanforderung und -antwort zeigt eine ungültige Anforderung und einen Versuch, der recurrence.schedule-Eigenschaft einen Wert zuzuweisen, nachdem die nextInSeriesTaskId-Eigenschaft zugewiesen wurde.

Anforderung

PATCH https://graph.microsoft.com/beta/planner/tasks/Q7SNdWp5ekeJTpRRSCcZ3pUAD6kV

{
    "recurrence": {
        "schedule": null
    }
}

Antwort

Das folgende Antwortobjekt zeigt einen Fehler, der das Problem beschreibt.

HTTP/1.1 400 BAD REQUEST
Content-type: application/json

{
    "error": {
        "code": "",
        "message": "Schema validation has failed. Validation for field 'Recurrence', on entity 'Task' has failed: Cannot add/edit/delete recurrence when the next instance should already be created.",
        "innerError": {
            "request-id": "922f7646-513a-4f63-a231-9cf2d7b647cb",
            "date": "2021-06-22T21:37:35"
        }
    }
}

Abrufen der neuen Aufgabe in der Reihe (drittes Vorkommen)

Die folgende Beispielanforderung und -antwort zeigen, wie Sie die neue Aufgabe in der Reihe abrufen, id, für die Sie in der vorherigen Antwort von nextInSeriesTaskId ermittelt haben. DueDateTime wurde dem Wert zugewiesen, der im vorherigen nextOccurrenceDateTime des Vorgangs dargestellt wurde, obwohl das vorherige dueDateTime-Element des Vorgangs warnull.

Anforderung

GET https://graph.microsoft.com/beta/planner/tasks/-6zr7XfE6E2JvxCSmE7Wdf8AClON

Antwort

HTTP/1.1 200 OK
Content-type: application/json

{
    "_comment": "other fields omitted for brevity",
    "planId": "4CaQUsrKXkyMDBhpF9cu-JUAAZ1V",
    "bucketId": "mVAeurfATUOEkpxi-60a9pUAJDxm",
    "title": "Water the plants",
    "percentComplete": 0,
    "id": "-6zr7XfE6E2JvxCSmE7Wdf8AClON",
    "appliedCategories": {},
    "assignments": {},
    "recurrence": {
        "seriesId": "w5tLb5HceUmpuiYlhdXyHg",
        "occurrenceId": 3,
        "previousInSeriesTaskId": "GxOo0ms1iEu3eBI1-6lk85UAI5FI",
        "nextInSeriesTaskId": null,
        "recurrenceStartDateTime": "2021-11-13T10:30:00Z",
        "schedule": {
            "patternStartDateTime": "2021-11-25T10:30:00Z",
            "nextOccurrenceDateTime": "2022-03-25T10:30:00Z",
            "pattern": {
                "type": "absoluteMonthly",
                "interval": 2,
                "firstDayOfWeek": "sunday",
                "dayOfMonth": 25,
                "daysOfWeek": [],
                "index": "first",
                "month": 0
            }
        }
    },
    "dueDateTime": "2022-01-25T10:30:00Z"
}