众所周知,SharePoint当表的item数量和文档库的文件数量超过5000后有列表视图阈值的限制,SharePoint一次请求返回的最大数量是5000,所以在使用数据量特别大的库或表时,需要多次请求。尤其是需要完成分页请求时,SharePoint自带的请求无法很好的满足日常的工作需求,以SharePoint Rest api为例,通过使用
t
o
p
和
top和
top和skiped关键字,虽然也可完成分页的请求,但是还需要配合计算需要跳过的item的id,如果表中的许多数据在后面删除,九会丢失很多id,使得计算出的id不准确,造成分业数据的不准确,就需要通过多次请求获取所有数据再对数据进行假分页。这样的问题就是在加载数据时需要比较久的时间,用户体验不佳。 在表数据超过5000后,也无法使用$filter关键字对表进行过滤(写这边博客的想到也可以通过rest api调用caml过滤表)。 综上:在初期开发时,需要考虑到后期数据量变大的问题,提前处理。 附从large library中过滤出指定类型文件并发送邮件给指定人员的脚本:
Add-PSSnapin Microsoft.Sharepoint.Powershell;
#目前为测试站点url
$web = Get-SPWeb siteurl;
$ListName1 = "Library1 ";
$list1 = $web.Lists[$ListName1];
$Query = New-Object Microsoft.SharePoint.SPQuery;
$caml = '<View Scope="RecursiveAll">
<Query>
<Where>
<And>
<Lt>
<FieldRef Name="Created" Type="DateTime"/>
<Value Type="DateTime" >
<Today OffsetDays="-1"/>
</Value>
</Lt>
<Eq>
<FieldRef Name="columnInternalname" />
<Value Type="Text">体检报告</Value>
</Eq>
</And>
</Where>
</Query>
</View>
<ViewFields>';
$Query.ViewXml = $caml;
$ListItems1 = $list1.GetItems($Query);
$YesterdayDate = (Get-Date).AddDays(-1).ToString('yyyy-MM-dd')
try {
$subject = $YesterdayDate + ' HealthCertificate';
ForEach ($Item1 in $ListItems1) {
If ($Item1.ContentTypeId -eq "0x0101003ADB858DB6E3BA43BF71B17F054997D30022ADF6D49D8F024BA37B9D37E8F9CBE3") {
$b = $Item1.File.OpenBinary();
$fs = New-Object System.IO.FileStream(("d:\FileStagingFolder\" + $Item1.File.Name), [System.IO.FileMode]::Create);
$bw = New-Object System.IO.BinaryWriter($fs);
$bw.Write($b);
$bw.Close();
$fileUrl = "d:\FileStagingFolder\" + $Item1.File.Name;
Send-MailMessage -From 'spadmin@mail.com' -To 'amos@mail.com' -Subject $subject -SmtpServer "mailaws.swirebev.com" -Attachments $fileUrl ;
}
}
Remove-Item D:\FileStagingFolder\*.*;
}
catch [System.SystemException] {
if ($ListItemsOthers.length -eq 0 -or $ListItems1.length -eq 0 -or $ListItems2.length -eq 0) {
$subject = $YesterdayDate + 'error message';
$ExceptionMessage = "Error sending health certificate script (SharePoint 2019 server), exception information:" + $_ ;
Send-MailMessage -From 'spadmin@mail.com' -To 'spadmin@mail.com' -Cc 'amos@mail.com' -Subject $subject -SmtpServer "smtpserver" -Body $ExceptionMessage;
}
}
|