Дано: SharePoint 2013. Создан дочерний сайт. На нем создан тип контента на базе события календаря - CustomEvent. В нем потребовалось удалить ненужные колонки, унаследованные от родителя - All Day Event (Целый день), Recurrence (Повторение), Workspace (Рабочая область).
При попытке удаления появляется ошибка:
New-Object : A constructor was not found. Cannot find an appropriate constructor for type Microsoft.SharePoint.SPFieldLink.
At line:6 char:16
+ $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["All Day ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand
Для удаления использовался следующий скрипт:
Причина ошибки заключалась в том, что тип контента базировался на типе родительского сайта, поэтому скрипт необходимо подредактировать следующим образом:
Т.е. экземпляр поля необходимо получить с родительского сайта (web), а удалять в типе контента дочернего сайта (subweb).
Если же сайт не дочерний, но локализован, то необходимо использовать локализованные названия колонок типа контента:
(с) Ella S.
При попытке удаления появляется ошибка:
New-Object : A constructor was not found. Cannot find an appropriate constructor for type Microsoft.SharePoint.SPFieldLink.
At line:6 char:16
+ $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["All Day ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (:) [New-Object], PSArgumentException
+ FullyQualifiedErrorId : CannotFindAppropriateCtor,Microsoft.PowerShell.Commands.NewObjectCommand
Для удаления использовался следующий скрипт:
Add-PSSnapIn Microsoft.SharePoint.PowerShell $web = Get-SPWeb http://vs-pro/tmp1/ $ct = $web.ContentTypes["CustomEvent"] $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["All Day Event"]) $ct.FieldLinks.Delete($spFieldLink.Id) $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Recurrence"]) $ct.FieldLinks.Delete($spFieldLink.Id) $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Workspace"]) $ct.FieldLinks.Delete($spFieldLink.Id) $ct.Update() $web.Dispose()
Причина ошибки заключалась в том, что тип контента базировался на типе родительского сайта, поэтому скрипт необходимо подредактировать следующим образом:
Add-PSSnapIn Microsoft.SharePoint.PowerShell $subweb = Get-SPWeb http://vs-pro/tmp1/ $web = Get-SPWeb http://vs-pro/ $ct = $subweb.ContentTypes["CustomEvent"] $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["All Day Event"]) $ct.FieldLinks.Delete($spFieldLink.Id) $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Recurrence"]) $ct.FieldLinks.Delete($spFieldLink.Id) $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Workspace"]) $ct.FieldLinks.Delete($spFieldLink.Id) $ct.Update() $web.Dispose() $subweb.Dispose()
Т.е. экземпляр поля необходимо получить с родительского сайта (web), а удалять в типе контента дочернего сайта (subweb).
Если же сайт не дочерний, но локализован, то необходимо использовать локализованные названия колонок типа контента:
Add-PSSnapIn Microsoft.SharePoint.PowerShell $web = Get-SPWeb http://vs-pro/ $ct = $web.ContentTypes["CustomEvent"] $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Целый день"]) $ct.FieldLinks.Delete($spFieldLink.Id) $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Повторение"]) $ct.FieldLinks.Delete($spFieldLink.Id) $spFieldLink = New-Object Microsoft.SharePoint.SPFieldLink ($web.Fields["Рабочая область"]) $ct.FieldLinks.Delete($spFieldLink.Id) $ct.Update() $web.Dispose()
(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.
Комментариев нет:
Отправить комментарий