我们通过交换管理我们的汽车池预订。每辆车都有一个日历,您可以在车上预约使用它。
我的任务是检索每辆车的日历和每次预约,但我仍然坚持如何通过EWS拨打正确的电话。
我的步骤如下:
AutodiscoverUrl()
现在我的问题位于“检索约会”,因为我只能通过其WellKnownFolders访问我自己的日历。
如何访问其他公共calanders并检索他们的约会?
这是我目前使用的代码:(从http://msdn.microsoft.com/en-us/library/office/dn439786(v=exchg.80).aspx收集)
ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
service.Credentials = new WebCredentials(@"domain\svc_account", @"Dummypassword");
service.UseDefaultCredentials = false;
service.TraceEnabled = true;
service.TraceFlags = TraceFlags.All;
service.AutodiscoverUrl(@"svc_account@domain.com", RedirectionUrlValidationCallback);
DateTime startTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddDays(10);
int num_appts = 10;
CalendarFolder calFolder = CalendarFolder.Bind(service, WellKnownFolderName.Calendar, new PropertySet());
CalendarView calView = new CalendarView(startTime, endTime, 10);
calView.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
FindItemsResults<Appointment> appointments = calFolder.FindAppointments(calView);
foreach (Appointment a in appointments)
{
//Do stuff later on...
}
再次:这适用于我的日历中的约会。我无法在MSDN中找到有关如何访问其他人数据的部分。
答案 0 :(得分:3)
您可以让特定的用户帐户模拟其他用户帐户并访问其详细信息,而无需使用其用户名和密码。这也适用于资源日历。
string impName = @"impy";
string impPassword = @"password";
string impDomain = @"domain";
string impEmail = @"impy@domain.com";
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
service.Credentials = new NetworkCredential(impName, impPassword, impDomain);
service.AutodiscoverUrl(impEmail);
// This will work as if you are that car.
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, @"CAR1@domain.com");
更多参考资料: http://msdn.microsoft.com/en-us/library/dd633680(v=exchg.80).aspx
答案 1 :(得分:2)
鉴于服务用户具有对给定用户日历的读取权限,您可以执行以下操作:
// this is the user whose calendar you want to access
var emailAddress = "user@mydomain.com";
var mailbox = new Mailbox(emailAddress);
var folderId = new FolderId(WellKnownFolderName.Calendar, mailbox);
var calendar = CalendarFolder.Bind(service,
folderId,
BasePropertySet.FirstClassProperties);