2

OfficeDev.Core を使用して、C# のプロバイダー ホスト型アドインで SharePoint Online に DocumentSet "Folder" を作成しています。

SharePoint Online の最新の CSOM C# ライブラリを使用しています: Microsoft.SharePoint.Client.dll V16.1.5813.1200 Microsoft.SharePoint.Client.DocumentManagement.dll V16.1.5813.1200

これは数か月間正常に機能していましたが、昨日、クラス Microsoft.SharePoint.Client.DocumentSet.DocumentSet の Create メソッドが不明なエラーを返すことに気付きました。

最高のアクセス許可を持つ AppOnly アクセス トークンを使用します。

CSOM でドキュメントセットを作成するためのアイデアや回避策はありますか?

ありがとう

PS: UI を使用してこのドキュメントセットを作成しようとしましたが、正常に動作します。  

4

2 に答える 2

1

実際、 SharePoint OnlineMicrosoft.SharePoint.Client.UnknownErrorで CSOM API を介してドキュメント セットを作成しようとしているときに、少なくとも現時点で同じ問題 (例外) が発生しています。

再現する方法は?

Microsoft.SharePointOnline.CSOMライブラリを介してドキュメント セットを作成する場合:

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 20102013およびOnlineバージョンに対して検証済み

使用法

var list = ctx.Web.Lists.GetByTitle("Documents");
CreateDocumentSet(list,docSetName);
于 2016-11-16T12:17:17.027 に答える