From b12fcd09398ba116ddce14262ab62689ce5ed6d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Tue, 29 Sep 2026 12:42:42 +0500 Subject: [PATCH] =?UTF-8?q?chore:=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF=D1=82?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D0=B8?= =?UTF-8?q?=D0=BD=D0=B4=D0=B5=D0=BA=D1=81=D0=BE=D0=B2=20=D0=B2=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=D1=85=20=D1=81=D0=BE=D0=B3=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Только чтение: по каждому списку «… — согласование» показывает число строк и проиндексированы ли Ticket, ApprovalStatus и TansuSiteApprover — без индекса фильтр по колонке в списке больше 5000 строк падает. Co-Authored-By: Claude Opus 5.5 (1M context) --- provisioning/Inspect-Indexes.ps1 | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 provisioning/Inspect-Indexes.ps1 diff --git a/provisioning/Inspect-Indexes.ps1 b/provisioning/Inspect-Indexes.ps1 new file mode 100644 index 0000000..f3e009e --- /dev/null +++ b/provisioning/Inspect-Indexes.ps1 @@ -0,0 +1,54 @@ +<# +.SYNOPSIS + Диагностика: для каждого списка «… — согласование» на сайте печатает число + строк и проиндексированы ли колонки, по которым портал фильтрует маршрут. + Только чтение, ничего не меняет. + +.DESCRIPTION + Портал ищет шаги маршрута фильтрами по Ticket (TicketId eq …), ApprovalStatus + и TansuSiteApprover. В списке больше 5000 строк такой фильтр работает только + по проиндексированной колонке — иначе SharePoint отвечает ошибкой порога + представления. Скрипт показывает, где индекса нет и как близко список к 5000. + +.EXAMPLE + ./Inspect-Indexes.ps1 -SiteUrl "https://tnsukz.sharepoint.com/sites/requests" ` + -ClientId "7459c965-5ed4-4673-8140-0ab8faf9db64" -Tenant "tnsukz.onmicrosoft.com" ` + -Thumbprint "224B64C8E0CAB1E09AF373E92B3AF4AC33C1233C" +#> +param( + [Parameter(Mandatory = $true)][string]$SiteUrl, + [Parameter(Mandatory = $true)][string]$ClientId, + [Parameter(Mandatory = $true)][string]$Tenant, + [Parameter(Mandatory = $true)][string]$Thumbprint +) + +$ErrorActionPreference = 'Stop' + +# Колонки списков согласования, по которым портал фильтрует (см. +# shared/approval/approvalList.service.ts и features/myRequests/myRequests.service.ts). +$filteredColumns = @('Ticket', 'ApprovalStatus', 'TansuSiteApprover') + +# Порог представления SharePoint: выше него фильтр по неиндексированной колонке падает. +$listViewThreshold = 5000 + +Connect-PnPOnline -Url $SiteUrl -ClientId $ClientId -Tenant $Tenant -Thumbprint $Thumbprint + +$approvalLists = Get-PnPList | Where-Object { $_.Title -like '*— согласование' } | Sort-Object Title + +$report = foreach ($list in $approvalLists) { + $row = [ordered]@{ + 'Список' = $list.Title + 'Строк' = $list.ItemCount + 'До 5000' = $listViewThreshold - $list.ItemCount + } + foreach ($name in $filteredColumns) { + $field = Get-PnPField -List $list -Identity $name -ErrorAction SilentlyContinue + $row[$name] = if (-not $field) { 'нет колонки' } elseif ($field.Indexed) { 'индекс' } else { 'НЕТ индекса' } + } + [pscustomobject]$row +} + +Write-Host "`nИндексы в списках согласования ($SiteUrl):`n" -ForegroundColor Cyan +$report | Format-Table -AutoSize + +Disconnect-PnPOnline