tig*_*tig 14 exchange-server exchangewebservices
如果我这样做:
_calendar = (CalendarFolder)Folder.Bind(_service, WellKnownFolderName.Calendar);
var findResults = _calendar.FindAppointments(
new CalendarView(startDate.Date, endDate.Date)
);
Run Code Online (Sandbox Code Playgroud)
我有时会发现太多物品被发现的例外情况.
"您已经超过了查找操作可以返回的最大对象数.使用分页来减小结果大小并再次尝试您的请求."
CalendarView支持一个让我指定的构造函数MaxItemsReturned,但我无法弄清楚如何再次调用它,指定offsetfor paging.ItemView有这个构造函数:
public ItemView(int pageSize, int offset)
Run Code Online (Sandbox Code Playgroud)
这种用法很明显.
怎么样CalendarView?如何使用CalendarView?进行分页?
我可以将日期范围缩短为更短的范围,但仍无法确定它是否可以正常工作.
CalendarView实际上并不是从PagedView派生的,因此您所期望的所有分页逻辑都是不可能的.MaxItemsReturned的上限大于页面大小.返回的错误与PagedView派生的视图类型更相关.
我玩了一些PowerShell,通过基于返回的最后一项滚动CalendarView窗口来模拟分页,但不幸的是,CalendarView和Appointment扩展背后的逻辑使得无法准确获得所需内容.基本上,当它扩展时,它将停止在"N"项,但是你可能有多个约会从同一时间开始,它可能会给你一个,但不是其余的.此外,任何与窗口重叠的约会都将被包含在内,因此如果您在日历上有50个约会,并且所有约会都具有相同的开始时间,则下面的代码将进入无限循环.
Add-Type -Path "C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll"
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService
$cred = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials ($user , $passwd)
$service.UseDefaultCredentials = $false
$service.Credentials = $cred
$service.AutodiscoverUrl($user)
$num=50
$total=0
$propsetfc = [Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties
$calfolder = [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar
$service.UserAgent = "EWSCalViewTest"
$calview = New-Object Microsoft.Exchange.WebServices.Data.CalendarView("1/1/2012","12/31/2012", $num)
$calview.PropertySet = $propsetfc
do {
$findresults = $service.FindAppointments($calfolder,$calview)
write-host "Found:" $findresults.Items.Count "of" $findresults.TotalCount
$calview.StartDate = $findresults.Items[$findresults.Items.Count-1].Start
$total+=$findresults.Items.Count
} while($findresults.MoreAvailable)
write-host $total "total found (including dups)"
Run Code Online (Sandbox Code Playgroud)
不幸的是,扩展和重叠逻辑意味着你会以这种方式获得重复,每个调用至少有一个重复.
如果我必须使用CalendarView编写代码,我可能会使用MaxItemsReturned为1000(如果您未指定MaxItemsReturned,这也是将您引入错误条件的限制).如果你在一次通话中得到它们,那你就是好的.如果你必须再拨一次电话,那么你将不得不做一些额外的工作来重复删除结果集.我还试图通过在CalendarView中使用尽可能窄的日期窗口来限制服务器的负担,因为您要求Exchange计算整个时间跨度内定期约会的扩展.对于服务器来说,这可能是相当昂贵的操作.
| 归档时间: |
|
| 查看次数: |
6430 次 |
| 最近记录: |