Как обновить тип контента программно? - PullRequest
0 голосов
/ 05 августа 2010

Я хочу изменить свойство «Обязательное» для поля списка, связанного с типом содержимого.Я изменил тип содержимого и схему списка, но для параметра «Требуется» все еще установлено значение «истина», я хочу, чтобы оно было необязательным.

Есть идеи?

спасибо

Ответы [ 2 ]

2 голосов
/ 07 августа 2010

Попробуйте так:

private void SetFieldRequired(SPList list, string field, string contentType, bool required)
{
    SPField fieldInList = list.Fields[field];
    fieldInList.Required = required;        
    fieldInList.Update();

    SPField fieldInContentType = list.ContentTypes[contentType].Fields[field];
    fieldInContentType.Required = required;
    fieldInContentType.Update();
}

Не забудьте добавить обработку исключений.

1 голос
/ 05 августа 2010

Если вы создали свой список и тип контента программно (с использованием файлов XML), есть несколько мест, где вам нужно внести изменения:

  1. В вашем файле ContentType.CT.Columns.xml(установите атрибут Required = "FALSE" в XML вашего элемента Field).
  2. В вашем ContentType.CT.xml (установите атрибут Required = "FALSE" в XML вашего элемента FieldRef)
  3. В файле schema.xml вашего списка найдите раздел и найдите свое поле и установите для атрибута значение false.

Похоже, вы все сделали правильно.Однако файл schema.xml используется только при создании списка.Поэтому, если вы изменили schema.xml и развернули его, но без удаления и повторного создания списка, ваши изменения будут фактически бесполезны.

РЕДАКТИРОВАТЬ:

Если вы не можете удалить и заново создать свой список, вам придется написать код, который будет делать это программно (с помощью функции или аналогичной функции).Это сделает свое дело:

   using (SPSite site = new SPSite("http://yoursite"))
    {
        using (SPWeb web = site.RootWeb)
        {
            SPList list = web.Lists.TryGetList("Your List");
            if (list != null)
            {
                SPField fld = list.Fields[SPBuiltInFieldId.RequiredField];
                fld.Required = false;
                fld.Update();
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...