Как решить мою проблему: Не удается установить тип содержимого по умолчанию для пользовательского типа содержимого для списка с помощью csom (c #)? - PullRequest
0 голосов
/ 08 ноября 2019

Я добавляю пользовательский тип контента и затем устанавливаю его как тип контента по умолчанию для пользовательского типа контента. Я следовал инструкции в интернете. Когда я выполняю код, мой пользовательский тип контента был добавлен, но он не был установлен как тип контента по умолчанию (Нет ошибок, исключение при запуске). Вот мой код:

List list = web.Lists.GetByTitle(lname);
                    list.ContentTypesEnabled = true;
                    list.ContentTypes.AddExistingContentType(contentType);                    
                    var ctypes = list.ContentTypes;
                    context.Load(ctypes);
                    context.ExecuteQuery();
                    var ids = new List<ContentTypeId>();
                    foreach(var content in ctypes)
                    {
                        ids.Add(GetByName(ctypes, content.Name).Id);
                    }
                    ids.Reverse();
                    list.RootFolder.UniqueContentTypeOrder = ids;
                    list.RootFolder.Update();
                    list.Update();

                    context.Load(list.RootFolder, r => r.UniqueContentTypeOrder);
                    Console.WriteLine("Content-type Added!");

Функция GetByName выше я использую, чтобы получить ContentType по имени:

  public static ContentType GetByName(ContentTypeCollection cts, string name)
        {
            var ctx = cts.Context;
            ctx.Load(cts);
            ctx.ExecuteQuery();
            return Enumerable.FirstOrDefault(cts, ct => ct.Name == name);
        }

Итак, где я понял это неправильно? Как я могу решить это?

1 Ответ

0 голосов
/ 11 ноября 2019

Попробуйте установить тип содержимого по умолчанию для списка, используя приведенный ниже код.

List aeList = context.Web.Lists.GetByTitle(lname);
var currentCtOrder = aeList.ContentTypes;
context.Load(currentCtOrder, coll => coll.Include(
                        ct => ct.Name,
                        ct => ct.Id));
context.ExecuteQuery();

IList<ContentTypeId> reverseOrder = (from ct in currentCtOrder where ct.Name.Equals("CustomContentTypeName", StringComparison.OrdinalIgnoreCase) select ct.Id).ToList();
aeList.RootFolder.UniqueContentTypeOrder = reverseOrder;
aeList.RootFolder.Update();
aeList.Update();
context.ExecuteQuery();
...