Sharepoint Online无法使用CSOM创建DocumentSet Microsoft.SharePoint.Client.DocumentManagement.dll

时间:2016-11-16 10:47:43

标签: c# sharepoint office365 officedev document-set

我正在使用OfficeDev.Core在C#中的提供商托管加载项中的sharepoint Online中创建DocumentSet“Folder”。

我正在使用最新的CSOM C#库进行Sharepoint在线: Microsoft.SharePoint.Client.dll V16.1.5813.1200 Microsoft.SharePoint.Client.DocumentManagement.dll V16.1.5813.1200

这几个月工作正常,昨天我们注意到从类Microsoft.SharePoint.Client.DocumentSet.DocumentSet创建的方法返回错误未知!

我使用具有最高权限的AppOnly Access Token。

您是否有任何想法或解决方法来使用CSOM创建文档集?

由于

PS:我尝试用UI创建这个文档集,它工作正常。

2 个答案:

答案 0 :(得分:1)

确实,至少我在尝试通过 SharePoint Online 中的CSOM API创建文档集时遇到同样的问题(Microsoft.SharePoint.Client.UnknownError异常)。

如何重现?

通过Microsoft.SharePointOnline.CSOM library创建文档集时:

var list = ctx.Web.Lists.GetByTitle("Documents");

var docSetContentType = ctx.Site.RootWeb.ContentTypes.GetById("0x0120D520");
ctx.Load(docSetContentType);

ctx.Load(list.RootFolder);
ctx.ExecuteQuery();
var result = DocumentSet.Create(ctx, list.RootFolder, docSetName, docSetContentType.Id);
ctx.ExecuteQuery();

SharePoint Online 中出现Microsoft.SharePoint.Client.UnknownError的例外情况。

  

注意:在最新版本和早期版本中检测到错误   Microsoft.SharePointOnline.CSOM库的。{这让我觉得不是   与CSOM库相关,而是与SharePoint Online CSOM相关   服务本身。

解决方法

但是有一种解决方法可以创建文档集(不涉及Microsoft.SharePoint.Client.DocumentSet命名空间)

public static void CreateDocumentSet(List list, string docSetName)
{
        var ctx = list.Context;
        if (!list.IsObjectPropertyInstantiated("RootFolder"))
        {
            ctx.Load(list.RootFolder);
            ctx.ExecuteQuery();
        }

        var itemInfo = new ListItemCreationInformation();
        itemInfo.UnderlyingObjectType = FileSystemObjectType.Folder;
        itemInfo.LeafName = docSetName;
        itemInfo.FolderUrl = list.RootFolder.ServerRelativeUrl;
        var item = list.AddItem(itemInfo);
        item["ContentTypeId"] = "0x0120D520";
        item["HTML_x0020_File_x0020_Type"] = "SharePoint.DocumentSet";
        item.Update();
        ctx.ExecuteQuery();
}
  

已针对SharePoint 20102013Online版本进行验证

用法

var list = ctx.Web.Lists.GetByTitle("Documents");
CreateDocumentSet(list,docSetName);

答案 1 :(得分:1)

我在这篇文章中找到了解决方案:

https://sharepoint.stackexchange.com/questions/199336/creating-document-sets-with-sharepoint-csom-api/199718#199718

我在星期一早上14/11/2016在租客身上遇到了同样的问题

文档集的创建突然停止工作

现有代码:

var devisCT = globalHostWeb.GetContentTypeByName(SPConstants.CTName_Devis);
dsQuoteFolder = rootFolder.CreateDocumentSet(folderName, devisCT.Id);

对我有用的解决方案是:

var devisCT = devisLib.GetContentTypeByName(SPConstants.CTName_Devis); 
dsQuoteFolder = rootFolder.CreateDocumentSet(folderName, devisCT.Id);

我现在从我想要创建文档集的库中获取内容类型。

检索到的ContentTypeId是longuer,此ID可用。

您可以注意到我使用方法GetContentTypeByName,它的工作方式与GetContentTypeByID一样。