[from] http://www.cnblogs.com/love007/archive/2013/06/26/3156852.html
采用模拟账号的方式读取日历信息,注意下日历的内容读取(Body)读取。代码如下:(采用 EWS API 2.0版本)
1、读取内容前必须设置如下属性:否则会提示:You must load or assign this property before you can read its value Body
如下:
//*************************以为设置为读取内容,否则会提示:You must load or assign this property before you can read its value Body
PropertySet detailedPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.Recurrence);
service.LoadPropertiesForItems(from Item item in findResults select item, detailedPropertySet);
//******************************
设置后正常。
2、如果想读取内容的纯文本,目前Exchange server2010内的版本支持读取带HTML的内容。调用代码如下:
//如果文本不为空
if (item.TextBody != null)
{
TextBody txtBody = item.TextBody;
//
info.BodyText = txtBody.Text;
}
调用后出现如下错误:
所以只能用正则表达式获取文本内容。
附带正确代码:
#region//读入日历信息
///
///读入日历信息///
/// 配置参数
/// 开始时间
/// 结束时间
/// 返回列表
private static ListGetCalendarList(EwsConfig config,DateTime searchdtStart,DateTime searchdtEnd)
{//返回值
List CalendarInfoList = new List();try{//读取未读邮件
CalendarFolder calendarfolder =(CalendarFolder)Folder.Bind(service, WellKnownFolderName.Calendar);//如果不为空
if (calendarfolder != null)
{//检索开始时间和结束时间
CalendarView calendarView = newCalendarView(searchdtStart, searchdtEnd);//检索数据
FindItemsResults findResults =calendarfolder.FindAppointments(calendarView);//*************************以为设置为读取内容,否则会提示:You must load or assign this property before you can read its value Body
PropertySet detailedPropertySet = newPropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.Recurrence);
service.LoadPropertiesForItems(from Item item in findResults selectitem, detailedPropertySet);//******************************//返回
foreach (Appointment item infindResults.Items)
{//实体类
CalendarInfo info = newCalendarInfo();//主题
info.Identity =item.ICalUid;//来源
info.Source = "Exchange2010";//主题
info.Subject =item.Subject;//地区
info.Location =item.Location;//开始时间
info.StartTime =item.Start.ToLocalTime();//结束时间
info.EndTime =item.End.ToLocalTime();//url
info.Url =item.WebClientReadFormQueryString;//加入如下,表示读取内容,否则会提示如下://HTML如果不为空
if (item.Body != null)
{//html格式的内容
MessageBody body =item.Body;//读取文本
info.BodyHtml =body.Text;
}//
//读取id
if (item.Id != null)
{
info.ItemIdType= new CalendarInfo.CalendarItemIdType { Id = item.Id.UniqueId, ChangeKey =item.Id.ChangeKey };
}//加入到集合中去
CalendarInfoList.Add(info);
}
}
}catch(Microsoft.Exchange.WebServices.Data.ServiceResponseException ex)
{throwex;
}//return
returnCalendarInfoList;
}#endregion