Создание типа контента списка с помощью csom

Я не могу создать тип содержимого списка, используя приведенный ниже фрагмент. Он выдает ServerException с дополнительной информацией: "Тип контента сайта уже добавлен в этот список".

       var list =  clientContext.Web.Lists.GetByTitle("sometitle");
       var documentCT = clientContext.Web.ContentTypes.GetById("0x0101");
       clientContext.Load(list,l=> l.ContentTypes);
       clientContext.Load(documentCT);
       clientContext.ExecuteQuery();

       var test = new ContentTypeCreationInformation(){
            Name = "TestCT", ParentContentType =documentCT };

       list.ContentTypes.Add(test);

       list.Update();
       clientContext.ExecuteQuery();

По сути, я хочу создать тип контента списка, родителем которого является CT «Документ».


person Kshitiz Shakya    schedule 06.03.2016    source источник
comment
Ошибка, которую вы получаете, предполагает, что тип контента был создан и присоединен к списку, его повторный запуск вызовет эту ошибку, вы говорите, что запустили сценарий, и тип контента существует, но не присоединяется к списку список или тип контента даже не создается?   -  person Truezplaya    schedule 07.03.2016
comment
да, тип контента не создается.   -  person Kshitiz Shakya    schedule 07.03.2016
comment
Где ты проверяешь? настройки сайта, типы контента?   -  person Truezplaya    schedule 07.03.2016
comment
да в типах контента сайта.. Обратите внимание, что моя цель - добавить тип контента списка...   -  person Kshitiz Shakya    schedule 08.03.2016


Ответы (1)


Я столкнулся с этой же проблемой.

Здесь происходит то, что вы успешно добавили тип контента в список, но не включили «разрешить управление типами контента» в настройках библиотеки> Дополнительные настройки> Первая настройка. Вы не увидите тип контента через пользовательский интерфейс.

Как только вы включите этот параметр, вы увидите, что ваш тип контента действительно был добавлен.

Вот как я создаю библиотеку

public static List CreateLibrary(ClientContext context, string title, bool allowContentTypes)
    {
        ListCreationInformation lci = new ListCreationInformation
        {
            Description = "Library used to hold Dynamics CRM documents",
            Title = title,
            TemplateType = 101,

        };

        List lib = context.Web.Lists.Add(lci);
        lib.ContentTypesEnabled = allowContentTypes ? true : false;
        lib.Update();
        context.Load(lib);
        context.ExecuteQuery();

        return lib;

    }

Для вашего случая просто добавьте в строку:

list.ContentTypesEnabled = true;

Не забудьте list.Update(), я вижу, что он есть в вашем коде, но для всех остальных эта часть необходима перед использованием ExecuteQuery().

person Aaron Woods    schedule 04.10.2018