【问题标题】:How to solve my problem: Can't set default content type for a custom content type for a list using csom (c#)?如何解决我的问题:无法使用 csom (c#) 为列表的自定义内容类型设置默认内容类型?
【发布时间】:2019-11-08 09:13:31
【问题描述】:

我正在添加自定义内容类型,然后将其设置为自定义内容类型的默认内容类型。我已按照互联网上的说明进行操作。 当我执行代码时,我的自定义内容类型已添加,但尚未设置为默认内容类型(无错误,运行时出现异常)。 这是我的代码:

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);
        }

那么,我哪里弄错了?我该如何解决?

【问题讨论】:

    标签: sharepoint csom contenttype


    【解决方案1】:

    尝试使用下面的代码为列表设置默认内容类型。

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2022-11-03
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      相关资源
      最近更新 更多