Ошибка New-Object: A constructor was not found. Cannot find an appropriate constructor for type Microsoft.SharePoint.SPFieldLink

Дано: 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

Для удаления использовался следующий скрипт:

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.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет:

Отправить комментарий