gpt4 book ai didi

exchange-server - 如何使用 Exchange Web 服务 CalendarView 进行分页

转载 作者:行者123 更新时间:2023-12-03 22:35:00 25 4
gpt4 key购买 nike

如果我这样做:

_calendar = (CalendarFolder)Folder.Bind(_service, WellKnownFolderName.Calendar);

var findResults = _calendar.FindAppointments(
new CalendarView(startDate.Date, endDate.Date)
);

我有时会遇到一个异常,即发现了太多项目。

“您已超出查找操作可以返回的最大对象数。使用分页来减少结果大小,然后重试您的请求。”
CalendarView支持让我指定 MaxItemsReturned 的构造函数,但我不知道如何再次调用它,指定 offset用于分页。 ItemView有这个构造函数:
 public ItemView(int pageSize, int offset)

它的用法是显而易见的。

怎么样 CalendarView ?如何使用 CalendarView 进行分页?

我可以将日期范围缩小到更短的跨度,但仍然无法确定它是否确实有效。

最佳答案

CalendarView实际上并非源自 PagedView ,因此您期望的所有分页逻辑都是不可能的。 MaxItemsReturned 比页面大小更像是一个上限。返回的错误与 PagedView 派生 View 类型更相关。

我使用了一些 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)"

不幸的是,扩展和重叠逻辑意味着你会以这种方式得到重复,除了第一个调用之外,每次调用至少有一个重复。

如果我必须使用 CalendarView 编写代码,我可能会使用 1000 的 MaxItemsReturned(如果您不指定 MaxItemsReturned,这也是使您陷入错误状态的限制)。如果你一通电话就能搞定,那就太好了。如果您必须进行第二次调用,则必须做一些额外的工作来对结果集进行重复数据删除。我还尝试通过在 CalendarView 中使用尽可能窄的日期窗口来限制服务器的负担,因为您要求 Exchange 计算整个时间跨度内重复约会的扩展。对于服务器来说,这可能是一项相当昂贵的操作。

关于exchange-server - 如何使用 Exchange Web 服务 CalendarView 进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11999781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com