Ошибка при создании типа контента в SP 2007

#sharepoint #events

#sharepoint #Мероприятия

Вопрос:

У меня есть обработчик событий, который перехватывает событие добавления элемента и изменяет тип контента «на лету». Это мой код для создания типа контента:

 SPContentType baseContentType = web.AvailableContentTypes["Folder"];
SPContentType type = new SPContentType(baseContentType, web.ContentTypes, "Custom Folder");

// Add fields to new content type
AddField(ref type, "User", "Owner");
AddField(ref type, "DateTime", "Date");
AddField(ref type, "Text", "Description");
AddField(ref type, "Text", "Justification");
AddField(ref type, "User", "Users");

list.ContentTypes.Add(type);
list.Update();
  

..снип..

 void AddField(ref SPContentType contentType, string fieldType, string fieldName)
{
    SPField field = new SPField(contentType.Fields, fieldType, fieldName);
    if (fieldName.Equals("Users"))
        ((SPFieldUser)field).AllowMultipleValues = true;
    field.Update();
    contentType.Fields.Add(field); // Exception thrown here
    SPFieldLink fieldLink = new SPFieldLink(contentType.Fields[fieldName]);
    contentType.FieldLinks.Add(fieldLink); 
    contentType.Update();
}
  

В строке: ContentType.Ссылки на поля.Добавить (ссылка на поле);,

Я получаю исключение ArgumentNullException: значение не может быть нулевым. Имя параметра: g

Кто-нибудь знает, что это значит, или может увидеть, что я делаю неправильно? Заранее спасибо!

Трассировка стека:

в Microsoft.SharePoint.SPField.UpdateCore (логическое значение bToggleSealed) в Microsoft.SharePoint.SPField.Обновление () в ChangeContentTypeEventHandler.ChangeContentTypeEventHandler.Добавьте поле (SPContentTypeamp; ContentType, String FieldType, String fieldName) в ChangeContentTypeEventHandler.ChangeContentTypeEventHandler.Добавление элементов (несмотря на свойства eventProperties)

Ответ №1:

Вашей ошибки нет в вашем текущем коде. Это дальше по трассировке стека. Можете ли вы опубликовать полную трассировку стека?

Редактировать:

Хорошо с полным стеком трассировки, это означает, что тип контента используется в данный момент. Что вам, скорее всего, нужно сделать, так это указать каскадные параметры. http://msdn.microsoft.com/en-us/library/ms474878.aspx

например, ContentType.Обновление (верно,true)

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

1. Спасибо за ответ. Я добавил трассировку стека к исходному вопросу. Я внес некоторые изменения в код (немного изменил метод AddField), и теперь я получаю исключение SPException для field. Обновление (): эта функциональность недоступна для полей, не связанных со списком