Проблема с добавлением поля к пользовательскому типу списка в SharePoint

StackOverflow https://stackoverflow.com/questions/1106949

Вопрос

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

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

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

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

Последнее утверждение (thisList.Поля.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 является типом базового списка (встроенный пользовательский список).

Существуют ли какие - либо поля, которые необходимо задать явно в КАМЛ и используя Метод AddFieldAsXml() непосредственно для того, чтобы заставить этот код работать с пользовательскими типами шаблонов списков?

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

Это было полезно?

Решение

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

Другие советы

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

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top