Однажды при создании решения со столбцами сайта, типами контента и списками в результате небольшой ошибки в описании XML столбцов столкнулся с тем, что не могу ни обновить решение, ни удалить.
Visual studio выдавала сообщение об ошибке:
Error 1 Error occurred in deployment step 'Activate Features': Тип поля "Decimal" установлен неправильно. Перейдите на страницу параметров списка и удалите это поле.
При считывании колонок сайта через консоль SharePoint (PowerShell) получал аналогичную ошибку:
PS C:\Users\user> $spsite = Get-SPSite http://spdev/
PS C:\Users\user> $spweb = Get-SPWeb http://spdev/fis/
PS C:\Users\user> $spweb.Fields
Выводится список колонок сайта, прерывающийся на ошибке:
An error occurred while enumerating through a collection: Field type Decimal is
not installed properly. Go to the list settings page to delete this field. .
At line:1 char:8
+ $spweb. <<<< Fields
+ CategoryInfo : InvalidOperation: (Microsoft.Share...on+SPEnumer
ator:SPEnumerator) [], RuntimeException
+ FullyQualifiedErrorId : BadEnumeration
Что бы ни говорили в Microsoft про то, что нельзя трогать контентную базу SharePoint, изменение внутри базы – единственный способ устранения ошибки. Насколько мне известно, такой баг был заведен коллегами из других стран более года назад и он до сих пор не исправлен.
Внимание! В результате манипуляций, описанных ниже, Вы лишитесь поддержки Microsoft, если она есть и она нужна.
Задача по исправлению сводится к поиску удалению из таблицы "ContentTypes" записи о неправильном типе контента. В таблице ContentTypes хранятся записи о типах столбцов сайта и типах контента.
Поскольку я создавал решения для SPWeb и на уровне SPWeb активировал фичу добавления типов столбцов, то для сужения поиска нужных записей сделал запрос к таблице, где в условии Where указал название рабочего сайта 'fis'. Увидев в результате 4 записи добавил к условию "Definition like '%decimal%'":
SELECT TOP 1000 [SiteId] ,[Class] ,[Scope] ,[ContentTypeId] ,[Version] ,[NextChildByte] ,[Size] ,[Definition] ,[ResourceDir] ,[SolutionId] ,[IsFromFeature] ,[DeleteTransactionId] FROM [SPDEV_WSS_Content].[dbo].[ContentTypes] WHERE Scope like '%fis%' AND Definition like '%decimal%'
Найдя одну запись и посмотрев на значения колонок в таблице, следующим запросом я удалил эту запись:
DELETE from SPDEV_WSS_Content.dbo.ContentTypes WHERE Scope like '%fis%' AND Definition like '%decimal%'
Сразу после этого ошибка пропала.
Как уже писал выше, от таких манипуляций пропадает поддержка Microsoft. Потому такие вещи можно делать ТОЛЬКО В ТЕСТОВЫХ СРЕДАХ!