Exchange CreateEvent mit Timezone
Hallo liebe Leut,
ich bin gerade dabei mir mit NTLM, SOAP mir einen Exchange Client in PHP zu basteln.
soweit funktioniert dieser schon ganz gut, allerdings habe ich noch Probleme mit der "Zeitzone" beim Termin Anlegen.
#e.g. "2010-09-21T16:00:00Z"; # ISO date format. Z denotes UTC time
so in etwa lege ich den "Termin" an...
Ich Zapfe hierfür ein "normales" Outlook.com Konto an...
Lege ich den Termin übers "webinterface" an steht im Array
Lege ich diesen über meine "Schnittstelle" an steht da
also dachte ich mir, ich mache es mir leicht und erweitere das "Item" mit
$CreateEvent->Items->CalendarItem->TimeZone = "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna";
leider funktioniert das nicht...
Interessanterweise bringt er Folgenden Fehler:
Gebe ich ein "offensichtlich falsches" Objekt vor also ( $CreateEvent->Items->CalendarItem->FTimeZone ) trägt er den Termin ein und Ignoriert meine Vorgabe...
Ebenso habe ich als "TimeZone" auch schon "WEST" oder "GMT" versucht... aber ich bekomme es nicht hin...
Hat jemand eine Idee für mich?
Vielen Dank
ich bin gerade dabei mir mit NTLM, SOAP mir einen Exchange Client in PHP zu basteln.
soweit funktioniert dieser schon ganz gut, allerdings habe ich noch Probleme mit der "Zeitzone" beim Termin Anlegen.
#e.g. "2010-09-21T16:00:00Z"; # ISO date format. Z denotes UTC time
$CreateEvent->Items = new stdClass();
$CreateEvent->Items->CalendarItem = new stdClass();
$CreateEvent->Items->CalendarItem->Subject = $subject;
$CreateEvent->Items->CalendarItem->Start = $start;
$CreateEvent->Items->CalendarItem->End = $end;
$CreateEvent->Items->CalendarItem->IsAllDayEvent = $isallday;
$CreateEvent->Items->CalendarItem->LegacyFreeBusyStatus = $busyStatus;
$CreateEvent->Items->CalendarItem->Location = $location;
$CreateEvent->Items->CalendarItem->Culture = "de-DE";
return $response = $this->client->CreateItem( $CreateEvent );
so in etwa lege ich den "Termin" an...
Ich Zapfe hierfür ein "normales" Outlook.com Konto an...
Lege ich den Termin übers "webinterface" an steht im Array
[TimeZone] => (UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Lege ich diesen über meine "Schnittstelle" an steht da
[TimeZone] => (UTC+00:00) Monrovia, Reykjavik
also dachte ich mir, ich mache es mir leicht und erweitere das "Item" mit
$CreateEvent->Items->CalendarItem->TimeZone = "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna";
leider funktioniert das nicht...
Interessanterweise bringt er Folgenden Fehler:
stdClass Object
(
[ResponseMessages] => stdClass Object
(
[CreateItemResponseMessage] => stdClass Object
(
[ResponseCode] => NoError
[ResponseClass] => Success
[Items] => stdClass Object
(
[CalendarItem] => stdClass Object
(
[ItemId] => stdClass Object
(
[Id] => AAAUFGdyb3VwY2FsQF91dGxvb2suY29tAEYAAAAAAAgZdk2zocZLtvQmUICl2QYHACFnOreAd9FIo+It/uNphcoAAADXG74AACFnNreAd9FIo+It/uNphcoAAAFXI5YAAA==
[ChangeKey] => DwAAABY1AAAhZzq3gHfRSKPiLf7jfYXKADAE11A5
)
)
)
)
)
)
Gebe ich ein "offensichtlich falsches" Objekt vor also ( $CreateEvent->Items->CalendarItem->FTimeZone ) trägt er den Termin ein und Ignoriert meine Vorgabe...
Ebenso habe ich als "TimeZone" auch schon "WEST" oder "GMT" versucht... aber ich bekomme es nicht hin...
Hat jemand eine Idee für mich?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 337743
Url: https://administrator.de/contentid/337743
Ausgedruckt am: 22.11.2024 um 10:11 Uhr
19 Kommentare
Neuester Kommentar
Hier stehts
https://msdn.microsoft.com/en-us/library/office/dn789031(v=exchg.150).as ...
Du brauchst nur ein Objekt vom Typ TimeZoneInfo in den Properties StartTimeZone und EndTimeZone des CalendarItems, oder alternativ eben im Konstruktor des Service.
Gruß
https://msdn.microsoft.com/en-us/library/office/dn789031(v=exchg.150).as ...
Du brauchst nur ein Objekt vom Typ TimeZoneInfo in den Properties StartTimeZone und EndTimeZone des CalendarItems, oder alternativ eben im Konstruktor des Service.
Gruß
Zitat von @it4baer:
<- allerdings ist das ein "anderer Hersteller" ... die Frage ist, ob jetzt jemand die "Fähigkeit" besitzt, den Fehler da auszulesen und die Lösung für meine "klasse" bereitzustellen?
Alle Änderungen lassen sich auf Github schön nachvollziehen, setz die Client-Timezone im SOAP-Header richtig dann passt das auch schon im vornherein.<- allerdings ist das ein "anderer Hersteller" ... die Frage ist, ob jetzt jemand die "Fähigkeit" besitzt, den Fehler da auszulesen und die Lösung für meine "klasse" bereitzustellen?
https://github.com/jamesiarmes/php-ews/commit/734f6a3ff7938dd9ad239f17e3 ...
"Deinen Hersteller" und "deine Klasse" kennt hier keine Sau ...
die Klasse vom jamesjarmes ist leider nicht so einfach als PHP lauffähig zu machen sondern muss unter Linux installiert werden
Quark, die laufen auf jedem Webserver der PHP ausführen kann!Zitat von @it4baer:
ganz bestimmt... aber man muss diese eben "umschreiben" oder vendorlisten dazu bauen !?!?
Nö.ganz bestimmt... aber man muss diese eben "umschreiben" oder vendorlisten dazu bauen !?!?
Steht hier doch schon
Mit Skript auf Debian-Server prüfen, ob im Exchange-Account im Kalender für jeweils heute "Urlaub" steht
Einfach entpacken und nutzen, einfacher geht's nicht.
Mit Skript auf Debian-Server prüfen, ob im Exchange-Account im Kalender für jeweils heute "Urlaub" steht
Einfach entpacken und nutzen, einfacher geht's nicht.
Verarschen kann ich mich selbst, hier sind alle benötigten Klassen, auch wenn sie vielleicht jetzt anders heißen, Prinzip bleibt ja gleich.
https://github.com/jamesiarmes/php-ews/tree/master/src
Beispiele wie du sie nutzt findest du eine Ebene höher unter examples:
https://github.com/jamesiarmes/php-ews/blob/master/examples/event/create ...
https://github.com/jamesiarmes/php-ews/tree/master/src
Beispiele wie du sie nutzt findest du eine Ebene höher unter examples:
https://github.com/jamesiarmes/php-ews/blob/master/examples/event/create ...
Wohl besser als du...
Hier steht doch das wenn du Autoloading der Klassen willst das du dir die Funktion selbst anlegen musst!!!
http://jamesarmes.com/php-ews/0.1/
Wenn man zu faul ist zu lesen, bin ich hier jetzt raus, sorry.
Viel Erfolg.
Hier steht doch das wenn du Autoloading der Klassen willst das du dir die Funktion selbst anlegen musst!!!
http://jamesarmes.com/php-ews/0.1/
/**
* Function to autoload the requested class name.
*
* @param string $class_name Name of the class to be loaded.
* @return boolean Whether the class was loaded or not.
*/
function __autoload($class_name)
{
// Start from the base path and determine the location from the class name.
$base_path = 'path/to/php-ews/';
$include_file = $base_path . str_replace('_', '/', $class_name) . '.php';
return (file_exists($include_file) ? require_once $include_file : false);
}
Viel Erfolg.
aber man kann beim generieren von neuen Terminen keinen Start bzw. EndTimeZone setzen
Doch, das funktioniert hier tadellos, habe es gerade selbst ausprobiert!Schnapp dir den EWS-Editor und sende einen plain SOAP-Request mit folgendem Inhalt:
(RequestServerVersion bitte an den verwendeten Exchange anpassen!).
Und du wirst sehen das das einwandfrei durch geht.
btw. die von dir geposteten Klassen sind voller Fehler und Ungereimtheiten. Die von James ist das um Längen besser da sie alle Typen korrekt implementiert!
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Header>
<t:RequestServerVersion Version="Exchange2010_SP2"/>
</soap:Header>
<soap:Body>
<CreateItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
SendMeetingInvitations="SendToNone" >
<SavedItemFolderId>
<t:DistinguishedFolderId Id="calendar"/>
</SavedItemFolderId>
<Items>
<t:CalendarItem xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Subject>Planning Meeting</Subject>
<Body BodyType="Text">Plan the agenda for next week's meeting.</Body>
<ReminderIsSet>false</ReminderIsSet>
<ReminderMinutesBeforeStart>60</ReminderMinutesBeforeStart>
<Start>2017-05-17T12:00:00</Start>
<End>2017-05-17T13:00:00</End>
<LegacyFreeBusyStatus>Busy</LegacyFreeBusyStatus>
<Location>Testraum</Location>
<StartTimeZone Id="W. Europe Standard Time">
<t:Periods>
<t:Period Bias="-PT1H" Name="Standard" Id="trule:Microsoft/Registry/W. Europe Standard Time/1-Standard" />
<t:Period Bias="-PT2H" Name="Daylight" Id="trule:Microsoft/Registry/W. Europe Standard Time/1-Daylight" />
</t:Periods>
<t:TransitionsGroups>
<t:TransitionsGroup Id="0">
<t:RecurringDayTransition>
<t:To Kind="Period">trule:Microsoft/Registry/W. Europe Standard Time/1-Daylight</t:To>
<t:TimeOffset>PT2H</t:TimeOffset>
<t:Month>3</t:Month>
<t:DayOfWeek>Sunday</t:DayOfWeek>
<t:Occurrence>-1</t:Occurrence>
</t:RecurringDayTransition>
<t:RecurringDayTransition>
<t:To Kind="Period">trule:Microsoft/Registry/W. Europe Standard Time/1-Standard</t:To>
<t:TimeOffset>PT3H</t:TimeOffset>
<t:Month>10</t:Month>
<t:DayOfWeek>Sunday</t:DayOfWeek>
<t:Occurrence>-1</t:Occurrence>
</t:RecurringDayTransition>
</t:TransitionsGroup>
</t:TransitionsGroups>
<t:Transitions>
<t:Transition>
<t:To Kind="Group">0</t:To>
</t:Transition>
</t:Transitions>
</StartTimeZone>
<EndTimeZone Id="W. Europe Standard Time">
<t:Periods>
<t:Period Bias="-PT1H" Name="Standard" Id="trule:Microsoft/Registry/W. Europe Standard Time/1-Standard" />
<t:Period Bias="-PT2H" Name="Daylight" Id="trule:Microsoft/Registry/W. Europe Standard Time/1-Daylight" />
</t:Periods>
<t:TransitionsGroups>
<t:TransitionsGroup Id="0">
<t:RecurringDayTransition>
<t:To Kind="Period">trule:Microsoft/Registry/W. Europe Standard Time/1-Daylight</t:To>
<t:TimeOffset>PT2H</t:TimeOffset>
<t:Month>3</t:Month>
<t:DayOfWeek>Sunday</t:DayOfWeek>
<t:Occurrence>-1</t:Occurrence>
</t:RecurringDayTransition>
<t:RecurringDayTransition>
<t:To Kind="Period">trule:Microsoft/Registry/W. Europe Standard Time/1-Standard</t:To>
<t:TimeOffset>PT3H</t:TimeOffset>
<t:Month>10</t:Month>
<t:DayOfWeek>Sunday</t:DayOfWeek>
<t:Occurrence>-1</t:Occurrence>
</t:RecurringDayTransition>
</t:TransitionsGroup>
</t:TransitionsGroups>
<t:Transitions>
<t:Transition>
<t:To Kind="Group">0</t:To>
</t:Transition>
</t:Transitions>
</EndTimeZone>
</t:CalendarItem>
</Items>
</CreateItem>
</soap:Body>
</soap:Envelope>
Server Response:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="14" MinorVersion="3" MajorBuildNumber="181" MinorBuildNumber="6" Version="Exchange2010_SP2" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:CreateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:CreateItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:Items>
<t:CalendarItem>
<t:ItemId Id="AAMkADMzZGE1Nzg1LWRkMWUtNDBiZS1hNmU5LTdiMDk0NjM2NDlhOQBGAAAAAAB0HYZuTqKFTZbIxPn/41WMBwCKwpJ9YVt3S7wyyx9sKd6yAAAAAAAdAACKwpJ9YVt3S7wyyx9sKd6yAAW5Ld6UAAA=" ChangeKey="DwAAABYAAACKwpJ9YVt3S7wyyx9sKd6yAAW5Lg8o" />
</t:CalendarItem>
</m:Items>
</m:CreateItemResponseMessage>
</m:ResponseMessages>
</m:CreateItemResponse>
</s:Body>
</s:Envelope>