C# 使用finditem()和getitems()获取EWS约会
我使用finditem()和getitems()返回calendaritemtype和加载的属性。这个电话是在用户提交约会后10秒发出的,我可以确认我收到了房间或资源的接受,就像提交约会后的第二秒一样。由于我的网站流量很大,我需要在创建后立即检查预约,以获得房间的接受或拒绝,这会阻止同时预订。我已经拼凑了下面的方法来返回与会者的响应,这样我就可以在确认时传递真或假。当我运行这个方法时,它列出了很多约会,但从来没有列出我刚刚创建的约会 请记住,我立即从房间收到了一个接受,我只是无法使用calendaritemtype(约会)以编程方式获得接受C# 使用finditem()和getitems()获取EWS约会,c#,exchangewebservices,C#,Exchangewebservices,我使用finditem()和getitems()返回calendaritemtype和加载的属性。这个电话是在用户提交约会后10秒发出的,我可以确认我收到了房间或资源的接受,就像提交约会后的第二秒一样。由于我的网站流量很大,我需要在创建后立即检查预约,以获得房间的接受或拒绝,这会阻止同时预订。我已经拼凑了下面的方法来返回与会者的响应,这样我就可以在确认时传递真或假。当我运行这个方法时,它列出了很多约会,但从来没有列出我刚刚创建的约会 请记住,我立即从房间收到了一个接受,我只是无法使用calend
public static ResponseInfo GetCalendarEvents(ExchangeServiceBinding esb, DateTime starttime, Reservation res, Patron pat)
{
var startts = new TimeSpan(0, 0, 0, 0);
var endts = new TimeSpan(0, 23, 59, 0);
var endtime = new DateTime();
//set timespan of date to beginning of dayy
starttime = starttime.Date + startts;
endtime = starttime.Date + endts;
// Form the FindItem request.
var findItemRequest = new FindItemType();
var ce = new ResponseInfo();
var calendarView = new CalendarViewType
{
StartDate = starttime,
EndDate = endtime,
MaxEntriesReturned = 100,
MaxEntriesReturnedSpecified = true
};
findItemRequest.Item = calendarView;
// Define which item properties are returned in the response.
var itemProperties = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.IdOnly };
// Define the traversal type.
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
// Use the Default shape for the response.
findItemRequest.ItemShape = itemProperties;
// Identify which folders to search to find items.
var folderIDArray = new DistinguishedFolderIdType[2];
folderIDArray[0] = new DistinguishedFolderIdType();
folderIDArray[0].Id = DistinguishedFolderIdNameType.calendar;
// Add folders to the request.
findItemRequest.ParentFolderIds = folderIDArray;
try
{
// Send the FindItem request and get the response.
var findItemResponse = esb.FindItem(findItemRequest);
// Next, enumerate through the Items returned by FindItem.
foreach (FindItemResponseMessageType responseMessage in findItemResponse.ResponseMessages.Items)
{
if (responseMessage.ResponseClass == ResponseClassType.Success)
{
var mailboxItems = (ArrayOfRealItemsType)responseMessage.RootFolder.Item;
for (int itemCount = 0; itemCount < mailboxItems.Items.Length; itemCount++)
{
var inboxItem = mailboxItems.Items[itemCount];
// Call GetItem on each ItemId to retrieve the
// item's Body property and any AttachmentIds.
// Form the GetItem request.
var getItemRequest = new GetItemType
{
ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.AllProperties }
};
// AllProperties on a GetItem
getItemRequest.ItemIds = new ItemIdType[1];
getItemRequest.ItemIds[0] = inboxItem.ItemId;
var getItemResponse = esb.GetItem(getItemRequest);
// We only passed in one ItemId to the GetItem
// request. Therefore, we can assume that
// we got at most one Item back.
var getItemResponseMessage = getItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
if (getItemResponseMessage != null)
{
if (getItemResponseMessage.ResponseClass == ResponseClassType.Success && getItemResponseMessage.Items.Items != null && getItemResponseMessage.Items.Items.Length > 0)
{
inboxItem = getItemResponseMessage.Items.Items[0];
var e = (CalendarItemType)inboxItem;
if (e.Start == res.Start && e.End == res.End)
{
foreach (AttendeeType at in e.RequiredAttendees)
{
//attendee must accept meeting & attendee email must match email in reservation
if (at.ResponseType == ResponseTypeType.Accept && at.Mailbox.EmailAddress == res.EmailAddress)
{
ce.Mailbox = at.Mailbox.EmailAddress;
ce.ApptStart = e.Start;
ce.ApptEnd = e.Start;
ce.ApptResponse = ResponseTypeType.Accept;
return ce;
}
}
}
}
else
{
ce.Mailbox = "getItemResponseMessage.ResponseClass";
return ce;
}
}
else
{
ce.Mailbox = "getItemResponseMessage is null";
return ce;
}
}
}
else
{
ce.Mailbox = "findItemResponseMessage is null";
return ce;
}
}
}
catch (ServiceRequestException ex)
{
Logger.LogStringError("****Error****: GetCalendarEvents()...ServiceRequestException= " + ex);
}
catch (WebException ex)
{
Logger.LogStringError("****Error****: GetCalendarEvents()...WebException= " + ex);
}
catch (Exception ex)
{
Logger.LogStringError("****Error****: GetCalendarEvents()...Exception= " + ex);
}
return ce;
}
public static ResponseInfo GetCalendarEvents(ExchangeServiceBinding esb、DateTime starttime、预订资源、用户pat)
{
var startts=新的时间跨度(0,0,0,0);
var endts=新的时间跨度(0,23,59,0);
var endtime=new DateTime();
//将日期的时间跨度设置为一天的开始
starttime=starttime.Date+startts;
endtime=starttime.Date+endts;
//形成FindItem请求。
var findItemRequest=新的FindItemType();
var ce=新响应信息();
var calendarView=新的CalendarViewType
{
开始日期=开始时间,
EndDate=endtime,
MaxEntriesReturned=100,
MaxEntriesReturnedSpecified=true
};
findItemRequest.Item=calendarView;
//定义响应中返回的项属性。
var itemProperties=new itemsresponseshapetype{BaseShape=DefaultShapeNamesType.IdOnly};
//定义遍历类型。
findItemRequest.Traversal=ItemQueryTraversalType.Shallow;
//使用响应的默认形状。
findItemRequest.ItemShape=itemProperties;
//确定要搜索哪些文件夹以查找项目。
var folderIDArray=新区分的folderidType[2];
folderIDArray[0]=新的区分FolderIDType();
folderIDArray[0]。Id=DiscrimitedFolderIDNameType.calendar;
//将文件夹添加到请求中。
findItemRequest.ParentFolderId=FolderDarray;
尝试
{
//发送FindItem请求并获取响应。
var findItemResponse=esb.FindItem(findItemRequest);
//接下来,枚举FindItem返回的项。
foreach(findItemResponse.ResponseMessages.Items中的FindItemResponseMessageType responseMessage)
{
if(responseMessage.ResponseClass==ResponseClassType.Success)
{
var mailboxItems=(ArrayOfRealItemsType)responseMessage.RootFolder.Item;
对于(int-itemCount=0;itemCount0)
{
inboxItem=getItemResponseMessage.Items.Items[0];
var e=(CalendarItemType)在Oxitem中;
如果(e.Start==res.Start&&e.End==res.End)
{
foreach(与会者在e.RequiredAttendes中键入at)
{
//与会者必须接受会议&与会者电子邮件必须与预订中的电子邮件匹配
if(at.ResponseType==ResponseType.Accept&&at.Mailbox.EmailAddress==res.EmailAddress)
{
ce.Mailbox=at.Mailbox.EmailAddress;
ce.ApptStart=e.启动;
ce.APPTEN=e.启动;
ce.ApptResponse=ResponseTypeType.Accept;
返回ce;
}
}
}
}
其他的
{
ce.Mailbox=“getItemResponseMessage.ResponseClass”;
返回ce;
}
}
其他的
{
ce.Mailbox=“getItemResponseMessage为空”;
返回ce;
}
}
var calendarView = new CalendarViewType
{
StartDate = DateTime.Now.AddDays(-1),
EndDate = DateTime.Now.AddDays(1),
MaxEntriesReturned = 100,
MaxEntriesReturnedSpecified = true
};
if (e.Start.ToLocalTime() == res.Start && e.End.ToLocalTime() == res.End)
{
foreach (AttendeeType at in e.RequiredAttendees)
{
//attendee must accept meeting & attendee email must match email in reservation
if (at.ResponseType == ResponseTypeType.Accept && at.Mailbox.EmailAddress == res.EmailAddress)
{
ce.Mailbox = at.Mailbox.EmailAddress;
ce.ApptStart = e.Start;
ce.ApptEnd = e.Start;
ce.ApptResponse = ResponseTypeType.Accept;
calevents.Add(ce);
}
}
}