我正在使用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创建这个文档集,它工作正常。
答案 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
2010
,2013
和Online
版本进行验证
用法
var list = ctx.Web.Lists.GetByTitle("Documents");
CreateDocumentSet(list,docSetName);
答案 1 :(得分:1)
我在这篇文章中找到了解决方案:
我在星期一早上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一样。