Microsoft Dynamics CRM 2013 | ExpandCalendarRequest

Einige von Euch mögen mich schon auf meinem Blog vermisst haben. Heute aber ein neuer Artikel im Bezug auf Service Pack 1 bzw. CRM Online 2013 Spring Wave ‘14.

Settings_Service-ManagementMit dem Roll-Out von “Leo” sind signifikante Neuerungen im Bereich Service-Management ausgerollt worden, die z.B. einen neuen Customer Service Kalender mitbringen. Neben diesem Kalender wurde auch ein weiterer Ferien-Kalender eingeführt.

Dieser Kalender ist nicht mit dem ursprünglichen Betriebsferien-Kalender zu verwechseln. Er sollte jedoch die gleichen Informationen enthalten. Sprich für die Administratoren gilt es beide Kalender ordnungsgemäß mit Daten zu versorgen, da Sie unterschiedliche Aufgaben wahrnehmen und keine Verbindung zueinander haben.

Besonders deutlich wird dies in einem SDK Experiment, dass ich Euch anhand des ExpandCalendarRequests vorstellen möchte.

User_WorkHours_Setting

Beginnen wir zunächst mit den Einstellungen eines Users in seinem Arbeitszeitenkalender. Hier konfiguriere ich in den Einstellungen, dass die Betriebsferien berücksichtigt werden sollen.

SLACalendarSetting

Ein entsprechen-des Pendant findet sich auch bei den neuen Customer Service Kalendern. HIer kann man einen Ferienkalender berücksichtigen und diesen gezielt auswählen.

Nun gibt es im SDK im Client-Verzeichnis ein SOAPLogger Sample, mit dessen Hilfe Ihr einige Ausgaben und Aufrufe aus dem CRM nachvollziehen könnt. Ich habe daher dieses Projekt ausgewählt, um die Auswirkungen eines ExpandCalendarRequests mit den neu eingeführten Kalendern zu testen.

Query_ExpandCalendar_Samples

 

 

 

 

 

 

 

 

Mit QueryScheduleRequest im 1. Block frage ich den Arbeitszeitenkalender eines Users gezielt nach verfügbaren und Nicht-verfügbaren Zeitinformationen hin ab. Dieser Abfrageblock dient mir lediglich als Kontrolle. Die eigentlich interessanten Code-Blöcke sind die beiden ExpandCalendarRequests im Folgenden. Der 1. Block liefert mir Zeitinformationen aus dem Kalender des Benutzers. Der 2. Block liefert mir entsprechende Informationen aus dem neuen Customer Service Kalender.

Sowohl in den Betriebsferien, als auch im Ferien-Kalender habe ich den 19.06. (Fronleichnam) hinterlegt, Daher wird Start- und End-Date von mir mit AddDays manipuliert.

Schauen wir uns den TimeInfo Block aus dem QueryScheduleRequest an:

<b:TimeInfo>
                <b:ActivityStatusCode>-1</b:ActivityStatusCode>
                <b:CalendarId>898428c3-b669-e311-9406-000c291235a7</b:CalendarId>
                <b:DisplayText />
                <b:Effort>0</b:Effort>
                <b:End>2014-06-19T22:00:00Z</b:End>
                <b:IsActivity>false</b:IsActivity>
                <b:SourceId>43b93bb5-daf3-e311-9412-000c291235a7</b:SourceId>
                <b:SourceTypeCode>4004</b:SourceTypeCode>
                <b:Start>2014-06-18T22:00:00Z</b:Start>
                <b:SubCode>Holiday</b:SubCode>
                <b:TimeCode>Unavailable</b:TimeCode>
</b:TimeInfo>

Wir sehen, dass hier die Einstellung “Observe Business closures” greift und uns der Zeitblock als “Unavailable” bedingt durch den Ferientag zurückgeliefert wird.

Wie sieht es nun mit ExpandCalendarRequest aus?

<b:TimeInfo>
                <b:ActivityStatusCode>-1</b:ActivityStatusCode>
                <b:CalendarId>898428c3-b669-e311-9406-000c291235a7</b:CalendarId>
                <b:DisplayText />
                <b:Effort>0</b:Effort>
                <b:End>2014-06-19T22:00:00Z</b:End>
                <b:IsActivity>false</b:IsActivity>
                <b:SourceId>43b93bb5-daf3-e311-9412-000c291235a7</b:SourceId>
                <b:SourceTypeCode>4004</b:SourceTypeCode>
                <b:Start>2014-06-18T22:00:00Z</b:Start>
                <b:SubCode>Holiday</b:SubCode>
                <b:TimeCode>Unavailable</b:TimeCode>
</b:TimeInfo>

Erfreulicherweise ist die Ausgabe identisch. Nun würden wir erwarten das diese Methode sich bei den neuen Kalender gleich verhält, denn auch hier haben wir dem System mitgeteilt, dass der Urlaubskalender bitte berücksichtigt werden soll. Was liefert uns also der Zeitinformationsblock?

<b:TimeInfo>
                <b:ActivityStatusCode>-1</b:ActivityStatusCode>
                <b:CalendarId>0974b546-dbf3-e311-9412-000c291235a7</b:CalendarId>
                <b:DisplayText />
                <b:Effort>1</b:Effort>
                <b:End>2014-06-19T15:00:00Z</b:End>
                <b:IsActivity>false</b:IsActivity>
                <b:SourceId>fac75d32-e4f3-e311-9412-000c291235a7</b:SourceId>
                <b:SourceTypeCode>4004</b:SourceTypeCode>
                <b:Start>2014-06-19T06:00:00Z</b:Start>
                <b:SubCode>Schedulable</b:SubCode>
                <b:TimeCode>Available</b:TimeCode>
</b:TimeInfo>

Leider jedoch liefert hier der Zeitblock eine Verfügbarkeit für den kompletten Zeitraum zurück. Der Ferienkalender, in dem ebenfalls Fronleichnam hinterlegt wurde wird hier also nicht berücksichtigt.

Die gute Nachricht vorweg: Es sollte sich dabei um einen Bug handeln, der in einem zukünftigen Update Rollup behoben werden sollte.

Die schlechte Nachricht: Der bis dato notwendige Workaround ist, den neuen Ferienkalender zusätzlich abzufragen und sich die verfügbare Zeit somit selbst auszurechnen bzw. zu bestimmen.

Dieses kleine Beispiel sollte Euch aufzeigen, dass mit der Einführung der neuen Funktionen auch einige Berührungspunkte in Sachen Abfragen (SDK) zu berücksichtigen sind. Zukünftige Business-Logiken müssen ggfs. daraufhin angepasst werden.

Bis zum nächsten Mal.

Technorati Tags:

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s