diff --git a/README.md b/README.md index 02cc57f..fdf1ce3 100644 --- a/README.md +++ b/README.md @@ -209,8 +209,8 @@ Nach **Speichern** wird die Konfiguration pro Liste beziehungsweise Bibliothek i ### Anzeige aktivieren -Der Field Customizer und das Command Set werden einmal pro Liste beziehungsweise Bibliothek mit dem -mitgelieferten Skript registriert: +Der Field Customizer wird einmal pro Liste beziehungsweise Bibliothek mit dem mitgelieferten Skript +an der Ablaufdatumsspalte registriert: ```powershell .\scripts\Enable-ExpiryIndicator.ps1 ` @@ -220,8 +220,8 @@ mitgelieferten Skript registriert: ``` Der Wert von `ExpiryFieldInternalName` muss mit **Internes Ablaufdatumsfeld** in den Einstellungen -übereinstimmen. Das Skript registriert zugleich die Befehle **Expiry-Einstellungen** und -**Ablaufdatum +1 Jahr**. Danach die Listenansicht neu laden. +übereinstimmen. Das Command Set wird durch die Installation der App registriert. Danach die Listenansicht +neu laden. ### Ablaufdatum um ein Jahr verlängern diff --git a/config/package-solution.json b/config/package-solution.json index 0c3d78b..7c28aed 100644 --- a/config/package-solution.json +++ b/config/package-solution.json @@ -3,7 +3,7 @@ "solution": { "name": "expiry-indicator-client-side-solution", "id": "68bb6d2d-9895-45b4-88e8-b98835faa981", - "version": "1.0.1.0", + "version": "1.0.3.0", "includeClientSideAssets": true, "skipFeatureDeployment": false, "features": [ @@ -11,7 +11,7 @@ "title": "ExpiryIndicator command set registration", "description": "Registers ExpiryIndicator commands for modern lists and document libraries. Does not provision ExpiryDate.", "id": "913402af-ab9a-4974-9f86-5c2159ae41db", - "version": "1.0.1.0", + "version": "1.0.3.0", "assets": { "elementManifests": [ "elements.xml" diff --git a/package.json b/package.json index 1ba50dc..330a344 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "expiry-indicator", - "version": "1.0.1", + "version": "1.0.3", "private": true, "engines": { "node": ">=6.9.0 <9.0.0" diff --git a/scripts/Disable-ExpiryIndicator.ps1 b/scripts/Disable-ExpiryIndicator.ps1 index fa6ba0f..b7b568f 100644 --- a/scripts/Disable-ExpiryIndicator.ps1 +++ b/scripts/Disable-ExpiryIndicator.ps1 @@ -9,9 +9,7 @@ param( [Parameter(Mandatory = $true)] [string]$ExpiryFieldInternalName, - [Guid]$FieldCustomizerComponentId = 'a555f4fc-d6a6-4421-8189-457449d9bbde', - - [Guid]$CommandSetComponentId = 'cd58f5d9-ffc8-4df7-a910-3054842d7abf' + [Guid]$FieldCustomizerComponentId = 'a555f4fc-d6a6-4421-8189-457449d9bbde' ) $isapiPath = Join-Path ([Environment]::GetFolderPath('CommonProgramFiles')) 'microsoft shared\Web Server Extensions\16\ISAPI' @@ -24,28 +22,20 @@ $context.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials try { $list = $context.Web.Lists.GetByTitle($ListTitle) $field = $list.Fields.GetByInternalNameOrTitle($ExpiryFieldInternalName) - $customActions = $list.UserCustomActions $context.Load($list) $context.Load($field) - $context.Load($customActions) $context.ExecuteQuery() - if ($PSCmdlet.ShouldProcess("$($list.Title)/$($field.InternalName)", 'ExpiryIndicator-Registrierungen entfernen')) { - if ($field.ClientSideComponentId -eq $FieldCustomizerComponentId) { - $field.ClientSideComponentId = [Guid]::Empty - $field.ClientSideComponentProperties = '' - $field.Update() - } - - $customActions | Where-Object { - $_.Name -eq 'ExpiryIndicator.CommandSet' -or - $_.ClientSideComponentId -eq $CommandSetComponentId - } | ForEach-Object { - $_.DeleteObject() - } + if ($field.ClientSideComponentId -ne $FieldCustomizerComponentId) { + throw "Das Feld '$($field.InternalName)' ist nicht mit dem erwarteten ExpiryIndicator-Field-Customizer verbunden." + } + if ($PSCmdlet.ShouldProcess("$($list.Title)/$($field.InternalName)", 'Field-Customizer-Verknüpfung entfernen')) { + $field.ClientSideComponentId = [Guid]::Empty + $field.ClientSideComponentProperties = '' + $field.Update() $context.ExecuteQuery() - Write-Host 'ExpiryIndicator-Registrierungen wurden entfernt. Feld und Daten bleiben unverändert.' + Write-Host 'ExpiryIndicator-Verknüpfung wurde entfernt. Feld und Daten bleiben unverändert.' } } finally { diff --git a/scripts/Enable-ExpiryIndicator.ps1 b/scripts/Enable-ExpiryIndicator.ps1 index 59f66b1..ba98714 100644 --- a/scripts/Enable-ExpiryIndicator.ps1 +++ b/scripts/Enable-ExpiryIndicator.ps1 @@ -9,9 +9,7 @@ param( [Parameter(Mandatory = $true)] [string]$ExpiryFieldInternalName, - [Guid]$FieldCustomizerComponentId = 'a555f4fc-d6a6-4421-8189-457449d9bbde', - - [Guid]$CommandSetComponentId = 'cd58f5d9-ffc8-4df7-a910-3054842d7abf' + [Guid]$FieldCustomizerComponentId = 'a555f4fc-d6a6-4421-8189-457449d9bbde' ) $isapiPath = Join-Path ([Environment]::GetFolderPath('CommonProgramFiles')) 'microsoft shared\Web Server Extensions\16\ISAPI' @@ -38,27 +36,17 @@ try { $field.ClientSideComponentProperties = '{}' $field.Update() - $commandAction = $customActions | Where-Object { - $_.Name -eq 'ExpiryIndicator.CommandSet' -or - $_.ClientSideComponentId -eq $CommandSetComponentId - } | Select-Object -First 1 - - if ($null -eq $commandAction) { - $commandAction = $customActions.Add() + # Remove the temporary list-scoped command registration used by older + # diagnostic scripts. The app feature owns the production registration. + $customActions | Where-Object { + $_.Name -eq 'ExpiryIndicator.CommandSet' + } | ForEach-Object { + $_.DeleteObject() } - $commandAction.Name = 'ExpiryIndicator.CommandSet' - $commandAction.Title = 'ExpiryIndicator commands' - $commandAction.Location = 'ClientSideExtension.ListViewCommandSet.CommandBar' - $commandAction.ClientSideComponentId = $CommandSetComponentId - $commandAction.ClientSideComponentProperties = '{}' - $commandAction.Update() - $context.ExecuteQuery() - Write-Host "Field Customizer wurde an '$($field.InternalName)' gebunden." - Write-Host "Command Set wurde an '$($list.Title)' registriert." - Write-Host 'Bitte die moderne Listenansicht mit Strg+F5 neu laden.' + Write-Host "ExpiryIndicator wurde für '$($list.Title)' an '$($field.InternalName)' gebunden." } finally { $context.Dispose() diff --git a/scripts/Test-ExpiryIndicatorRegistration.ps1 b/scripts/Test-ExpiryIndicatorRegistration.ps1 deleted file mode 100644 index 66c5028..0000000 --- a/scripts/Test-ExpiryIndicatorRegistration.ps1 +++ /dev/null @@ -1,50 +0,0 @@ -[CmdletBinding()] -param( - [Parameter(Mandatory = $true)] - [string]$SiteUrl, - - [Parameter(Mandatory = $true)] - [string]$ListTitle, - - [Parameter(Mandatory = $true)] - [string]$ExpiryFieldInternalName -) - -$isapiPath = Join-Path ([Environment]::GetFolderPath('CommonProgramFiles')) 'microsoft shared\Web Server Extensions\16\ISAPI' -Add-Type -Path (Join-Path $isapiPath 'Microsoft.SharePoint.Client.Runtime.dll') -Add-Type -Path (Join-Path $isapiPath 'Microsoft.SharePoint.Client.dll') - -$context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl) -$context.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials - -try { - $list = $context.Web.Lists.GetByTitle($ListTitle) - $field = $list.Fields.GetByInternalNameOrTitle($ExpiryFieldInternalName) - $customActions = $list.UserCustomActions - $context.Load($list) - $context.Load($field) - $context.Load($customActions) - $context.ExecuteQuery() - - Write-Host "Liste: $($list.Title)" - Write-Host "Feld: $($field.InternalName)" - Write-Host "Field Customizer: $($field.ClientSideComponentId)" - Write-Host '' - Write-Host 'List User Custom Actions:' - - $actions = @($customActions | Where-Object { - $_.Location -like 'ClientSideExtension.ListViewCommandSet*' -or - $_.Name -like 'ExpiryIndicator*' - }) - - if ($actions.Count -eq 0) { - Write-Warning 'Kein ExpiryIndicator Command Set an der Liste registriert.' - } - else { - $actions | Select-Object Name, Title, Location, ClientSideComponentId, ClientSideComponentProperties | - Format-List - } -} -finally { - $context.Dispose() -} diff --git a/sharepoint/assets/elements.xml b/sharepoint/assets/elements.xml index 229e14e..41f6dd0 100644 --- a/sharepoint/assets/elements.xml +++ b/sharepoint/assets/elements.xml @@ -3,7 +3,6 @@ - diff --git a/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json b/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json index 59e6605..8bede9a 100644 --- a/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json +++ b/src/extensions/expiryIndicator/ExpiryIndicatorFieldCustomizer.manifest.json @@ -4,7 +4,7 @@ "alias": "ExpiryIndicatorFieldCustomizer", "componentType": "Extension", "extensionType": "FieldCustomizer", - "version": "1.0.1", + "version": "1.0.3", "manifestVersion": 2, "requiresCustomScript": false } diff --git a/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json b/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json index f00d361..a2e2909 100644 --- a/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json +++ b/src/extensions/expiryIndicatorCommandSet/ExpiryIndicatorCommandSet.manifest.json @@ -4,7 +4,7 @@ "alias": "ExpiryIndicatorCommandSet", "componentType": "Extension", "extensionType": "ListViewCommandSet", - "version": "1.0.1", + "version": "1.0.3", "manifestVersion": 2, "requiresCustomScript": false, "items": {