Wenn Sie einen Termin aktualisieren, wird er in EWS 1.1 in eine Besprechung geändert

8

Hier ist, was ich versuche zu tun:

  • Erhalte alle Elemente im Kalender eines Benutzers zwischen zwei Daten
  • update die Location oder Subject für einige Elemente

Ich bekomme die Gegenstände mit:

FindItemsResults<Appointment> findResults = calendar.FindAppointments(new CalendarView(startDate, endDate));

Diese Abfrage funktioniert einwandfrei. Aber jedes Mal, wenn ich Update anrufe, um das Element zu speichern, bekomme ich eine Ausnahme:

Microsoft.Exchange.WebServices.Data.ServiceResponseException: One or more recipients are invalid.

Obwohl ich eine Ausnahme erhalte, wird das Objekt gespeichert und wird geändert, damit IsMeeting auf true gesetzt wird! Jetzt ist das aktualisierte Element ein Treffen mit einem Organisator etc ... Dies ist effektiv Datenkorruption für mich.

Hier ist der Code. Es ist nicht komplizierter als das. Ich habe es getestet, indem ich nur Location oder Subject ändere und beide das Problem verursachen.

%Vor%

Vermisse ich etwas Konzept oder etwas? Das scheint ein ziemlich ungeheuerliches Problem zu sein.

FWIW, das ist EWS 1.1 gegen einen Office 365 Server.

    
tig 25.11.2011, 23:41
quelle

4 Antworten

13

Ich habe es mit Hilfe dieser Frage herausgefunden:

Exchange-Termintypen

Der Schlüssel ist, dass die Methode Update mit dem SendInvitationsOrCancellationsMode.SendToNone Flag aufgerufen werden muss, das im 2. Parameter eingestellt ist.

So:

%Vor%     
tig 25.11.2011, 23:49
quelle
3

So tigs Antwort funktioniert, wenn Sie den anderen Teilnehmern keine Terminupdates senden möchten. Um dies richtig beantworten zu können, müssen Sie jedoch den Teilnehmerstatus laden.

Standardmäßig wird versucht, den Teilnehmern Terminaktualisierungen zu senden. Ihr Terminobjekt hat jedoch nicht den Teilnehmerstatus geladen und explodiert daher. Wenn Sie die Bindung ausführen, sollten Sie die Teilnehmereigenschaften laden. Sie sollten den Organizer wahrscheinlich auch laden, um einen anderen Randfall abzudecken:

  • AppointmentSchema.RequiredAttendees
  • AppointmentSchema.OptionalAttendees
  • AppointmentSchema.Resources
  • AppointmentSchema.Organizer

Dadurch werden die Teilnehmer ausgefüllt, wenn Sie ein Update durchführen möchten, das Aktualisierungen an die Teilnehmer sendet.

Allerdings gibt es dann noch einen Randfall, um den Sie sich Sorgen machen müssen. Wenn Sie einen Termin haben, zu dem keine Teilnehmer hinzugefügt wurden (nur der Organisator), kann sich EWS weiterhin beschweren und diesen Fehler auslösen. Es wird tatsächlich für Termine in einigen Staaten funktionieren, aber in anderen Staaten scheitern.

Die vollständigste Lösung ist also eine Kombination aus:

  1. Laden des Teilnehmerstatus.
  2. Überprüfen des Teilnehmerstatus, um festzustellen, ob andere Teilnehmer als der Veranstalter vorhanden sind (je nachdem, wie der Termin erstellt wurde, wird der Organizer möglicherweise in der RequiredAttendees-Auflistung angezeigt). Wenn dies nicht der Fall ist, müssen Sie SendInvitationsOrCancellationsMode.SendToNone verwenden.

So würde das vollständige Beispiel ungefähr wie folgt aussehen:

%Vor%     
donovan 06.06.2013 08:20
quelle
1

Um dieses Bit der Frage zu beantworten

  

"Obwohl ich eine Ausnahme erhalte, wird das Objekt gespeichert und wird geändert   habe IsMeeting auf True gesetzt! Jetzt ist der aktualisierte Artikel ein Treffen mit einem   Organisator etc ... Dies ist effektiv Daten Korruption für mich. "

Die Microsoft-Dokumentation gibt im Kleingedruckten an: " Eine Besprechungsanfrage ist nur ein Termin mit Teilnehmern. Sie können einen Termin in eine Besprechungsanfrage konvertieren, indem Sie dem Termin erforderliche Teilnehmer, optionale Teilnehmer oder Ressourcen hinzufügen "- wie hier zu sehen Ссылка

Mit anderen Worten, sobald Sie beliebige Teilnehmer haben, konvertiert Exchange sie automatisch in ein Meeting.

    
Gavin G 29.09.2014 06:19
quelle
-1
%Vor%     
guyBami_W 11.03.2012 10:23
quelle