ErgebnisTypen automatisiert aktualisieren

Wenn im Rahmen eines Projektes Anzeigevorlagen (DisplayTemplates) und Ergebnistypen (ResultTypes) erstellt werden, müssen die Ergebnistypen immer wieder aktualisiert werden.
Die entsprechende Meldung stellt sich so dar:


Viele Projekte erschweren sich das Leben, indem dieser Schritt immer manuell vollzogen werden muss – auch wenn der Rest automatisiert ist.

Das aktualisieren ist eigentlich (on premises) kein Hexenwerk: Set-SPEnterpriseSearchResultItemType kann verwendet werden um die DisplayProperties zu aktualisieren.

Ich habe ein Skript erstellt, mit dem alle ResultTypes automatisch aktualisiert werden können:

<#
.SYNOPSIS
Updates the DisplayProperties of the ResultItemTypes.
.Notes
This script currently only updates Site-Level-ResultTypes.
.Example
Update-ResultItemTypesProperties -SiteUrl https://my.sharepoint.com/sites/search
Updates DisplayProperties of all non builtin ResultTypes
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[string]$SiteUrl
)
$ErrorActionPreference="Stop"
$site = Get-SPSite $SiteUrl
$ssa = Get-SPEnterpriseSearchServiceApplication
$owner = Get-SPEnterpriseSearchOwner -Level SPSite -SPWeb $site.RootWeb
# TODO: Ssa and SPWeb are also possible locations for owner...
$masterPageGallery = $site.GetCatalog("MasterPageCatalog")
$resultTypes = Get-SPEnterpriseSearchResultItemType -Owner $owner -SearchApplication $ssa | ? { -not $_.Builtin }
$resultTypes | % {
Write-Verbose "Processing: $($_.Name)"
$displayTemplateFileName = Split-Path -Path $_.DisplayTemplateUrl -Leaf
$displayTemplate = $masterPageGallery.Items | ? {$_.Name -eq $displayTemplateFileName}
$propPairs = $displayTemplate[[guid]"a0dd6c22-0988-453e-b3e2-77479dc9f014"];
$propsString = ""
if(-not [string]::IsNullOrWhiteSpace($propPairs)){
$props = $propPairs.Split(",") | %{ $_.Split(":") | Select -Last 1 } | %{ $_.Trim("'") }
$propsString = [string]::Join(",", $props)
}
if($_.DisplayProperties -eq $propsString) {
# match
return;
}
Set-SPEnterpriseSearchResultItemType -Identity $_ -Owner $owner -SearchApplication $ssa -DisplayProperties $propsString
}

Mikael Svenson hat dazu auch einen c# Schnipsel veröffentlicht, der die entsprechende Aktualisierung durchführt. Dieser kann z.B. in einem FeatureReceiver verwendet werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.