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.



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2010.02.21. 8:54:55 | Permalink | Hozzászólások: 0 | Tárgyszavak:


  • Hova kattintottam?

    Balássy György (MS RD, ASP.NET MVP, MCTS) Gyakori feladat, hogy megjelenítjük az adatokat egy weboldalon és szeretnénk biztosítani a felhasználónak, hogy valamelyik rekordra kattintva ilyen vagy éppen olyan műveletet végezzen el az adott soron. Valami oknál fogva a szokásos fejlesztői hozzáállás a feladathoz az, hogy a gomb kattintás eseménykezelőjében elkezdjük keresgélni, hogy vajon melyik rekordra kattinthatott szerencsétlen felhasználó és ilyenkor az ember hajlamos elveszni a SelectedItem, SelectedIndex, DataItem, DataRow, DataRowView, DataRowItem és társai között. Tovább »
  • Szolgálati közlemény: RSS URL változás

    Balássy György (MS RD, ASP.NET MVP, MCTS) Várhatóan még ezen héten frissítjük az MSDN Kompetencia Központ honlapjának kódját, amivel együtt jár, hogy megváltozik az oldalhoz tartozó RSS csatorna címe. Az új cím már most is elérhető, ezért kérünk minden kedves olvasónkat, hogy a hírolvasó programjában ezt állítsa be: http://feeds.feedburner.com/msdnkk Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások