Исправление ошибки SharePoint "Тип поля установлен неправильно"

Однажды при создании решения со столбцами сайта, типами контента и списками в результате небольшой ошибки в описании 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. Потому такие вещи можно делать ТОЛЬКО В ТЕСТОВЫХ СРЕДАХ!

 


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

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment






MarkiMarta.ru. Записки отца-программиста" с 2009 г.
Категория информационной продукции 18+
Яндекс.Метрика