Foglaltság lekérdezése az Exchange-ből

Az Exchange Web Services (EWS) segítségével tetszőleges klienssel kapcsolódhatunk az Exchange Serverhez és lekérdezhetjük a felhasználóink naptárát.

Mivel szabványos SOAP-os webszolgáltatásról van szó, az első lépés természetesen a WSDL fájl elérése, ami itt található:

http://SERVER/EWS/services.wsdl

Erre adjunk referenciát Visual Studioban (a SERVER helyére beírva az Exchange Serverünk FQDN-jét) és közben figyeljünk a http/https alkalmazására. Ha ez megvan, egy ExchangeServerBinding objektumon keresztül kapcsolódhatunk a szolgáltatáshoz:

  ExchangeServiceBinding binding = new ExchangeServiceBinding();
  binding.Credentials = CredentialCache.DefaultCredentials;
  binding.Url = @"http://SERVER/EWS/exchange.asmx";

Fontos, hogy mindenképpen hitelesíteni kell magunkat, alapértelmezés szerint anonymous felhasználó nem fér hozzá a webszolgáltatáshoz. A foglaltság lekérdezéséhez számos paramétert át kell adnunk a kérésben, például azt, hogy a cél felhasználó naptárának mely időszakára vagyunk kíváncsiak. Szerintem a legegyszerűbb egy hétfőtől péntekig tartó időszakot megadni:

  Duration duration = new Duration();
  duration.StartTime = this._firstDay;    // E hét hétfője
  duration.EndTime = this._firstDay.AddDays( 5 );

Ezen a webszolgáltatáson keresztül többféle formátumban is lekérdezhetjük a felhasználó naptárát. Nekünk most arra van szükségünk, hogy az előbb megadott időszakban, fél órás bontásokban (interval), mikor szabad vagy mikor foglalt az illető:

  FreeBusyViewOptionsType options = new FreeBusyViewOptionsType();
  options.TimeWindow = duration;
  options.RequestedView = FreeBusyViewType.FreeBusyMerged;
  options.RequestedViewSpecified = true;
  options.MergedFreeBusyIntervalInMinutes = 30;
  options.MergedFreeBusyIntervalInMinutesSpecified = true;

Meg kell adnunk azt is, hogy kinek a naptára érdekel minket (Free/Busy time Read jogosultsággal kell bírnunk a naptárához), itt több felhasználót is felsorolhatunk MailboxData objektumok formájában:

  MailboxData mailbox = new MailboxData();
  mailbox.AttendeeType = MeetingAttendeeType.Required;
  mailbox.Email = new EmailAddress();
  mailbox.Email.Address = "felhasználó@example.com";

A legfájdalmasabb rész a kérő időzónájához tartozó összes paraméter megadása. A Central European Standard Time zónához tartozó értékeket kibogarásztam a registry-ből, de persze akár változhat is:

  SerializableTimeZone timeZone = new SerializableTimeZone();
  timeZone.Bias = -60;
  timeZone.StandardTime = new SerializableTimeZoneTime();
  timeZone.StandardTime.Bias = 0;
  timeZone.StandardTime.DayOfWeek = "Sunday";
  timeZone.StandardTime.DayOrder = 5;
  timeZone.StandardTime.Month = 10;
  timeZone.StandardTime.Time = "03:00:00";
  timeZone.DaylightTime = new SerializableTimeZoneTime();
  timeZone.DaylightTime.Bias = -60;
  timeZone.DaylightTime.DayOfWeek = "Sunday";
  timeZone.DaylightTime.DayOrder = 5;
  timeZone.DaylightTime.Month = 3;
  timeZone.DaylightTime.Time = "00:00:00";

Ha ez mind megvan, összerakhatjuk őket egyetlen objektumba:

  GetUserAvailabilityRequestType request = new GetUserAvailabilityRequestType();
  request.TimeZone = timeZone;
  request.FreeBusyViewOptions = options;
  request.MailboxDataArray = new MailboxData[] { mailbox };

Végül meghívhatjuk a webszolgáltatás GetUserAvailabilty függvényét:

  GetUserAvailabilityResponseType response = binding.GetUserAvailability( request );

A válaszban többféle formában is megtaláljuk, hogy mikor foglalt és mikor szabad az illető. Egy szabad/foglalt naptár rajzolásához talán a legegyszerűbb, ha a response.FreeBusyResponseArray[ 0 ].FreeBusyView.MergedFreeBusy stringet vizsgáljuk: ez pontosan annyi karakterből áll, ahány intervallumot kértünk a szervertől és minden esetben 0 jelzi, ha még szabad az az intervallum. Az egyes értékek előbb egy napon belül mennek végig az intervallumokon, majd utána jön a következő nap.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s