Проблема с добавлением поля в пользовательский тип списка в SharePoint - PullRequest
0 голосов
/ 10 июля 2009

Я определил пользовательский тип шаблона списка для SharePoint . Я устанавливаю его, используя VSeWSS 1.3, и все, кажется, ведет себя правильно.

Я добавил пользовательское действие, которое будет добавлять дополнительные столбцы (SPFields) в список . Однако каждый раз, когда этот код выполняется, он выдает и ArgumentException с 'значением, не находящимся в ожидаемом диапазоне.' сообщение об ошибке. Такое поведение специфично для пользовательских типов, как это предлагается в этом сообщении в блоге .

Вот соответствующий код (thisList является экземпляром моего настраиваемого типа шаблона списка, созданного с помощью взаимодействия с браузером), который пытается добавить поле в SPFieldCollection thisList:

                SPFieldType fieldType = Format2SPFieldType(format);
                SPField field = new SPField(thisList.Fields, fieldType.ToString(), fieldName);
                thisList.Fields.Add(field);

Последний оператор (thisList.Fields.Add (field)) выдает следующее исключение:

   Message  "Value does not fall within the expected range."

   at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName, Boolean bThrowException)
   at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName)
   at Microsoft.SharePoint.SPFieldCollection.AddFieldAsXmlInternal(String schemaXml, Boolean addToDefaultView, SPAddFieldOptions op)
   at Microsoft.SharePoint.SPFieldCollection.AddFieldAsXml(String schemaXml, Boolean addToDefaultView, SPAddFieldOptions op)
   at Microsoft.SharePoint.SPFieldCollection.Add(SPField field)

Этот же код выполняется просто отлично, если элемент SPList является базовым типом списка (встроенный пользовательский список).

Существуют ли поля , которые нужно явно установить в CAML и использовать метод AddFieldAsXml () напрямую, чтобы этот код работал с настраиваемым списком типы шаблонов?

Обновление: Я должен также упомянуть, что поля действительно создаются в некоторых случаях, даже если вызов вызывает исключение!

Ответы [ 2 ]

1 голос
/ 11 июля 2009

Оказывается, это было вызвано , потому что вызов thisList.SchemaXML переводит объект SPList в состояние, из которого я не смог восстановиться! Получение новой ссылки на тот же список SharePoint, например, SPList newList = thisList.ParentWeb.Lists [thisList.ID] решил проблему!

0 голосов
/ 10 июля 2009

Какой тип поля вы пытаетесь добавить? Это внутреннее поле или тип настраиваемого поля, что возвращает эта функция Format2SPFieldType? Если это встроенное поле, попробуйте добавить с помощью

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);
...